DSP简单多核开发2

在多核程序中外设是共享的,一般来说只有核0做初始化就够了。

DNUM是核心寄存器,它用来表示当前的程序跑在哪个核心。需要引用

#include <c6x.h>头文件

中断在每个核心都是独立的因此每个核心都要初始化一遍。每个核心的IPC事件中断号都是独立的,直接映射到CoreOPac不需要CIC。接下来判断程序运行在哪个核心去运行不同的任务,若是核心0,需要执行一个多核启动的操作,由于核心0是主核,是最先被引导的,引导其他核心需要两个步骤:

1、将其他核心的入口地址正确配置,使用MultiCoreBoot函数,参数1是启动哪个核心,参数2是启动地址。

2、写好这个地址后会向这个核发送一个IPC中断,第一次收到这个中断会查找这个入口地址,若这个地址有效则从这个地址开始运行。然后给启动标志位置位表示已经成功启动。(不太确定)

在接下来的通信中,若核心1启动完成,将一个标志位置位,向核心1发送一个中断,同时携带一个ID用来表示核心0到核心1的中断。

若核心0核心1正常初始化了以后核心1就会进到中断服务函数中,然后根据核心ID判断,若是1首先响应中断,首先清一下源ID,将flag修改,同时向核心0发送IPC中断,同样进入IPC中断服务函数,看到了修改后的flag值,实现了通讯。

对于c6678,使用了sys/bios,需要将对应地址的缓存关闭,因为涉及的通信数据是自己CPU以外的其他核心访问,打开缓存会使拿到的数据是旧的,因此需要关闭。从内存重新读数据,然后核心0将flag标志修改,由于核心0使能了缓存所以需要将缓存里面的值回写到内存中,然后向核心1发送ipc中断。核心1进入中断服务函数相应中断,然后将标志位flag改写再从缓存写回内存上,然后再触发一个IPC的中断通知核心0。在核心0中响应中断后,关闭缓存就跳过缓存从内存读数据并输出。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值