TMS320F280039C: 无法实现中断嵌套

Part Number: TMS320F280039C
Other Parts Discussed in Thread: SYSCONFIG, TMS320F28388D, C2000WARE

我配置了三个定时器中断,定时器周期都是固定1s中断一次,timer0、timer1、timer2中断,我想让timer2在执行中断程序的时候可以被timer0打断,代码如下,基本是按照官方给的参考文档完成的,但是这样并不能实现中断嵌套,这是为什么

interrupt void INT_myCPUTIMER2_ISR(void) // 1s中断
{

    GPIO_writePin(myGPIO57, 1);
    GPIO_writePin(LED0, 0); // LED0灯闪烁
    //
    // Save IER register on stack
    //
    volatile uint16_t tempPIEIER = HWREGH(PIECTRL_BASE + PIE_O_IER1);

    //
    // Set the global and group priority to allow CPU interrupts
    // with higher priority
    //
    IER |= M_INT1;
    IER &= MINT1;
    HWREGH(PIECTRL_BASE + PIE_O_IER1) &= MG1_7;

    //
    // Enable Interrupts
    //
    Interrupt_clearACKGroup(0xFFFFU);
    __asm("  NOP");
    EINT;

    //
    // Insert ISR Code here ..
    //

    // enable timer1 interrupt
    DEVICE_DELAY_US(30000000);

    //
    // The ACK group corresponding to this interrupt must be cleared
    // If the interrupt is setup using C2000 SysConfig, the ACK group
    // is available in the form of INT_<interrupt name>_INTERRUPT_ACK_GROUP
    //

    //
    // Disable interrupts and restore registers saved:
    //
    DINT;
    HWREGH(PIECTRL_BASE + PIE_O_IER1) = tempPIEIER;


    GPIO_writePin(myGPIO57, 0);
    GPIO_writePin(LED0, 1);
}

//
// Interrupt Service Routine - CPU Timer 1 Interrupt
//
interrupt void INT_myCPUTIMER0_ISR(void) // 1s中断
{
    GPIO_writePin(myGPIO44, 1);
    GPIO_writePin(LED1, 0);
    DEVICE_DELAY_US(300000);

    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
    GPIO_writePin(myGPIO44, 0);
    GPIO_writePin(LED1, 1);
}
  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好

    我对这方面的延误深表歉意。 对于C28x中断,有两种不同的嵌套方案:

    简单嵌套(无论CPU是否已在为另一个中断提供服务,最高优先级的中断都将分支到)
    更改优先级(嵌套以更改ePIE中的优先级)-使用sw_prioritization_isr_levels.h中的掩码
    为了确保我理解,您希望中断的以下优先级/行为,是否正确?

    CPU计时器0 ISR (通过ePIE)
    CPU计时器1 ISR
    CPU计时器2 ISR -嵌套计时器0内部
    如果是这样,您只需查看一个简单的嵌套案例1场景,其中硬件中的优先级保持不变。 请在此处查看我的描述,了解如何实现:(3) TMS320F28388D:EINT和嵌套- C2000微控制器论坛- C2000Tm︎ 微控制器- TI E2E支持论坛。

    此外,还有几个注意事项:

    您只需要计时器0 ISR内部的ACK,因为这是ePIE中唯一的实际中断,其他计时器中断直接连接到CPU。
    我们在C2000ware中有一个嵌套示例,使用所有三个计时器中断(INTERRUPT_EX3_SW_PRIORIZATION),但这是一个更改优先级的示例1,所以听起来好像您想要执行与此不同的操作。