TMS320C6474学习总结(十)----IPC中断

IPC中断

1. 简介

      核内通信是多核设备的CPU之间信息交换的方式。在大多数应用程序中,工作以并行或顺序的方式在内核之间进行划分,需要一个核心将控制信息或数据缓冲消息传递给另一个核心。交换数据缓冲的机制一般包括一个核写数据到一个核特定的内存区域(通过CPU、回写缓存或直接内存访问(DMA)、共享内存等外部双倍数据速率(DDR)或在一个芯片上的静态随机存取存储器(SRAM)地区),并通知的其他核该数据是可用的。在C6474的片上,可以利用IPC来实现核间的通信。

2. IPC模块结构

      IPC是一个全局模块,意味着三个核都可以访问和设置该模块,IPC处于CPU之外的外围设备,通过CFG总线与CPU互联。

       IPC模块主要有两个寄存器需要设置:IPCGRn / IPCARn,n=0,1,2。

       IPC产生寄存器(IPCGR)由本地核进行写操作来产生目的核的中断,IPCGR有三个寄存器分别对应IPCGR0/IPCGR1/IPCGR2分别对应核0/1/2。

       对IPCGRn的LSB进行写操作会生成一个中断到核n,注意,所有核都产生相同的中断,需要一些SRCS标志可以用来确定哪个核心发送了中断。换句话说,每个核上的每个任务都有与之相关的标志,这样在收到中断时才知道是哪个核发生了中断。

       IPC告知寄存器(IPCAR)是目的核来清除SRCS位的寄存器,也有三个寄存器IPCAR0/IPCAR1/IPCAR2来分别表示三个核0/1/2

3. 工作原理

       相同的应用程序在所有三个内核上运行。每个核心通过IPC寄存器向其他两个核心发送消息。根据片上计时器事件定期发送消息。当生成消息的核心(源核心)写入对应于接收核心(目标核心)的IPCGR寄存器时,目标核心接收一个中断。这个相应的中断服务例程(ISR)运行在目标核上,确定哪个核是消息的源,并发送相应的软件信号量; 这里有三个任务,每个任务处理来自特定核心的消息。注意,在任何给定的核心上,只有两个任务是活动的,因为在本例中,核心不会向自身发送消息。

扫描二维码关注公众号,回复: 5345523 查看本文章

       IPCGR寄存器的SRCS位的用法如下:

• SRCS0-7 and SRCS24 are used by core 0
• SRCS8-15 and SRC25 are used by core 1
• SRCS16-23 and SRC26 are used by core2

       SRC24-26高位被目的核来识别是哪个核产生的中断源,SRC0-23被用来作为标志位, 共8位被一起用作一个8位计数器,以便于验证接收核是否接收了所有中断。

4. 如何建立一个IPC中断

      首先IPC中断是在两个核内工作的,也就是一个核对IPCGR寄存器进行写操作,中断产生在另一个核上,因此需要建立两个核的工程。

       ①在核0、核1上分别将IPC中断号和中断服务函数名配置在.tcf文件中(IPC中断号为76)

       ②启动全局中断(关使能、清标志位、使能)

       ③清除IPC中断的标志位(利用IPCAR寄存器)

       ④对核0的IPCGR进行写操作,核1 就可以产生IPC中断

注意:核0/1都需要配置① ② ③三步。

猜你喜欢

转载自blog.csdn.net/m0_37765662/article/details/82909900