ZHCUAN6E October 2022 – May 2025 MSPM0L1105 , MSPM0L1106 , MSPM0L1116 , MSPM0L1117 , MSPM0L1227 , MSPM0L1227-Q1 , MSPM0L1228 , MSPM0L1228-Q1 , MSPM0L1303 , MSPM0L1304 , MSPM0L1304-Q1 , MSPM0L1305 , MSPM0L1305-Q1 , MSPM0L1306 , MSPM0L1306-Q1 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346 , MSPM0L2227 , MSPM0L2227-Q1 , MSPM0L2228 , MSPM0L2228-Q1
如果事件产生 CPU 中断,应用软件可以通过读取 IIDX 寄存器或读取 MIS 并写入 ICLR 寄存器来确定触发事件生成的外设中断。
应用软件可以读取 CPU_INT 组中的 IIDX 寄存器,以确定和清除最高优先级的挂起中断。读取 IIDX 将返回与最高优先级中断相对应的索引,该中断已设置且未被屏蔽。读取操作还将同时清除与读取所返回索引的最高优先级中断相对应的 RIS 和 MIS 位。从 IIDX 寄存器读取的值随后可用于选择语句,如下所示。
void ISR_IIDX(void)
{
switch(IIDX)
{
case 0: // no IRQ pending
break;
case 1: // IRQ[0]
do_irq0();
break;
case 2: // IRQ[1]
do_irq1();
break;
default: // out of range
illegal();
}
}或者,应用软件可以读取 MIS 寄存器来确定设置了哪些位,然后使用 ICLR 寄存器来清除挂起的中断状态位。
void ISR(void)
{
uint32_t pending = MIS;
ICLR = pending; // clear pending IRQ
if (pending & 0x01) // IRQ[0]
{
do_irq0();
}
if (pending & 0x02) // IRQ[1]
{
do_irq1();
}
}