使用28377D的CLA功能,能在CLA中断中正常控制LED的翻转,并且可以对pwm的占空比进行控制,但是不能读取ad的数据。如果仅在主函数中断里读取可以读取。
数据声明为:
//声明cla中使用的变量,或者共享变量 #ifdef __cplusplus #pragma DATA_SECTION("CpuToCla1MsgRAM"); float AdcResults_A0; #pragma DATA_SECTION("CpuToCla1MsgRAM"); float AdcResults_B0; #else #pragma DATA_SECTION(AdcResults_A0,"CpuToCla1MsgRAM"); float AdcResults_A0; #pragma DATA_SECTION(AdcResults_B0,"CpuToCla1MsgRAM"); float AdcResults_B0; #endif //__cplusplus
CLA结束返回主程序中断为:
interrupt void cla1Isr1 () {//// Clear the ADC interrupt flag so the next SOC can occur// Clear the PIEACK bits so another interrupt can be taken//AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is clearedPieCtrlRegs.PIEACK.all = (PIEACK_GROUP1 | PIEACK_GROUP11);a=AdcResults_A0; }
CLA内中断程序为:
__interrupt void Cla1Task1 ( void ) { //Res = Num/Den;LED8_ON_OFF;AdcResults_A0 = AdcaResultRegs.ADCRESULT0;EPwm2Regs.CMPA.bit.CMPA = 100;//设定A通道占空比,此处可以直接控制 }
喝可乐的马甲:
你把AdcResults_A0的Memory地址位置放错了,从CLA1传到CPU要用Cla1ToCpuMsgRAM。