This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28377D:CLA 教程问题(Lab9) C2000微控制器技术讲座,修订版6.1,2015年5月

Guru**** 2537600 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/613178/tms320f28377d-cla-tutorial-question-lab9-c2000-microcontroller-workshop-revision-6-1-may-2015

器件型号:TMS320F28377D
主题中讨论的其他器件:C2000WARE

你(们)好。

我正在尝试熟悉用于28733D 的 CLA、并在文档"C2000微控制器研讨会、版本6.1、2015年5月"中建议我尝试使用 Lab9。

我尝试完成了此练习、我想检查我所做的是不是正确的、因为此练习需要用户决定一些输入。

该教程显示(第页的 9-19、第6点):

按照本实验练习的目标中所述、编辑 cla_9.c 来执行 CLA 操作。 将 RAMLS0、RAMLS1、RAMLS2和 RAMLS4存储块设置为 CPU 和 CLA 之间共享的存储器块。 这就是我所做的(在 CLA_9.c 上):

//--内存配置--主 CPU 和 CLA 选择
MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1; // 0=CPU 1=CPU 和 CLA //设置 RAMLS0、RAMLS1、RAMLS2和 RAMLS4
MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1; // 0=CPU 1=CPU 1=CPU 和 CLA //内存块作为 CPU 和 CLA
MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 1; // 0=CPU 1=CPU 和 CLA
MemCfgRegs.LSxMSEL.bit.MSEL_LS3 = 0; // 0=CPU 1=CPU 和 CLA
MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 1; // 0=CPU 1=CPU 和 CLA
MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 0; // 0=CPU 1=CPU 1=CPU 和 CLA 

将 RAMLS4存储器块配置为映射到 CLA 程序存储器空间。 将 RAMLS0、RAMLS1和 RAMLS2存储块配置为映射到 CLA 数据存储器空间。 请注意、RAMLS0内存块将用于 CLA C 编译器暂存区。  

//--内存配置-- CLA 数据内存和 CLA 程序内存选择
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0;// 0 = CLA 数据存储器1=CLA 程序存储器
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0;// 0 = CLA 数据存储器1 = CLA 程序存储器
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 0;// 0 = CLA 数据存储器1 = CLA 程序存储器
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS3 = 0;// 0 = CLA 数据存储器1 = CLA 程序存储器
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 1;// 0 = CLA 数据存储器1 = CLA 程序存储器配置要映射到 CLA 程序存储器空间的 RAMLS4存储器块
MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 0;// 0 = CLA 数据存储器1 = CLA 程序存储器 

将任务1外设中断源设定为 ADCAINT1并将其它任务外设中断源输入设定为"软件"(即无)。

//--选择任务中断源 /***** 每个任务的触发源(保留未列出的数字)**** /
DmaClaSrcSelRegs.CLA1TASSKSRCSEL1.bit.task1 = 1;// 0 =无 8=ADCBINT3 16=ADCDINT1 32=XINT4 42=EPWM7INT 70=TINT2 78=ECAP4INT 95=SD1INT
// 114=SPIRXINTC
DmaClaSrcSelRegs.CLA1TASKSRCSEL1.bit.task2 = 0;// 1=ADCAINT1 9=ADCBINT4 17=ADCDINT2 33=XINT5 43=EPWM8INT 71=MXEVTA 79=ECAP5INT 96=SD2INT
DmaClaSrcSelRegs.CLA1TASKSRCSEL1.bit.TASK3 = 0;// 2=ADCAINT2 10=ADCBEVT 18=ADCDINT3 36=EPWM1INT 44=EPWM9INT 72=MREVTA 80=ECAP6INT 107=UPP1INT
DmaClaSrcSelRegs.CLA1TASKSRCSEL1.bit.TASK4 = 0;// 3=ADCAINT3 11=ADCCINT1 19=ADCDINT4 37=EPWM2INT 45=EPWM10INT 73=MXEVTB 83=EQEP1INT 109=SPITXINTA
DmaClaSrcSelRegs.CLA1TASSKSRCSEL2.bit.TASK5 = 0;// 4=ADCAINT4 12=ADCCINT2 20=ADCDEVT 38=EPWM3INT 46=EPWM11INT 74=MREVTB 84=EQEP2INT 110=SPIRXINTA
DmaClaSrcSelRegs.CLA1TASKSRCSEL2.bit.TASK6 = 0;// 5=ADCAEVT 13=ADCCINT3 29=XINT1 39=EPWM4INT 47=EPWM12INT 75=ECAP1INT 85=EQEP3INT 111=SPITXINTB
DmaClaSrcSelRegs.CLA1TASKSRCSEL2.bit.TASK7 = 0;// 6=ADCBINT1 14=ADCCINT4 30=XINT2 40=EPWM5INT 48=TINT0 76=ECAP2INT 87=HRCAP1INT 112=SPIRXINTB
DmaClaSrcSelRegs.CLA1TASKSRCSEL2.bit.TASK8 = 0;// 7=ADCBINT2 15=ADCCEVT 31=XINT3 41= 

启用 CLA 任务1中断。  启用 IACK 指令来触发任务、

//--启用使用软件启动任务(IACK)
Cla1Regs.MCTL.bit.IACKE = 1; //启用 IACKE 使用软件启动任务 

//--启用 CLA 任务中断

Cla1Regs.MIER 位。INT1=1; //启用 CLA 中断1 (并禁用中断8)
asm (" EDIS"); //禁用 EALLOW 受保护寄存器访问

然后启用任务8中断。

//--强制一次性初始化任务8 --零延迟缓冲器
Cla1Regs.MIER 位.INT8 = 1; //启用 CLA 中断8
asm (" IACK #0x0080"); // IACK - CLA 任务组指令
asm (" RPT #3 || NOP"); //等待至少4个周期
while (Cla1Regs.MIRUN.bit.INT8 = 1);//循环直到任务完成 

在 Main_9.c 中、我注释掉了 InitDMA();并添加了 InitCla();如下所示:

void main (void)
{
//--- CPU 初始化
InitSysCtrl();//初始化 CPU (文件:sysctrl.c)
InitGpio();//初始化共享 GPIO 引脚(文件:gpio.c)
InitXbar ();//初始化输入、输出和 ePWM X-Bar (文件:Xbar.PIC.c)

;初始化文件:InitWatchdog (tchdog)//初始化 tchdog (tchdog) Watchdog.c)

//--初始化 CLA (Leo)
InitCla ();


//--外设初始化
InitAdca ();//初始化 ADC-A (文件:ADC.c)
InitDacb (); //初始化 DAC-B (文件:dac.c)
InitEPwm ();//初始化 ePWM (文件:ePWM.c)
InitECap ();//初始化 ECAP (文件:eap.c)
//InitDma ();//初始化 DMA (文件:dma.c)
... 

在 cla_9.c 中、我添加了以下代码、以便遵循第页上的第11条指令。 9-20 (修改 CLA_9.c 的末尾以执行以下操作:

-在 PIE 中启用“CLA1_1”中断(提示:使用 PieCtrlRegs 结构)

-在 IER 寄存器中启用相应的内核中断

)

//--启用 CLA 中断

EALLOW;
IER |= M_INT11;//在 PIE 组#11中启用 CLA 任务1
PieCtrlRegs.PIEIER11.bit.INTx1 =1; //在 IER 中启用 INT11以启用 PIE 组11
EDIS;

}// InitCla()结束 

此外、这是属性窗口(我在"Linker command file"下拉菜单中使用了 Lab_9.cmd):

虽然这是我的项目中的文件列表(包含 F2837xD_Headers_nonBIOS_CPU1.cmd 和 Lab_9.cmd 是否正确?):

当我构建和调试 Lab9项目时、看起来 CLA1已断开连接

但是、当我运行该项目时、它看起来是正常工作的、因为缓冲区 AdcBufFilertering 和 AdcBuf 会不断更新:

图形还可以正确显示结果:

问题是我上面报告的代码修改是否正确、即我是否根据练习要求修改了代码? 此外、CPU1_CLA1在调试窗口中显示为"已断开连接"是否正确?

非常感谢你的帮助。

Leo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    感谢您提供详细信息。 此主题已分配给专家、应尽快回答。

    此致
    Baskaran
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请避免发布大量代码、而是提出更多具体问题。 它使我们能够更轻松地帮助和回答问题。

    如需更多帮助、请参阅 C2000Ware 中的 CLA 示例、并在论坛上发布更多具体问题。

    此致、
    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Leo、

    看起来您已经正确完成了实验。  请注意、我为每个实验练习提供了一个解决方案文件夹、以便 您可以检查自己的工作。  此外、如果您有兴趣、我正在更新此技术讲座以使用 F28379D LaunchPad 和 CCSv7。

    但愿这对您有所帮助。

    - Ken

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Ken:

    非常感谢您的回答。 太棒了!

    此致

    Leo