与之前架构相比,C66x新增的就是XMC。
多核开发的基础是,DSP每个核心都可以独立的访问SOC资源, 在CPU内部使用的是32位的逻辑地址,出了CPU用的就是36位的物理地址。
多核共享的通知机制:
多个核心在协作时不能只有数据,需要通过某种机制,通知其他核心数据已经准备就绪,可以开始操作,因为在实际应用中并不是所有处理都是并行的,有的处理是需要串行的,IPC中断就是一种通知机制。主要通过几个寄存器来实现,在CPU SOC内部主要用到IPCGRx和IPCARx这两个寄存器,x代表核心数目,对寄存器相应的位置位就可以触发相应核心的IPC中断,IPC中断对于每个核心来说都有唯一一个事件,将这个事件映射到CPU中断就可以相应这个中断了,每个核心都要配置。
IPCGRx是IPC中断触发寄存器,用于触发对应核心中断,同时还支持传递28种(位)ID不一定用,内存地址为0x0262020240+x*4
第0位用于触发相应核心的IPC中断,想要触发第几个核心的中断就在哪个核心的IPCGRx的IPCG域写1。高4~31位,写1会将置位SRCSx及相应的SRCCx都置为1。
IPCARx是IPC中断应答寄存器,用于应答核心中断,内存地址为0x02620280+x*4
IPCGRH IPC主机中断触发寄存器产生一个主机中断,通过DSP的HOUT引脚输出中断脉冲,宽度是8个CPU/6时钟周期(4高/4低)可以用于多片的DSP通信使用,地址为0x0262027C
IPCARH IPC主机中断应答寄存器用于应答主机中断,地址为0x026202BC
硬件信号量——保证互斥访问
Semaphore2模块
提供对共享资源的互斥访问
最大64个独立信号量
Semaphore有3种请求方式
1、直接请求:请求到了就得到,没有请求到就结束
2、间接请求:申请放到队列里,若成功则产生中断然后处理中断响应请求。
3、混合请求:若申请成功则直接相应,若失败则放入队列等待释放信号量再产生中断。
单镜像/多镜像
单镜像:每个CPU核心运行同样的程序,按单核程序方式启动。
多镜像:每个CPU核心运行不同的程序,将多个应用程序合成一个单镜像烧写或使用二级引导程序为每个核心逐个加载应用程序。