NVIC功能如何工作NVIC_EnableIRQ(CAN1_RX0_IRQn);

时间:2016-07-20 14:21:32

标签: protocols can-bus stm32f4discovery

所以我的朋友让我为上面的函数NVIC_Enable_IRQ(CAN1_RX0_IRQn)编写我自己的实现;启用可以接收中断。

最初我认为这样的实施是不可能的..

任何人都可以解释我像NVIC相关的寄存器,我直接去更改所需的值,这样就不需要实现上述功能,并启用CAN接收中断。

此行NVIC_EnableIRQ(CAN1_RX0_IRQn);我是从CAN

的stm32f示例代码中给出的示例代码中复制的

1 个答案:

答案 0 :(得分:3)

以NVIC_开头的所有内容都是ARM提供的CMSIS库的一部分,用于设置ARM内核(独立于MCU制造商)。你真的不想搞砸它们,所以你最好使用它们。

在CMSIS core_cm4.h(对于cortex M4)中,您可以找到:

__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
{
  NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
}

现在,如果您不想打电话给NVIC_EnableIRQ,或者如果您不想使用CMSIS,祝您好运,您需要阅读ARM核心文档以检查需要修改的地址。 ARM核心文档可以在ARM或Keil网站上找到。例如,您可能会发现这些链接对Cortex M4非常有用:

https://www.arm.com/products/processors/cortex-m/cortex-m4-processor.php http://www.keil.com/dd/docs/datashts/arm/cortex_m4/r0p1/dui0553a_cortex_m4_dgug.pdf