cortex-m0p/m7 之 关闭中断与跳转

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. 跳转。 

示例如下:

cortex-m0p/m7 之 关闭中断与跳转_第1张图片

你可能感兴趣的:(嵌入式硬件)