您好!
根据 https://software-dl.ti.com/C2000/docs/c28x_interrupt_nesting/html/index.html 、嵌套中断的结构如下:
void EPWM1_TZINT_ISR (void) { uint16_t TempPIEIER; TempPIEIER = PieCtrlRegs.PIEIER2.all;//稍后保存 PIEIER 寄存器 IER |= 0x002; //通过调整 IER 设置全局优先级 IER &= 0x002; PieCtrlRegs.PIEIER2.all &= 0x0002;//通过调整 PIEIER2来设置组优先级,以允许 INT2.2中断当前 ISR PieCtrlRegs.PIEACK.all = 0xFFFF; //启用 PIE 中断 ASM (" NOP"); //等待一个周期 EINT; //清除 INTM 以启用中断 // //在此处插入 ISR 代码…… //现在只需要插入一个延迟 // for (i = 1;i <= 10;i++){} // //恢复寄存器已保存: // Dint; PieCtrlRegs.PIEIER2.all = TempPIEIER; }
假设、我不想在 ISR 末尾更改组优先级、"DINT"仍然是错误的吗?
因此、DINT 只需用来保护 PIEIER、PIEACK 等 ISR 源代码内重要寄存器的写入。。。
或者在切换期间为了保护最后三个自动软件步骤、
ISR 已完成:
1.手动上下文恢复(如果需要)
2.执行 NASP 指令
3.执行 IRET 指令
此致
威尔逊