器件型号:LAUNCHXL-F28377S
大家好、
我读取"cpu_timers_cpu01"的代码示例、 _interrupt void cpu_timer0_ISR (void)函数的用途是什么?
此致、
Takano
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.
器件型号:LAUNCHXL-F28377S
大家好、
我读取"cpu_timers_cpu01"的代码示例、 _interrupt void cpu_timer0_ISR (void)函数的用途是什么?
此致、
Takano
您好!
在配置外设中断时、需要在不同级别启用中断。
首先、在外设级别、
CpuTimer0Regs.tcr.bit.tie = 1; //在外设级别启用定时器0中断。
第二个位于外设中断扩展(PIE)级别、
PieCtrlRegs.PIEIER1.bit.INTx7=1;//在 PIE 级别启用定时器0中断。
第三个在 CPU 级别、
IER |= M_INT1;//在 CPU 级别启用计时器0中断。
最后、必须在全局级别启用中断、
EINT;
如下图所示、除了 NMI 外、处理器只支持16个中断。 ePIE 用于将来自各种外设的大量中断映射到进入 CPU 的12条中断线路(INT1至 INT12)。
如果您通过 PIE 通道映射进行读取、可以清楚地看到 Timer 0在 INT1线路上连接到处理器。 如下图第1行所示、PIE 块中的 INT1线路可进一步多路复用/连接到16个中断源。 定时器0位于位置7。 因此、定时器0连接在 PIEIER1.INTx7上、并通过设置示例代码中可以看到的相应位来启用定时器0。
正确配置中断并为中断提供服务后、您需要确认相同、以接受来自 PIE 块组/行1的进一步中断。 下面的行会执行该操作、
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;//确认来自 PIE 块行1的中断(中断已被处理)
因为定时器0属于 PIE 模块的组/行1 (见上图突出显示部分)。
我建议您浏览第84页《F28377S 技术参考手册》(修订版 D)中的"2.4外设中断"部分。
这将消除您的疑虑。
此致、
S.A Sadiq
您好!
1.更正:
根据"TMS320C28x CPU 和指令集参考指南" (spru430f)、C28x CPU 总共支持32个中断、而不是16个中断、其中12个(INT1至 INT12)连接到 ePIE 块。 请参阅第54页 的表3-1。
2.是 Takano、通过 ePIE 路由的所有外设中断通常都将通过4级路径。 因此、即使对于计时器0、它也是相同的。
未连接到 ePIE 的其他20 (32 - 12)个中断无法在 PIE 级别启用、因为它们直接连接到 CPU。
请注意、对于已启用的每个中断、您还可以在 PIEVECTABLE 寄存器中指定矢量地址、如下所示:
PieVectTable.TIMER0_INT =&CPU_timer0_ISR; //在 定时器0中断发生时执行函数'CPU_timer0_ISR()'。
必须在 PIEVECTABLE 寄存器中为所有启用的 INT 指定矢量地址、无论它们是直接连接 到 CPU 还是通过 ePIE 块连接。
此致、
S.A Sadiq