日期:20200229
1、 CLA简介
控制率加速器(CLA)是一个独立、完全可编程的32位浮点数学处理器,其低中断延迟可以即时读取ADC采样,降低了ADC采样输出延时,且不占用主CPU的处理时间,有利于提高系统响应和控制频率。
CLA程序代码可包含多大8个任务或中断服务程序,每个任务有两种触发机制:主CPU触发和外设中断信号触发:
-
主CPU触发:
C28x CPU通过IACK指令来触发任务执行,可以通过主CPU软件控制。 -
外设中断触发:
Task1-7可以通过ADC或者ePWM来触发,如:
Task1:ADCINT1或EPWM1_INT;
Task2:ADCINT2或EPWM2_INT;
Task3:ADCINT3或EPWM3_INT;
Task4:ADCINT4或EPWM4_INT;
Task5:ADCINT5或EPWM5_INT;
Task6:ADCINT6或EPWM6_INT;
Task7:ADCINT7或EPWM7_INT;
Task8:ADCINT8或CPU Timer0;
为了使用CLA,需要配置两块RAM区域,用于CLA与主CPU通讯使用,分别为CPUtoCLARAM以及CLAtoCPURAM,其中CPUtoCLARAM区域数据CPU可读可写,CLA只能读不能写,CLAtoCPURAM区域数据CLA可读可写,CPU只能读不能写。
CLA可以直接访问ePWM、HRPWM、比较器和ADC结果寄存器。
2、 CLA配置过程
配置方式对应开发环境为CCS8。
2.1、cmd的配置
与没有CLA的工程相比,带有CLA的工程需要为CLA配置一个RAM区域存放代码和数据。
图2-1 带有CLA的CMD文件配置-1
图2-1中,PAGE1将RAML1与RAML2区域命名为CLARAM0和CLARAM1,作为CLA的代码存储空间和数据存放空间,CLA_CPU_MSGRAM和CPU_CLA_MSGRAM作为CLA与主CPU进行数据通讯的RAM空间,用于存放交互数据。
图2-2 带有CLA的CMD文件配置-2
图2-2中,SECTION块为CLA部分相关的块分配地址,对应空间为PAGE中分配的CLA空间。
2.2、主程序的配置
在主程序中,需要对CLA进行初始化工作。
首先设备初始化函数DeviceInit()中使能CLA的时钟:
接着对CLA进行初始化:
配置CLA每个任务的向量地址,将程序代码搬移到CLA的RAM中运行。
此处设置CLA的RAM区域。
有些CLA的函数需要在程序启动后主动运行一次,比如数据的初始化工作,因此在配置CLA时,使能CLA应答IACK,并且强行执行一次CLA任务。这里将Task8指定响应M_INT8中断,并使用CLA1ForceTask8()函数执行一次Task8任务,完成CLA数据的初始化。
在这个例程中,需要运行的任务Task1由ADC1的中断触发,当ADC1完成采样后,执行Task1程序进行数据处理,所以设置Task1的中断源为ADCINT1,并使能中断响应。
2.3、CLA程序的编写
CLA中进行操作的数据在声明时,需要注明这部分数据存放在CLA映射的RAM区域中。
图2-3 CLA运行的变量和结构体声明
图2-3中,在声明变量和结构体的时候,需要将这些结构体和变量映射到CLA对应的RAM区域中。
图2-4 CLA与CPU通讯的变量声明
图2-4中,对于需要与CPU进行通讯的变量,指定存储在CPUtoCLA的RAM区域,这部分区域的数据,CPU可读可写,CLA只能读不能写。
图2-5 CLA Task1程序
完成变量声明后,可以编写Task的中断服务程序,例程中CLA程序直接操控了PWM输出,还可直接读取ADC采样结果寄存器AdcResult.ADCRESULT0-7.
图2-6 CLA Task1程序操控PWM寄存器
3、 CLA程序调试
CLA的程序不能通过仿真器打断点的形式进行调试,必须通过在程序中插入debug语句才能调试。如图2-5所示,在第115行,插入了__mdebugstop(),则程序会停在此处。CLA可支持单步运行。
添加完debug后,在开发环境中进行设置。右键点击工程选择Properties->Built->C2000 Compiler->Processor Options,Specify CLA support必须设置为cla0,如图3-1。
图3-1 开发环境CLA设置
编译整个程序,生成out文件,连接板子。
首先右键C28xx建立连接,Run->load->load Program,下载.out文件。
接着右键CLA_0建立连接,Run->load->load Symbols,下载.out文件。
点击C28XX,点三角运行程序,则程序自动停在__mdebugstop()处。
图3-2 选择C28xx运行
图3-3 程序停止在__mdebugstop()并单步运行