Cortex-M文档以及CMSIS_5下载地址:Overview (arm-software.github.io)
内核构架:内核架构 — 芯闻 (soc.xin)
core_cm0plus.h
core_cm7.h
cmsis_gcc.h
cortex-m0无中断向量寄存器 ICER,m0-plus/m7都有中断向量寄存器 ICER。
使用 __disable_irq(); 关闭总中断后,需要 __enable_irq 打开总中断,才能使能外设中断NVIC_EnableIRQ。
关闭 总中断 | __disable_irq | #include "cmsis_gcc.h" __ASM volatile ("cpsid i" : : : "memory"); |
打开 总中断 | __enable_irq | #include "cmsis_gcc.h" __ASM volatile ("cpsie i" : : : "memory"); |
关闭 模块 中断 | NVIC_DisableIRQ | core_cm7.h/core_cm0plus.h |
打开 模块 中断 | NVIC_EnableIRQ | core_cm7.h/core_cm0plus.h |
设置SP指针 | __set_MSP(start) | #include "cmsis_gcc.h" __asm volatile ("MSR msp, %0" : : "r" (start) : ); |
获取跳转地址 | void (*user_app)(void) = *(u32 *)(start+4); | 获取跳转程序的入口地址 |
跳转 | user_app(); |
跳转之前,需执行一下步骤:
1. 关闭 外设中断;
2. 设置SP指针,复位指针;
3. 获取跳转程序的入口地址;
4. 跳转。
示例如下: