目录
1.1介绍
翻译的F28377D数据手册。IPC功能包括:
• 信息交互RAM
• IPC标志和中断
• IPC命令寄存器
• 自由运行计数器
• IPC通信协议
所有的IPC功能都是相互独立的,并且大多数都不需要任何特定的数据格式。还有两个寄存器用于引导模式和状态交互(IPCBOOTMODE和IPCBOOTSTS)。

1.2 信息交互RAM
有两个专用的2KB信息交互RAM块,用于两个CPU之间的信息传递。每个CPU和其DMA对其中一个RAM块有读写访问权限,对另一个RAM块有只读访问权限,如表1所示。读取或写入信息到RAM不会触发另一个CPU上的任何事件。

1.3 IPC标志和中断
在两个CPU之间的每个方向上(CPU1 to CPU2,CPU2 to CPU1)都有32个IPC事件信号。这些信号可以用于基于标志的事件轮询。对于C28X核心,其中的四个(IPC0~IPC3)可以配置为在另一个CPU上产生中断,如图2和图3所示。


1.4 IPC命令寄存器
IPC命令寄存器为CPU之间交换复杂的信息提供了一种简单而灵活的方式。每个CPU有8个专用寄存器;4个用于发送信息,4个用于接收信息。这8个寄存器的名字命名仅仅是为了实现一个简单的命令/响应协议。8个寄存器的读写权限由硬件决定,数据格式完全由软件定义。结构如图4和图5所示。


对于发送信息的CPU来说,有三个可写寄存器和一个只读寄存器;对于另一个接收信息的CPU来说这些相同的寄存器为三个只读寄存器和一个可写寄存器,如表2所示。

1.5 自由运行计数器
在IPC中有一个64位自由运行的计数器,可以用于对CPU之间的IPC事件进行时间戳计时。这个计数器的时钟来自PLLSYSCLK并且被SYSRSn复位。计数器由两个32位寄存器组成,分别为IPCCOUNTERH和IPCCOUNTERL。当IPCCOUNTERL被读取时,IPCCOUNTERH的值被保存。随后对IPCCOUNTERH的读取操作返回这个被保存的值。因此必须先读IPCCOUNTERL然后再读IPCCOUNTERH。结构如图6所示。
只有在所有CPU上的模拟挂起时(当调试器遇到断点时),自由运行的计数器才会停止。如果任何核心正在执行,计数器将运行。
1.6 IPC通信协议
本节介绍两个CPU之间的IPC通信协议的硬件支持选项,这些选项可以独立使用,也可以组合使用。所有的标志意义和数据格式都是完全由用户定义的。
1.6.1 标志系统通过中断和寄存器轮询来实现基于事件的通信
- CPUx可以通过写入IPCSET寄存器的32位中的任何一个来触发IPC事件。这将设置CPUx的 IPCFLG寄存器和CPUy的IPCSTS寄存器中相应的位。
- CPUy可以通过在IPCACK寄存器中设置适当的位来表示对事件的响应。这将清除CPUx的 IPCFLG寄存器中的相应位和CPUy的IPCSTS寄存器中的相应位。
- 如果CPUx需要取消一个事件,CPUx可以在IPCCLR寄存器中设置适当的位。这与CPUy写入IPCACK有相同的效果。
- IPC1~IPC3(使用IPCSET[3:0]设置)可以触发另一个CPU的中断,另一个CPU必须正确配置ePIE模块以接收IPC中断。IPC4~IPC31(使用IPCSET[31:4]设置)不会产生中断。可以同时设置、确认和清除多个标志。
1.6.2 IPC命令寄存器支持发送多个不同的信息片段,并且只被命名为COM、ADDR、DATA和REPLY,并且可以保存应用程序需要的任何数据。
- CPUx可以将数据写入IPCSENDCOM,、IPCSENDADDR和IPCSENDDATA寄存器。CPUy在IPCRECVCOM,、IPCRECVADDR和IPCRECVDATA寄存器中接收这些信息。
- CPUy可以通过写入其IPCLOCALREPLY寄存器进行响应。CPUx在它自己的IPCREMOTEREPLY寄存器中接收这些数据。
1.6.3 为启动IPC或任何其他方便的使用提供了一对类似命令寄存器的寄存器——IPCBOOTMODE和IPCBOOTSTS。两个cpu都可以读取这些寄存器。CPUx只能写入IPCBOOTMODE寄存器,而CPUy只能写入IPCBOOTSTS寄存器。
1.6.4 有两个共享的内存,用于在CPU之间传递大量的数据。每个CPU都有一个用于发送数据的可写内存和一个用于接收数据的只读内存。
1.6.5 下面是如何一起使用这些硬件特性的示例。CPUx需要从CPUy的LS内存中获得一些数据。数据位于CPUy地址0x9400,长度为0x80 16位字。该协议可以通过下面的方式来实现:
- CPUx将0x1写入IPCSENDCOM,在软件中定义为“从地址复制数据”。CPUx将地址(0x9400)写入IPCSENDADDR,并将数据长度(0x80)写入IPCSENDDATA。
- CPUx写入到IPCSET[3]和IPCSET[16]。在这里,IPC标志3被配置为发送一个中断,而IPCSET[16]在软件中被定义为一个传入的命令。CPUx开始轮询,直到IPCFLG[3]处于低位。
- CPUy接收中断。在中断处理程序中,CPUy检查IPCSTS,发现标志IPC16已置位,并运行命令处理器。
- CPUy从IPCRECVCOM中读取命令(0x1),从IPCRECVADDR中读取地址(0x9400),从IPCSENDDATA中读取数据长度(0x80)。然后,CPUy将LS RAM数据复制到可写共享内存中起始偏移地址为0X210的空空间。
- CPUy将共享内存地址(0x210)写入IPCLOCALREPLY寄存器。然后CPUy写入IPCACK[16]和IPCACK[3]以清除标志并指示命令的完成。CPUy的工作结束。
- CPUx发现IPCFLG[3]复位。CPUx读取IPCREMOTEREPLY 寄存器以获得存放复制数据的共享内存偏移量(0x210)。