(一)CLA综述:
F2837X存在两个CLA,CPU1.CLA1
CPU2.CLA1
CLA是32位浮点运算器(浮点内核),主要作用为控制PWM,CAP,读取控制结果,
以及控制一些重要外设(CMPSS、DAC、SDFM、SPI、McBSP(多通道缓冲串行口)、GPIO、uPP(多通道高速并行接口)),从而分担CPU通信负载(通用外设:SPI),内核运算负载,非配中断,优先级较高(CLA不支持中断嵌套,必须执行完现有的中断任务才能进行下一个)。
(二)结构特性:
有独立地址总线(独立于CPU总线之外,用于独立寻址目标操作寄存器),数据总线(用于独立接收,发送控制量以及运算结果);
独立与CPU交互的RAM(任务完成时触发对应CPU中断);
独立状态机,用于判断CLA的工作状态,并置位中断FLAG,使能不同的任务;
有八个任务结构,优先级依次提高,可以理解为中断,但不支持中断嵌套;
可分配的LS0——LS5 RAM控制区域,LS0——LS5由CPU初始化并且交由CLA控制,初始化应分为两个部分:1、Data
Memory(用于存放CLA程序需要的的数据以及采集得到的处理数据),2、Program Memory(用于读取Data中的数据并且执行算法响应)每个至少2K,初始化说明见下文;
两个CPU与CLA的128word的MSG RAM(不用在乎MSG RAM的大小,只是用来与CPU做中断交互以及结果的传送)
总之,CLA差不多相当于CPU这个老板的助理,能力不是太强,也就打打杂啥的,力挺大(毕竟跟着老板混),可以跟外设要数据,控制PWM输出和捕获,也可以帮着CPU算个sin,读个AD,做个采样,做完以后告诉老大一声,他就可以歇着了。不过他当然不只是简单地算个sin,一般是采集ADC的数据,预处理PWM波(提高PWM的精确度,如果不是要求精确的电机控制的话,也没必要)
另外关于CLA数据和控制总线可以达到的区域,查看datasheet Memory部分的内存地址表;关于任务触发源的部分,参看2837x的CLA部分CLA Task and Interrupt表格,主要就是CLA的bus可以达到的地方。
如果想把CLA的功能发挥到极致,最好使用汇编语言,对于实时性控制性较高,CCS支持C+汇编混合编程,比如说asm(“IACK
#0x0008”)就是置位MIFRC的bit3,开始任务4的中断。
Attention:CLA不支持任何64位的数据定义以及计算,long long 或long double型,在CLA里面都会被定义成32bit。