请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28377D 主题中讨论的其他器件:C2000WARE
大家好、
我现在正在调试由 ADCAINT1触发的 CLA 任务。
可以成功触发 CLA 任务、但无法达到 ADC 结果。
我检查了 Code Composer Studio 的"Register"视图、只有内核寄存器和 CLA 寄存器。
以下是我的 CLA 代码:
中断 void Cla1Task1 (void) { _mdebugstop(); Samples.AGridVoltage = AdcaResultRegs.ADCRESULT0; Samples.BGridVoltage = AdcbResultRegs.ADCRESULT0; Samples.CGridVoltage = AdccResultRegs.ADCRESULT0; Samples.UpDCVoltage = AdcaResultRegs.ADCRESULT1; Samples.DownDCVoltage = AdcbResultRegs.ADCRESULT1; Samples.SumDCVoltage = AdccResultRegs.ADCRESULT1; }
下面是 CLA 初始化代码:
void CLA_initCpu1Cla1 (void) { // //计算所有 CLA 任务矢量 //在1类 CLA 上,MVECT 寄存器接受完整的16位任务地址为 //与旧的0类 CLA 上使用的偏移相对 // EALLOW; Cla1Regs.MVECT1 =(uint16_t)(&Cla1Task1); Cla1Regs.MVECT2 =(uint16_t)(&Cla1Task2); Cla1Regs.MVECT3 =(uint16_t)(&Cla1Task3); Cla1Regs.MVECT4 =(uint16_t)(&Cla1Task4); Cla1Regs.MVECT5 =(uint16_t)(&Cla1Task5); Cla1Regs.MVECT6 =(uint16_t)(&Cla1Task6); Cla1Regs.MVECT7 =(uint16_t)(&Cla1Task7); Cla1Regs.MVECT8 =(uint16_t)(&Cla1Task8); // //启用 IACK 指令以在软件中启动 CLA 上的任务 //针对所有8个 CLA 任务。 此外、全局启用所有8个任务(或 A //任务的子集),方法是在中写入它们各自的位 // MIER 寄存器 // Cla1Regs.MCTL.bit.IACKE = 1; Cla1Regs.MIER all = 0x00FF; //使用ADCAINT1中断触发TASK1 DmaClaSrcSelRegs.CLA1TASSKSRCSEL1.bit.task1 = 1; //使用ADCDINT1中断触发TASK2 DmaClaSrcSelRegs.CLA1TASSKSRCSEL1.bit.task2 = 16; // //为所有的任务结束中断配置向量 // 8个任务 // PieVectTable.CLA1_1_INT =&cla1Isr1; PieVectTable.CLA1_2_INT =&cla1Isr2; PieVectTable.CLA1_3_INT =&cla1Isr3; PieVectTable.CLA1_4_INT =&cla1Isr4; PieVectTable.CLA1_5_INT =&cla1Isr5; PieVectTable.CLA1_6_INT =&cla1Isr6; PieVectTable.CLA1_7_INT =&cla1Isr7; PieVectTable.CLA1_8_INT =&cla1Isr8; // //在组和子组级别启用 CLA 中断 // PieCtrlRegs.PIEIER11.all = 0xFFFF; IER |= M_INT11; EDIS; }
这里是 CLA 存储器初始化代码:
void CLA_configClaMemory (void) { extern uint32_t Cla1ProgRunStart、Cla1ProgLoadStart、Cla1ProgLoadSize; EALLOW; #ifdef _FLASH // //将代码从闪存复制到 RAM // memcpy (((uint32_t *)&Cla1ProgRunStart、(uint32_t *)&Cla1ProgLoadStart、 (uint32_t)&Cla1ProgLoadSize); #endif //_flash // //初始化并等待 CLA1ToCPUMsgRAM // MemCfgRegs.MSGxINIT.bit.init_CLA1TOCPU = 1; while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CLA1TOCPU!= 1){}; // //初始化并等待 CPUToCLA1MsgRAM // MemCfgRegs.MSGxINIT.bit.init_CPUTOCLA1 = 1; while (MemCfgRegs.MSGxINITDONE.bit.INITDONE_CPUTOCLA1!= 1){}; // //选择 LS5RAM 作为 CLA 的编程空间 //首先将 CLA 配置为 LS5的主器件,然后再配置 //将空间设置为程序块 // MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1; MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 1; // MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1; // MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 1; // //接下来将 LS0RAM 和 LS1RAM 配置为 CLA 的数据空间 //首先将 CLA 配置为 LS0 (1)的主器件、然后 //将空格设置为代码块 // // MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 1; // MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 0; EDIS; }
非常感谢、请帮我解决问题。