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:什么是_interrupt void CPU_timer0_ISR (void)?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/591279/launchxl-f28377s-what-is-the-__interrupt-void-cpu_timer0_isr-void

器件型号:LAUNCHXL-F28377S

大家好、

我读取"cpu_timers_cpu01"的代码示例、 _interrupt void cpu_timer0_ISR (void)函数的用途是什么?

此致、

Takano

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

    这是 CPU 定时器 ISR、即、如果您将定时器配置为1ms、ISR 将根据中断矢量表的优先级每1ms 处理一次。

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

    中断服务例程(ISR)是否是在属于中断向量的中断之后执行的例程?
    那么、在该示例中、CpuTimer0.InterruptCount++是主例程、PieCtrlRegs.PIEACK.all = PIEACK_Group1的用途是什么?

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

    [引用 USER="Takano"]是否是中断服务例程(ISR)是在属于中断向量的中断之后执行的例程?

    好的

    Takano 说:
    因此,在该示例中,CpuTimer0.InterruptCount++是主例程,PieCtrlRegs.PIEACK.all = PIEACK_Group1的用途是什么?

    如果你看看中断矢量表、你会发现 CPU_Timer 属于组1中断。

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

    您是说这个代码是什么?
    PieCtrlRegs.PIEIER1.bit.INTx7=1;
    那么、这是否意味着矢量编号 7是通过"1"标志置位分配给该中断的吗?

    此致、
    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

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

    您好!  

    非常感谢您的回复、这对我来说是非常容易理解的。

    毕竟、如果使用定时器0、为了使用定时器中断、我们必须按照您所说的那样设置4级路径、对吧?

    再次感谢您的参与。 如果我在尝试解决问题时遇到问题、我会回答。

    最棒的

    Takano

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

    您好!

    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