10. 我想知道有哪些代码开发工具可用,以及我如何调试针对 CLA 的代码。 请参考C2000 CLA调试 FAQ
任务和中断 11. ‘任务’是什么? CLA 任务是由 CLA 执行的中断响应例程。
12. 支持多少个中断? 2803x 和 2806x CLA 都支持 8 个中断。
13. 哪些中断能够启动一个任务? 外设: 每个任务具有可以触发它的特定外设中断。 主 CPU 选择 MPISRCSEL 1 寄存器中的哪个中断? 需要理解的重要一点是触发资源只是任务的启动机制。 触发资源不限制任务可进行的操作。例 如,任务 1 可以读取任一/多个 ADC 结果寄存器,并且修改任何 ePWM1,ePWM2,ePWM3...ePWM7 寄存器,即使此任务是由 EPWM1_INT 启动时也是如此。
下面显示了 2803x 和 2806x 上的可用触发值。 其他器件也许会有所不同。 相关信息请参考你的器件专用文档。 在 2803x 上 中断触发值分配如下: 中断 1 = 任务 1 = ADCINT1 或 EPWM1_INT 或只为软件 中断 2 = 任务 2 = ADCINT2 或 EPWM2_INT 或只为软件 中断 3 = 任务 3 = ADCINT3 或 EPWM3_INT 或只为软件 中断 4 = 任务 4 = ADCINT4 或 EPWM4_INT 或只为软件 中断 5 = 任务 5 = ADCINT5 或 EPWM5_INT 或只为软件 中断 6 = 任务 6 = ADCINT6 或 EPWM6_INT 或只为软件 中断 7 = 任务 7 = ADCINT7 或 EPWM7_INT 或只为软件 中断 8 = 任务 8 = ADCINT8 或 CPU 定时器 0 或只为软件 在 2806x 上 中断触发值分配如下: 中断 1 = 任务 1 = ADCINT1 或 EPWM1_INT 或只为软件 中断 2 = 任务 2 = ADCINT2 或 EPWM2_INT 或只为软件 中断 3 = 任务 3 = ADCINT3 或 EPWM3_INT 或只为软件 中断 4 = 任务 4 = ADCINT4 或 EPWM4_INT 或 eQEP1/2 或 ECAP1/2/3 或只为软件 中断 5 = 任务 5 = ADCINT5 或 EPWM5_INT 或 eQEP1/2 或 ECAP1/2/3 或只为软件 中断 6 = 任务 6 = ADCINT6 或 EPWM6_INT 或 eQEP1/2 或 ECAP1/2/3 或只为软件 中断 7 = 任务 7 = ADCINT7 或 EPWM7_INT 或 eQEP1/2 或 ECAP1/2/3 或只为软件 中断 8 = 任务 8 = ADCINT8 或 CPU 定时器或 eQEP1/2 或 ECAP1/2/3 或只为软件
14. 主 CPU 能够通过软件启动任务吗? 可以! 主 CPU 可以使用 IACK #16bit 指令随时标记一个中断。 例如,IACK 0x003 将标记中断 1 和中断 2。 这与强制寄存器 (MIFRC) 中的设置位一样。
15. 我试图用 IACK 指令来强制任务执行,但是不起作用。 什么地方出错了吗? 请确保你已经在 MICTL 寄存器启用这个功能。 请确保在 MIER 寄存器中启用此中断。 请确保你在使用正确的 IACK 自变量。 例如,IACK #0x0003 将标记中断 1(位 0)和中断 2(位 1)。
16. 如果两个中断同时出现,哪个先执行呢? 被标记(MIFR 寄存器)且被使能(MIER 寄存器)的最高优先级任务被执行。 中断 1 / 任务 1 具有最高优先级,而中断 8 / 任务 8 的优先级最低。
17. 你可以嵌套 CLA 中断吗? 不可以。CLA 任务在它完成后执行。 一旦一个任务完成,那么被标记且被使能的最高优先级中断将自动开始。
18. CLA 能够中断主 CPU 吗? CLA 将发送一个中断到 PIE(外设中断扩展块)来告知主 CPU 一个任务已经完成。 每个任务在 PIE 中有一个相关矢量。 这个中断在相关矢量完成时自动触发。 例如,当任务 1 完成时,PIE 中的 CLA1_INIT 将被标记。 PIE 中还有专门用于浮点上溢和下溢情况的中断。
19. 主 CPU 能够终止任务吗? 可以。 如果一个中断已经被标记,但是任务还未运行,那么主 CPU 可以使用 MICLR 寄存器清除此标记。 如果任务已经运行,那么一个软复位(在 MCTL 中)将终止此任务并将 MIER 寄存器清零。 如果你希望将所有 CLA 寄存器清零,你可以使用 MCTL 寄存器中的硬复位选项。
20. 每个任务的起始地址是什么? 起始地址是固定的吗? 起始地址是可配置的。 每个任务具有一个相关中断矢量(MVECT1 至 MVECT8)。 这个矢量保存任务的起始地址(作为第一个程序位置的偏移)。
21. 任务有大小限制吗? 没有限制,除了针对所有任务的全部指令需要与器件 CLA 程序存储器的大小相匹配。 所有 CLA 指令是 32 位的,所以在 4k x 16 的程序空间内,你可以拥有大约 2k 的 CLA 指令。 其他器件的准确程序存储器数量和程序计数器大小会有所不同。 相关信息请参考你的器件专用文档。
22. 我如何标明一个任务的末尾? 在一个任务开始后,CLA 将执行指令,直到遇到 "MSTOP" 指令。 MSTOP 表示任务的末尾。
23. CLA 自己可以标记其他任务吗? CLA 不能对它自己的配置寄存器进行写入操作,所以它不能通过对强制寄存器的写入来启动一个任务。 然而,它可以写入 ePWM 寄存器,所以,从技术角度讲,它可以强制生成来自其中一个 ePWM 模块的中断。 主 CPU 可以在任务完成时获得一个中断。 在这个中断内,你可以使用 IACK 指令启动另外一个任务。
24. 如果 CLA 被配置为对 ACDINT1 做出响应,那么 CPU 也能做出响应吗? 可以。 中断被发送至 CLA 和 PIE,所以它们中的一个或者它们两个都可以做出响应。