标签:初始化 volatil 地址 ffffff 初始 代码 cat rcc 偏移量
bootloader跳转代码:
__asm void MSR_MSP(uint32_t addr)
{
MSR MSP, r0
BX r14
}
void jump_app(uint32_t addr)
{
// 检查栈顶地址是否合法
if(((*(volatile uint32_t *)addr) & 0x2FFE0000) == 0x20000000) {
jump2app=(void(*)())*(volatile uint32_t *)(addr + 4); // 用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP(*(volatile uint32_t *)addr); // 初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
for(int i = 0; i < 8; i++) {
NVIC->ICER[i] = 0xFFFFFFFF; // 关闭中断
NVIC->ICPR[i] = 0xFFFFFFFF; // 清除中断标志位
}
RCC_DeInit();
// DeInit();
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
jump2app(); // 跳转到APP
}
}
标签:初始化 volatil 地址 ffffff 初始 代码 cat rcc 偏移量
原文地址:https://www.cnblogs.com/rootming/p/10854297.html