C2837x入门指南(十九)—双内核之间的通信
Loading the player...
将在30s后自动为您播放下一课程
大家好 接下来我们进入第十一章 双核之间的通讯 IPC模块的学习 在这一章 我们先学习IPC的基本操作方式 然后我们学习如何利用IPC模块 完成两个CPU核之间的数据通讯 IPC模块的主要功能是完成CPU1和2两个CPU子系统之间的数据通讯 因此它只存在于C2000里面一些特殊的拥有双核的子系列上 比如F28M35 F28M36 以及F2837XD 那么IPC模块式内部的两个子CPU之间的通讯 因此它和我们传统学习到的SPI SCI通讯不同 它可以利用芯片内部的资源 来完成通讯 比如[听不清] 携带的RAM空间 来协助完成一些小的信号 小的数据的传送 比如IPC的flag和中断 能协助完成两个CPU核之间的 事件的通知通讯 还有[听不清] 还有信标的控制 能保证flash独立的控制 在同一个时刻 只允许一个flash拥有pump的控制权 而不受另一个flash CPU的打扰 那么我们首先将要介绍一下 全局共享RAM 顾名思义就是说 它的空间是可以被CPU1或者2拥有的 我们的F2837X拥有不超过16个全局RAM共享的块 分别从GS0到GS15 每个块的大小是4K的Word 在内存中 它的映射地址是从里面的C000开始 那么共享RAM在什么时刻 在某个时刻 只允许被一个CPU核拥有 具体是被CPU1拥有还是CPU2拥有 这是通过寄存器GSXMSEL来确定的 同理 我们在应用程序中可以通过更改 这个寄存器的内容可以完成RAM[听不清]层的变更 举例 比如CPU块拥有某个RAM权限后 那该CPU核拥有完全读写的权限 而CPU中的DMA总线 拥有读和写的权限 同时 另外一个CPU2核拥有只读的权限 反过来也是 假如CPU2核 拥有某个块的权限的时候 它就拥有了读写和执行的权限 而CPU1拥有只读权限 共享RAM在IPC中主要完成大的数据的传送 比如 完成从CPU1到2的数据传输的时候 我们在CPU1完全拥有的快中 将信息填入进去 然后通过CPU2来读取这个数据 完成数据中CPU1到2的传送 那么除了大数据的传送 我们还有一些特殊的小数据的传送 我们可以利用RAM空间 利用IPC的[听不清] 也就是[听不清]RAM 那么F2837X 我们用了两个单独的message RAM 大小分别是1K word 命名是C1toC2 C2toC1 顾名思义 C1toC2 是CPU1拥有读写权限 CPU2拥有只读权限 那么同理C2toC1 CPU2拥有读写权限 CPU1拥有只读的权限 这个message RAM和前面的共享RAM一个主要的区别是 这个方向是固定的 你不需要设置message RAM的方向 而且它是一直使能的 你不需要在应用程序更改配置这些 它使用起来更加方便和简单 我们现在讲一下IPC的命令寄存器 它的主要作用是提供一些比较简单和灵活的message 信息的传送 这些信息是一些非常小的数据 不像共享RAM需要传送很大的数据的 那么我们每个CPU核的话 拥有8个命令寄存器 分别是4个来传送 4个用来接收信息 每个寄存器的命名虽然叫[听不清]或者data 主要是为了支持这个协议 它都可以单独做任何的作用 比如我们的[听不清]address 可以用来传送数据 我的data 也可以用来传送地址 这个都是可以互相变换的 只是唯一不变的是 我的读写权限不变 比如CPU1的发送 有三个可读写的权限 和一个只读权限的寄存器 接受就是3个只读权限的寄存器 和一个可读写的寄存器 这个权限是不变的 那么我们TI提供的IPC lite 这个方式也是利用了我们的命令寄存器 来完成整个数据的传送 接下来我们看看IPC的事件标志和中断 如果CPU系统之家需要传送一些数据 比如[听不清] 这些事件的时候 我们完全可以利用flag这个标志 也中断这个响应机制来完成 每个CPU拥有32个事件标志 命名是从IPC1到IPC31 前面的4个IPC0到3 可以让远程CPU产生中断的功能 那么CPU事件标志能被[听不清]置位和清零 也能被远程的CPU应答信号 清零 这个是IPC flag的结构图 从这个图中可以看到 CPU如果要完成信息到CPU2的传送的话 我们把IPC的set来置位 让IPC2通过响应 或者读取我的IPC state 或者事件[听不清]的信号 应答完之后 我通过在应答位的设置清零 来完成CPU1这边的clear的动作 那么我们来讲讲basic IPC 数据传输的方式 之所以是basic 因为它不需要任何软件驱动 它使用起来非常简单 非常高效 我们具体的操作原理是利用message 我们的[听不清]RAM 或者我们的共享RAM完成数据的传输 同时利用IPC的flag 标志寄存器和中断响应机制 来完成两个CPU之间的协同操作 比如 在这里的例子 CPU1想把数据传给CPU2的话 第一步 把我的数据写入到message RAM里面 或者我的global share的RAM 然后在IPC flag标志里面 同时我CPU2的 C1toC2的状态同时被置位 CPU2上的应用程序假如读取到这个信息 这个状态已经发生了改变 我的CPU1已经把数据放到了共享RAM或message RAM里面 那么CPU2只需要把这些数据读取出来 读取完之后 CPU2只需要在我的应答位上置位 告诉CPU1我完成了数据读取 这个过程非常简单 就完成了数据从CPU1传送到CPU2 因此不需要任何驱动程序的 那么针对IPC的数据传送 TI提供了几种方式 第一种是最基础的传送 它的好处是无需软件驱动 使用简单 只需要IPC的寄存器 第二种是IPC的 lite 它跟basic相比 也是利用了IPC的寄存器 它能允许IPC的中断 而且我能利用中断机制 及时传递数据 而且它利用了我们的command message这些寄存器来完成数据传送 那么最后我们提供了完整的IPC的库 它比IPC RAM更高级 能够传输更多数据 可以利用我们的RAM空间 可以传送更多数据 同时它能响应更多的IPC的中断 那么后面IPC[听不清]这种驱动过程 都是TI提供的 另外 在[听不清]里面 我们将提供新的传输方式
大家好 接下来我们进入第十一章 双核之间的通讯 IPC模块的学习 在这一章 我们先学习IPC的基本操作方式 然后我们学习如何利用IPC模块 完成两个CPU核之间的数据通讯 IPC模块的主要功能是完成CPU1和2两个CPU子系统之间的数据通讯 因此它只存在于C2000里面一些特殊的拥有双核的子系列上 比如F28M35 F28M36 以及F2837XD 那么IPC模块式内部的两个子CPU之间的通讯 因此它和我们传统学习到的SPI SCI通讯不同 它可以利用芯片内部的资源 来完成通讯 比如[听不清] 携带的RAM空间 来协助完成一些小的信号 小的数据的传送 比如IPC的flag和中断 能协助完成两个CPU核之间的 事件的通知通讯 还有[听不清] 还有信标的控制 能保证flash独立的控制 在同一个时刻 只允许一个flash拥有pump的控制权 而不受另一个flash CPU的打扰 那么我们首先将要介绍一下 全局共享RAM 顾名思义就是说 它的空间是可以被CPU1或者2拥有的 我们的F2837X拥有不超过16个全局RAM共享的块 分别从GS0到GS15 每个块的大小是4K的Word 在内存中 它的映射地址是从里面的C000开始 那么共享RAM在什么时刻 在某个时刻 只允许被一个CPU核拥有 具体是被CPU1拥有还是CPU2拥有 这是通过寄存器GSXMSEL来确定的 同理 我们在应用程序中可以通过更改 这个寄存器的内容可以完成RAM[听不清]层的变更 举例 比如CPU块拥有某个RAM权限后 那该CPU核拥有完全读写的权限 而CPU中的DMA总线 拥有读和写的权限 同时 另外一个CPU2核拥有只读的权限 反过来也是 假如CPU2核 拥有某个块的权限的时候 它就拥有了读写和执行的权限 而CPU1拥有只读权限 共享RAM在IPC中主要完成大的数据的传送 比如 完成从CPU1到2的数据传输的时候 我们在CPU1完全拥有的快中 将信息填入进去 然后通过CPU2来读取这个数据 完成数据中CPU1到2的传送 那么除了大数据的传送 我们还有一些特殊的小数据的传送 我们可以利用RAM空间 利用IPC的[听不清] 也就是[听不清]RAM 那么F2837X 我们用了两个单独的message RAM 大小分别是1K word 命名是C1toC2 C2toC1 顾名思义 C1toC2 是CPU1拥有读写权限 CPU2拥有只读权限 那么同理C2toC1 CPU2拥有读写权限 CPU1拥有只读的权限 这个message RAM和前面的共享RAM一个主要的区别是 这个方向是固定的 你不需要设置message RAM的方向 而且它是一直使能的 你不需要在应用程序更改配置这些 它使用起来更加方便和简单 我们现在讲一下IPC的命令寄存器 它的主要作用是提供一些比较简单和灵活的message 信息的传送 这些信息是一些非常小的数据 不像共享RAM需要传送很大的数据的 那么我们每个CPU核的话 拥有8个命令寄存器 分别是4个来传送 4个用来接收信息 每个寄存器的命名虽然叫[听不清]或者data 主要是为了支持这个协议 它都可以单独做任何的作用 比如我们的[听不清]address 可以用来传送数据 我的data 也可以用来传送地址 这个都是可以互相变换的 只是唯一不变的是 我的读写权限不变 比如CPU1的发送 有三个可读写的权限 和一个只读权限的寄存器 接受就是3个只读权限的寄存器 和一个可读写的寄存器 这个权限是不变的 那么我们TI提供的IPC lite 这个方式也是利用了我们的命令寄存器 来完成整个数据的传送 接下来我们看看IPC的事件标志和中断 如果CPU系统之家需要传送一些数据 比如[听不清] 这些事件的时候 我们完全可以利用flag这个标志 也中断这个响应机制来完成 每个CPU拥有32个事件标志 命名是从IPC1到IPC31 前面的4个IPC0到3 可以让远程CPU产生中断的功能 那么CPU事件标志能被[听不清]置位和清零 也能被远程的CPU应答信号 清零 这个是IPC flag的结构图 从这个图中可以看到 CPU如果要完成信息到CPU2的传送的话 我们把IPC的set来置位 让IPC2通过响应 或者读取我的IPC state 或者事件[听不清]的信号 应答完之后 我通过在应答位的设置清零 来完成CPU1这边的clear的动作 那么我们来讲讲basic IPC 数据传输的方式 之所以是basic 因为它不需要任何软件驱动 它使用起来非常简单 非常高效 我们具体的操作原理是利用message 我们的[听不清]RAM 或者我们的共享RAM完成数据的传输 同时利用IPC的flag 标志寄存器和中断响应机制 来完成两个CPU之间的协同操作 比如 在这里的例子 CPU1想把数据传给CPU2的话 第一步 把我的数据写入到message RAM里面 或者我的global share的RAM 然后在IPC flag标志里面 同时我CPU2的 C1toC2的状态同时被置位 CPU2上的应用程序假如读取到这个信息 这个状态已经发生了改变 我的CPU1已经把数据放到了共享RAM或message RAM里面 那么CPU2只需要把这些数据读取出来 读取完之后 CPU2只需要在我的应答位上置位 告诉CPU1我完成了数据读取 这个过程非常简单 就完成了数据从CPU1传送到CPU2 因此不需要任何驱动程序的 那么针对IPC的数据传送 TI提供了几种方式 第一种是最基础的传送 它的好处是无需软件驱动 使用简单 只需要IPC的寄存器 第二种是IPC的 lite 它跟basic相比 也是利用了IPC的寄存器 它能允许IPC的中断 而且我能利用中断机制 及时传递数据 而且它利用了我们的command message这些寄存器来完成数据传送 那么最后我们提供了完整的IPC的库 它比IPC RAM更高级 能够传输更多数据 可以利用我们的RAM空间 可以传送更多数据 同时它能响应更多的IPC的中断 那么后面IPC[听不清]这种驱动过程 都是TI提供的 另外 在[听不清]里面 我们将提供新的传输方式
大家好 接下来我们进入第十一章
双核之间的通讯 IPC模块的学习
在这一章 我们先学习IPC的基本操作方式
然后我们学习如何利用IPC模块 完成两个CPU核之间的数据通讯
IPC模块的主要功能是完成CPU1和2两个CPU子系统之间的数据通讯
因此它只存在于C2000里面一些特殊的拥有双核的子系列上
比如F28M35
F28M36 以及F2837XD
那么IPC模块式内部的两个子CPU之间的通讯
因此它和我们传统学习到的SPI SCI通讯不同
它可以利用芯片内部的资源 来完成通讯
比如[听不清]
携带的RAM空间 来协助完成一些小的信号
小的数据的传送
比如IPC的flag和中断 能协助完成两个CPU核之间的
事件的通知通讯
还有[听不清] 还有信标的控制
能保证flash独立的控制 在同一个时刻
只允许一个flash拥有pump的控制权
而不受另一个flash CPU的打扰
那么我们首先将要介绍一下
全局共享RAM 顾名思义就是说
它的空间是可以被CPU1或者2拥有的
我们的F2837X拥有不超过16个全局RAM共享的块
分别从GS0到GS15
每个块的大小是4K的Word
在内存中 它的映射地址是从里面的C000开始
那么共享RAM在什么时刻 在某个时刻
只允许被一个CPU核拥有
具体是被CPU1拥有还是CPU2拥有
这是通过寄存器GSXMSEL来确定的
同理 我们在应用程序中可以通过更改
这个寄存器的内容可以完成RAM[听不清]层的变更
举例 比如CPU块拥有某个RAM权限后
那该CPU核拥有完全读写的权限
而CPU中的DMA总线 拥有读和写的权限
同时 另外一个CPU2核拥有只读的权限
反过来也是 假如CPU2核
拥有某个块的权限的时候
它就拥有了读写和执行的权限
而CPU1拥有只读权限
共享RAM在IPC中主要完成大的数据的传送
比如 完成从CPU1到2的数据传输的时候
我们在CPU1完全拥有的快中
将信息填入进去 然后通过CPU2来读取这个数据
完成数据中CPU1到2的传送
那么除了大数据的传送
我们还有一些特殊的小数据的传送
我们可以利用RAM空间 利用IPC的[听不清]
也就是[听不清]RAM 那么F2837X
我们用了两个单独的message RAM
大小分别是1K word
命名是C1toC2 C2toC1
顾名思义 C1toC2
是CPU1拥有读写权限 CPU2拥有只读权限
那么同理C2toC1 CPU2拥有读写权限
CPU1拥有只读的权限
这个message RAM和前面的共享RAM一个主要的区别是
这个方向是固定的
你不需要设置message RAM的方向
而且它是一直使能的
你不需要在应用程序更改配置这些
它使用起来更加方便和简单
我们现在讲一下IPC的命令寄存器
它的主要作用是提供一些比较简单和灵活的message
信息的传送
这些信息是一些非常小的数据
不像共享RAM需要传送很大的数据的
那么我们每个CPU核的话
拥有8个命令寄存器
分别是4个来传送 4个用来接收信息
每个寄存器的命名虽然叫[听不清]或者data
主要是为了支持这个协议
它都可以单独做任何的作用
比如我们的[听不清]address
可以用来传送数据 我的data
也可以用来传送地址
这个都是可以互相变换的
只是唯一不变的是
我的读写权限不变
比如CPU1的发送 有三个可读写的权限
和一个只读权限的寄存器
接受就是3个只读权限的寄存器
和一个可读写的寄存器
这个权限是不变的
那么我们TI提供的IPC lite
这个方式也是利用了我们的命令寄存器
来完成整个数据的传送
接下来我们看看IPC的事件标志和中断
如果CPU系统之家需要传送一些数据 比如[听不清]
这些事件的时候
我们完全可以利用flag这个标志
也中断这个响应机制来完成
每个CPU拥有32个事件标志
命名是从IPC1到IPC31
前面的4个IPC0到3 可以让远程CPU产生中断的功能
那么CPU事件标志能被[听不清]置位和清零
也能被远程的CPU应答信号
清零
这个是IPC flag的结构图
从这个图中可以看到
CPU如果要完成信息到CPU2的传送的话
我们把IPC的set来置位
让IPC2通过响应
或者读取我的IPC state
或者事件[听不清]的信号
应答完之后 我通过在应答位的设置清零
来完成CPU1这边的clear的动作
那么我们来讲讲basic IPC 数据传输的方式
之所以是basic 因为它不需要任何软件驱动
它使用起来非常简单
非常高效
我们具体的操作原理是利用message
我们的[听不清]RAM
或者我们的共享RAM完成数据的传输
同时利用IPC的flag 标志寄存器和中断响应机制
来完成两个CPU之间的协同操作
比如 在这里的例子
CPU1想把数据传给CPU2的话
第一步 把我的数据写入到message RAM里面
或者我的global share的RAM
然后在IPC flag标志里面
同时我CPU2的 C1toC2的状态同时被置位
CPU2上的应用程序假如读取到这个信息
这个状态已经发生了改变
我的CPU1已经把数据放到了共享RAM或message RAM里面
那么CPU2只需要把这些数据读取出来
读取完之后 CPU2只需要在我的应答位上置位
告诉CPU1我完成了数据读取
这个过程非常简单 就完成了数据从CPU1传送到CPU2
因此不需要任何驱动程序的
那么针对IPC的数据传送
TI提供了几种方式
第一种是最基础的传送
它的好处是无需软件驱动 使用简单
只需要IPC的寄存器
第二种是IPC的 lite
它跟basic相比 也是利用了IPC的寄存器
它能允许IPC的中断
而且我能利用中断机制
及时传递数据
而且它利用了我们的command message这些寄存器来完成数据传送
那么最后我们提供了完整的IPC的库
它比IPC RAM更高级
能够传输更多数据
可以利用我们的RAM空间
可以传送更多数据
同时它能响应更多的IPC的中断
那么后面IPC[听不清]这种驱动过程
都是TI提供的
另外 在[听不清]里面
我们将提供新的传输方式
大家好 接下来我们进入第十一章 双核之间的通讯 IPC模块的学习 在这一章 我们先学习IPC的基本操作方式 然后我们学习如何利用IPC模块 完成两个CPU核之间的数据通讯 IPC模块的主要功能是完成CPU1和2两个CPU子系统之间的数据通讯 因此它只存在于C2000里面一些特殊的拥有双核的子系列上 比如F28M35 F28M36 以及F2837XD 那么IPC模块式内部的两个子CPU之间的通讯 因此它和我们传统学习到的SPI SCI通讯不同 它可以利用芯片内部的资源 来完成通讯 比如[听不清] 携带的RAM空间 来协助完成一些小的信号 小的数据的传送 比如IPC的flag和中断 能协助完成两个CPU核之间的 事件的通知通讯 还有[听不清] 还有信标的控制 能保证flash独立的控制 在同一个时刻 只允许一个flash拥有pump的控制权 而不受另一个flash CPU的打扰 那么我们首先将要介绍一下 全局共享RAM 顾名思义就是说 它的空间是可以被CPU1或者2拥有的 我们的F2837X拥有不超过16个全局RAM共享的块 分别从GS0到GS15 每个块的大小是4K的Word 在内存中 它的映射地址是从里面的C000开始 那么共享RAM在什么时刻 在某个时刻 只允许被一个CPU核拥有 具体是被CPU1拥有还是CPU2拥有 这是通过寄存器GSXMSEL来确定的 同理 我们在应用程序中可以通过更改 这个寄存器的内容可以完成RAM[听不清]层的变更 举例 比如CPU块拥有某个RAM权限后 那该CPU核拥有完全读写的权限 而CPU中的DMA总线 拥有读和写的权限 同时 另外一个CPU2核拥有只读的权限 反过来也是 假如CPU2核 拥有某个块的权限的时候 它就拥有了读写和执行的权限 而CPU1拥有只读权限 共享RAM在IPC中主要完成大的数据的传送 比如 完成从CPU1到2的数据传输的时候 我们在CPU1完全拥有的快中 将信息填入进去 然后通过CPU2来读取这个数据 完成数据中CPU1到2的传送 那么除了大数据的传送 我们还有一些特殊的小数据的传送 我们可以利用RAM空间 利用IPC的[听不清] 也就是[听不清]RAM 那么F2837X 我们用了两个单独的message RAM 大小分别是1K word 命名是C1toC2 C2toC1 顾名思义 C1toC2 是CPU1拥有读写权限 CPU2拥有只读权限 那么同理C2toC1 CPU2拥有读写权限 CPU1拥有只读的权限 这个message RAM和前面的共享RAM一个主要的区别是 这个方向是固定的 你不需要设置message RAM的方向 而且它是一直使能的 你不需要在应用程序更改配置这些 它使用起来更加方便和简单 我们现在讲一下IPC的命令寄存器 它的主要作用是提供一些比较简单和灵活的message 信息的传送 这些信息是一些非常小的数据 不像共享RAM需要传送很大的数据的 那么我们每个CPU核的话 拥有8个命令寄存器 分别是4个来传送 4个用来接收信息 每个寄存器的命名虽然叫[听不清]或者data 主要是为了支持这个协议 它都可以单独做任何的作用 比如我们的[听不清]address 可以用来传送数据 我的data 也可以用来传送地址 这个都是可以互相变换的 只是唯一不变的是 我的读写权限不变 比如CPU1的发送 有三个可读写的权限 和一个只读权限的寄存器 接受就是3个只读权限的寄存器 和一个可读写的寄存器 这个权限是不变的 那么我们TI提供的IPC lite 这个方式也是利用了我们的命令寄存器 来完成整个数据的传送 接下来我们看看IPC的事件标志和中断 如果CPU系统之家需要传送一些数据 比如[听不清] 这些事件的时候 我们完全可以利用flag这个标志 也中断这个响应机制来完成 每个CPU拥有32个事件标志 命名是从IPC1到IPC31 前面的4个IPC0到3 可以让远程CPU产生中断的功能 那么CPU事件标志能被[听不清]置位和清零 也能被远程的CPU应答信号 清零 这个是IPC flag的结构图 从这个图中可以看到 CPU如果要完成信息到CPU2的传送的话 我们把IPC的set来置位 让IPC2通过响应 或者读取我的IPC state 或者事件[听不清]的信号 应答完之后 我通过在应答位的设置清零 来完成CPU1这边的clear的动作 那么我们来讲讲basic IPC 数据传输的方式 之所以是basic 因为它不需要任何软件驱动 它使用起来非常简单 非常高效 我们具体的操作原理是利用message 我们的[听不清]RAM 或者我们的共享RAM完成数据的传输 同时利用IPC的flag 标志寄存器和中断响应机制 来完成两个CPU之间的协同操作 比如 在这里的例子 CPU1想把数据传给CPU2的话 第一步 把我的数据写入到message RAM里面 或者我的global share的RAM 然后在IPC flag标志里面 同时我CPU2的 C1toC2的状态同时被置位 CPU2上的应用程序假如读取到这个信息 这个状态已经发生了改变 我的CPU1已经把数据放到了共享RAM或message RAM里面 那么CPU2只需要把这些数据读取出来 读取完之后 CPU2只需要在我的应答位上置位 告诉CPU1我完成了数据读取 这个过程非常简单 就完成了数据从CPU1传送到CPU2 因此不需要任何驱动程序的 那么针对IPC的数据传送 TI提供了几种方式 第一种是最基础的传送 它的好处是无需软件驱动 使用简单 只需要IPC的寄存器 第二种是IPC的 lite 它跟basic相比 也是利用了IPC的寄存器 它能允许IPC的中断 而且我能利用中断机制 及时传递数据 而且它利用了我们的command message这些寄存器来完成数据传送 那么最后我们提供了完整的IPC的库 它比IPC RAM更高级 能够传输更多数据 可以利用我们的RAM空间 可以传送更多数据 同时它能响应更多的IPC的中断 那么后面IPC[听不清]这种驱动过程 都是TI提供的 另外 在[听不清]里面 我们将提供新的传输方式
大家好 接下来我们进入第十一章
双核之间的通讯 IPC模块的学习
在这一章 我们先学习IPC的基本操作方式
然后我们学习如何利用IPC模块 完成两个CPU核之间的数据通讯
IPC模块的主要功能是完成CPU1和2两个CPU子系统之间的数据通讯
因此它只存在于C2000里面一些特殊的拥有双核的子系列上
比如F28M35
F28M36 以及F2837XD
那么IPC模块式内部的两个子CPU之间的通讯
因此它和我们传统学习到的SPI SCI通讯不同
它可以利用芯片内部的资源 来完成通讯
比如[听不清]
携带的RAM空间 来协助完成一些小的信号
小的数据的传送
比如IPC的flag和中断 能协助完成两个CPU核之间的
事件的通知通讯
还有[听不清] 还有信标的控制
能保证flash独立的控制 在同一个时刻
只允许一个flash拥有pump的控制权
而不受另一个flash CPU的打扰
那么我们首先将要介绍一下
全局共享RAM 顾名思义就是说
它的空间是可以被CPU1或者2拥有的
我们的F2837X拥有不超过16个全局RAM共享的块
分别从GS0到GS15
每个块的大小是4K的Word
在内存中 它的映射地址是从里面的C000开始
那么共享RAM在什么时刻 在某个时刻
只允许被一个CPU核拥有
具体是被CPU1拥有还是CPU2拥有
这是通过寄存器GSXMSEL来确定的
同理 我们在应用程序中可以通过更改
这个寄存器的内容可以完成RAM[听不清]层的变更
举例 比如CPU块拥有某个RAM权限后
那该CPU核拥有完全读写的权限
而CPU中的DMA总线 拥有读和写的权限
同时 另外一个CPU2核拥有只读的权限
反过来也是 假如CPU2核
拥有某个块的权限的时候
它就拥有了读写和执行的权限
而CPU1拥有只读权限
共享RAM在IPC中主要完成大的数据的传送
比如 完成从CPU1到2的数据传输的时候
我们在CPU1完全拥有的快中
将信息填入进去 然后通过CPU2来读取这个数据
完成数据中CPU1到2的传送
那么除了大数据的传送
我们还有一些特殊的小数据的传送
我们可以利用RAM空间 利用IPC的[听不清]
也就是[听不清]RAM 那么F2837X
我们用了两个单独的message RAM
大小分别是1K word
命名是C1toC2 C2toC1
顾名思义 C1toC2
是CPU1拥有读写权限 CPU2拥有只读权限
那么同理C2toC1 CPU2拥有读写权限
CPU1拥有只读的权限
这个message RAM和前面的共享RAM一个主要的区别是
这个方向是固定的
你不需要设置message RAM的方向
而且它是一直使能的
你不需要在应用程序更改配置这些
它使用起来更加方便和简单
我们现在讲一下IPC的命令寄存器
它的主要作用是提供一些比较简单和灵活的message
信息的传送
这些信息是一些非常小的数据
不像共享RAM需要传送很大的数据的
那么我们每个CPU核的话
拥有8个命令寄存器
分别是4个来传送 4个用来接收信息
每个寄存器的命名虽然叫[听不清]或者data
主要是为了支持这个协议
它都可以单独做任何的作用
比如我们的[听不清]address
可以用来传送数据 我的data
也可以用来传送地址
这个都是可以互相变换的
只是唯一不变的是
我的读写权限不变
比如CPU1的发送 有三个可读写的权限
和一个只读权限的寄存器
接受就是3个只读权限的寄存器
和一个可读写的寄存器
这个权限是不变的
那么我们TI提供的IPC lite
这个方式也是利用了我们的命令寄存器
来完成整个数据的传送
接下来我们看看IPC的事件标志和中断
如果CPU系统之家需要传送一些数据 比如[听不清]
这些事件的时候
我们完全可以利用flag这个标志
也中断这个响应机制来完成
每个CPU拥有32个事件标志
命名是从IPC1到IPC31
前面的4个IPC0到3 可以让远程CPU产生中断的功能
那么CPU事件标志能被[听不清]置位和清零
也能被远程的CPU应答信号
清零
这个是IPC flag的结构图
从这个图中可以看到
CPU如果要完成信息到CPU2的传送的话
我们把IPC的set来置位
让IPC2通过响应
或者读取我的IPC state
或者事件[听不清]的信号
应答完之后 我通过在应答位的设置清零
来完成CPU1这边的clear的动作
那么我们来讲讲basic IPC 数据传输的方式
之所以是basic 因为它不需要任何软件驱动
它使用起来非常简单
非常高效
我们具体的操作原理是利用message
我们的[听不清]RAM
或者我们的共享RAM完成数据的传输
同时利用IPC的flag 标志寄存器和中断响应机制
来完成两个CPU之间的协同操作
比如 在这里的例子
CPU1想把数据传给CPU2的话
第一步 把我的数据写入到message RAM里面
或者我的global share的RAM
然后在IPC flag标志里面
同时我CPU2的 C1toC2的状态同时被置位
CPU2上的应用程序假如读取到这个信息
这个状态已经发生了改变
我的CPU1已经把数据放到了共享RAM或message RAM里面
那么CPU2只需要把这些数据读取出来
读取完之后 CPU2只需要在我的应答位上置位
告诉CPU1我完成了数据读取
这个过程非常简单 就完成了数据从CPU1传送到CPU2
因此不需要任何驱动程序的
那么针对IPC的数据传送
TI提供了几种方式
第一种是最基础的传送
它的好处是无需软件驱动 使用简单
只需要IPC的寄存器
第二种是IPC的 lite
它跟basic相比 也是利用了IPC的寄存器
它能允许IPC的中断
而且我能利用中断机制
及时传递数据
而且它利用了我们的command message这些寄存器来完成数据传送
那么最后我们提供了完整的IPC的库
它比IPC RAM更高级
能够传输更多数据
可以利用我们的RAM空间
可以传送更多数据
同时它能响应更多的IPC的中断
那么后面IPC[听不清]这种驱动过程
都是TI提供的
另外 在[听不清]里面
我们将提供新的传输方式
视频报错
手机看
扫码用手机观看
收藏本课程
视频简介
C2837x入门指南(十九)—双内核之间的通信
所属课程:C2837x入门指南
发布时间:2016.07.12
视频集数:28
本节视频时长:00:10:29
C2837x概述;芯片架构; 开发环境;外设寄存器操作;复位和中断;系统初始化;模拟子系统 ADC DAC CMP SDFM;控制类外设PWM CAP QEP。
//=$v1;?>
//=$v['id']?>//=$v['down_category']?>//=$v['link']?>//=$v['is_dl']?>//=$v['link']?>//=$v['name']?>//=$v['name']?>
//=$v['id']?>//=$v['down_category']?>//=$v['path']?>//=$v['is_dl']?>//=$v['path']?>//=$v['name']?>//=$v['name']?>
////=count($lesson['bbsinfo'])?>
//=$elink?>//=$elink?>//=$tags[0]?>//=$tags[0]?>//=$elink?>//= $elink?>//=$tags[1]?>//=$tags[1]?>
//=$lesson['bbs'];?>
//=count($lesson['bbsinfo'])?>