用于中断挂起的ARM Cortex-M3示例

时间:2012-07-12 03:09:34

标签: arm cortex-m3

使用ARM Cortex-M3,例如NXP LPC1788,为什么有人会使用中断设置挂起寄存器或中断清除挂起寄存器?

有人可以提供使用这些寄存器的简单规范示例吗?

1 个答案:

答案 0 :(得分:3)

我能想到的唯一用例是从高优先级IRQHandler触发低优先级软件切换 - 就像GPIO中断处理程序一样。

通常你会使用PendSV,但是当你有多个任务或优先级时,你可以使用任何未使用的外围异常向量。在使用Sleep-on-Exit功能的程序中可能很有用 - 其中μC只能在异常处理程序中运行。

// Example for LPC17xx
void   ETHERNET_Handler (void)
{
    // toggle LED on P0.4
    LPC_GPIO0->FIODIR0 ^= (1<<4);
}

void main(void) 
{
    // set Ethernet IRQ to loewst Priority
    NVIC_SetPriority(ENET_IRQn,31);
    NVIC_EnableIRQ(ENET_IRQn);
    NVIC_SetPendingIRQ(ENET_IRQn); // trigger Ethernet IRQ Handler
    // ...
    while (1);

}