中断挂起的 ARM Cortex-M3 示例

标签 arm cortex-m

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

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

最佳答案

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

通常您会使用 PendSV 来实现此目的,但是当您有多个任务或优先级时,您可以使用任何未使用的外设异常向量。在使用退出时 sleep 功能的程序中可能很有用 - µ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);

}

关于中断挂起的 ARM Cortex-M3 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11444513/

相关文章:

assembly - 获取 ARM 上寄存器的标签地址?

c++ - Cortex-M0+ ASF 基础知识

c - IAR编译器 "stdio library"

visual-studio - 运行 "armasm.exe"失败 : "The application was unable to start correctly (0xc000007b)

linux - 是否应始终保存 r0-r12 以防止出现 IRQ 或保存较少的寄存器

php - 如何在交叉编译的 PHP 上使用动态加载的扩展?

c - C中的双函数间接

linux-kernel - 为什么引导加载程序和内核源代码中都需要设备树结构 (DTS) 文件?

c - 为什么 PRIx64 打印 "lx"而不是 16 个十六进制字符?

为无堆的 32 位微 Controller 编译 zbar 库