概述
Matlab生成dsp程序——官方例程学习(3)
- 一、主要功能
- 二、CLA介绍
- 三、Simulink分析
- 四、程序分析
- 五、总结
官方例程链接: 添加链接描述
模型与程序链接: 模型与程序链接
一、主要功能
使用CLA与CPU进行交互,cla读取数据控制LED灯闪烁。
二、CLA介绍
CLA是允许并行处理的协处理器。将CLA用于时间紧迫的任务可以释放主CPU的空间,以同时执行其他系统和通信功能。(主要用于CPU在中断时,来不及处理的任务,分担CPU负重)
CLA有八个任务(Task1[优先级最高]-Tack8),存在与CPU交互的RAM空间。在2837x中,可以控制多种外设:ePWM,eCAP,HRPWM,eQEP,等。其程序与数据存放在LS0-LS5 RAM中,并且有两个128字节的==CPU to CLA(CLA to CPU)==的消息寄存器。
CLA触发:(其八个任务触发都能选择触发源)
- 1)通过软件强制触发(给MIFRC寄存器写入相应的标志)
- eg:Cla1Regs.MIFRC.bit.INT5 = 1;
-
- 写IACK指令。 asm(“ IACK #0x0008”);
- 3)在寄存器中选择触发源。
CLA使用步骤:
1.从Flash中拷贝CLA的程序到RAM中执行。
2.初始化CLA数据寄存器。
3.设置CLA寄存器:1)使能时钟(PCLKCR3)2)写入函数地址(MVECT1-8) 3)设置中断源(CLA1TASKSRCSELx)
4.设置任务中断(使能任务的MIER寄存器)
5.初始化触发任务的外设。
使用CLA的时候,一定要查看编译器是否使能了CLA:
CLA不支持64位数据运行(long long 等定义只会使用32位)
CLA中变量需要在.C文件进行初始化。
//.c文件
int16_t x=5;
//.cla文件
extern int16_t x;
CLA不支持除法,相应的运算方式需要在CLA math文件中寻找。
//cmd文件中定义,cla运算堆栈
.scratchpad :> RAMLS0, PAGE=1
三、Simulink分析
1)CLA 任务模块(需要注意不同型号硬件触发源选择不同)
这里的软件触发,指的是以Sample time进行触发。
需要设置将模块为inline:
2)注意可能需要修改修改cmd文件的内存分配
3)每次CLA的Taskx执行完毕之后会产生中断(PIE11.x[1-8])。
4)CLA运算数据需要放在特定的ram才能与CPU进行交互。
5)因为CLA无法访问全局变量,所以将设置改为inline。
6)调试时,需要使用**__mdebugstop()**指令进行设置断点。
7)可以使用双缓冲的模型,匹配cla与cpu的处理速率。
四、程序分析
主函数的框架和其他的函数还是一模一样,这里就不单独贴出来了。
**c28377Sblink_cla_initialize()**函数中完成了GPIO的初始化。CLA时钟、CLA1TOCPURAM与CPUTOCLA1RAM、MSEL_LS0-5(属于CPU与CLA控制)、配置程序RAM与数据RAM、使能软件触发、指定Task1的函数、开启中断。
程序思路大致是在Timer0中断函数中,手动触发CLA(利用汇编语句)。在CLA_Task1中会执行相应的模型算法,指向完毕之后。后进入CLA中断函数,在CLA中断函数中根据CLA运算结果,控制GPIO的翻转。
//1.触发开始Task1
#define Cla1ForceTask1() asm(" IACK #0x0001")
五、总结
Matlab生成的程序,格式比较固定,多看几个就能大致明白结构。以后可能就是更多的是关于Simulink中模块的学习了!
最后
以上就是懦弱指甲油为你收集整理的Matlab生成dsp程序——官方例程学习(3)的全部内容,希望文章能够帮你解决Matlab生成dsp程序——官方例程学习(3)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复