主题中讨论的其他器件:C2000WARE
使用 C2000Piccolo
F28004x 系列 LaunchPad
开发套件与 CCSv9.1的客户。
他们已开始使用 CCSv9.1中的 CLA 示例项目、该项目的结构类似于 他们在应用程序中要执行的操作。 (C:\ti\c2000\C2000Ware_2_00_00_02\device_support\f28004x\examples\cla)。 项目名称:cla_ex1_background_task。
它有3个任务、任务1对由 ePWM 脉冲触发的内部 ADC 进行采样并执行 FIR 低通滤波器。 此时会设置一个标志、以通知后台任务样本已准备就绪。 任务7是由软件触发运行的初始化任务、后台任务则持续运行、从任务1收集样本并将其保留在循环缓冲区中。 循环缓冲区“buffer”在 CPU 主函数中声明,并使用该 pragma 将其放置在 CLADataRAM 中
#pragma DATA_SECTION (buffer、"Cla1DataRam");
volatile float buffer[buffer_size];
CPU 和 CLA 均可访问该缓冲器。 该示例使用 CCS 绘制缓冲区图。 他们尝试了一个小示例、方法是在任务1中放置一个32位计数器、在任务1中递增计数器、并在任务结束中断服务例程 cla1Isr1()中查看计数器。 他们在 cla_ex1_background_task.c 中添加了以下代码
#pragma DATA_SECTION (Task1_Count、"Cla1DataRam");
volatile unsigned long Task1_Count;
并添加到 cla_ex1_background_task_shared.h
extern volatile unsigned long Task1_Count;
任务1代码现在在 ReadFlag 之后插入了一条语句“Task1_counter++”
f_filteredValueReady = true;
Task1_Count++;
他们 在任务1中将 Task1_Counter 初始化为0。
当 它们在任务1结束中断服务例程中放置一个断点时、 它们期望在每次迭代中看到变量 Task1_Counter 递增1。 但是、在 CCS 中为 Task1_Counter 显示的值未定义(如随机)、因此存在偏差或某种情况。 缺少 CLA 的一些信息。
无符号长整型 CLA_Counter = 0;//全局
#pragma CODE_SECTION (cla1Isr1、".TI.ramfunc")
#endif
__attribute__((中断) void cla1Isr1 ()
{
CLA_Counter =任务1_Count;
EALLOW;
//
//清除 ADC 中断标志,以便下一个 SOC 可以
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1U;
//确认任务1的任务结束中断
//
PieCtrlRegs.PIEACK.bit.ACK11 = 1U;
EDIS;
}