最近在学DSP28377D的CLA模块,想利用CLA来进行一些简单的滤波和锁相计算。通过学习CLA相应的例程,发现也只能学习到表面,顶多就是CLA常用的相关寄存器的配置,但还有一些隐蔽的坑,是新手想破脑袋都想不出来的。接下来,我将会结合CLA相关例程里的配置,以及我在调试实验时踩过的坑来给大家分享CLA模块的应用。 在CPU1中使用CLA时,需进行如下寄存器配置:
EALLOW;
DevCfgRegs.DC1.bit.CPU1_CLA1 = 1; //CPU1上存在CLA功能
//DevCfgRegs.DC1.bit.CPU2_CLA1 = 1;
EDIS;
对于DSP28377D的CPU1中CLA的配置主要用到两个函数:
如下图所示,对于CLA与CPU共享存储器的配置如下。其中 MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1,表示将ROM_LS4作为CLA的程序存储器;MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 1,表示将ROM_LS0作为CLA的数据存储器,这里用户可以根据自己的实际需要配置相应的程序存储区和数据存储区。提示:即使用户在cmd文件里修改合并了ROM_LSx,但在此处仍需要按LS0~LS5进行配置C LA程序、数据存储区。
为CLA分配完程序、数据存储空间后,接下来就该配置CLA相应的任务中断了;CLA共有8个中断任务函数,优先级从1-8依次递减;CLA在处理完所有的中断任务后,自动触发CPU中断,在DSP例程中配置了通知相关CPU的中断,当然,如果用户也可以不用配置CLA的CPU中断,这样CLA在完成自己的中断任务后,即使触发CPU中断,CPU也不会有所动作。
到此为止,对于CLA的主要配置基本已经结束,是不是感觉So easy!没错,就是这么easy。但我接下来提到的内容,请各位新手(大侠就绕路而行吧)一定引起重视!!!!
在我们应用CLA时,除了要给cmd文件分配定义CLA的相关区域外,更要给工程文件里配置相应的“CLA_C”定义(笔者也不知道这里具体叫什么哈,暂且这么意会了)。只有这样,在我们编译时才不会提示cmd相应的CLA存储区有警告,而且也不会出现:编译没有任何问题,但程序在运行时CLA中的变量无法正确赋值的情况。
1.CLA模块不支持中断嵌套,所以尽量用CLA本身自带的8个任务中断;
2.CLA不支持函数指针的调用,尽量避免在CLA中调用函数指针;
3.CLA中用到sin、cos等三角函数运算时,尽量用其CLA自带的数学库,普通的数学库好像无法调用sin、cos计算(笔者亲身体验),CLA本身自带的“CLAmath.h”头文件中,有相应的三角函数计算,但需要CLAsin(xxx),CLAcos(xxx),如下图所示。
4.CLA中是可以进行函数的二次嵌套调用的。
以上便是小生近期对CLA学习的总结,有不妥之处请大家纠正指出。
最近更贴有点慢,还望大家见谅!以后我会努力鞭挞自己的!