__asm void disableAllInt(void) { CPSID I BX LR } __asm void enableAllInt(void) { CPSIE I BX LR } __asm void MSR_MSP(uint32_t addr) { MSR MSP, r0 //set
//用户代码区第二个字为程序开始地址(复位地址)MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指...
22. 其中SetMSP为汇编程序编写的函数,如下所示,其中r0为addr的地址,具体可参考ARM架构基本寄存器一文及该专栏。 __asm static void SetMSP(u32 addr) { MSR MSP, r0 BX r14 } 1. 2. 3. 4. 5. IAP的APP程序实现 APP程序为用户程序,实际上任意程序都可以,但需要进行相应的配置,配置步骤如下: 设置起始...
R3, #0x20 ; psp 指向中断自动压栈后的栈顶MSR PSP, R3; 上电后,处理器处于线程+特权模式+msp...
jumpAddress; //初始化用户程序的堆栈指针 __set_MSP(*(volatile U32*) BOOT_APP_MAIN_ADDR); Jump_To_Application(); } 重启功能设计(涉及看门狗) DRV_IWDG_Init(); /* 利用看门狗复位芯片 */ 文件传输功能设计(涉及XMODEM协议) 文件传输采用Xmodem协议,该协议非常简单,如下, 报文格式: 串口...
jumpAddress; //初始化用户程序的堆栈指针 __set_MSP(*(volatile U32*) BOOT_APP_MAIN_ADDR); Jump_To_Application(); } 重启功能设计(涉及看门狗) DRV_IWDG_Init(); /* 利用看门狗复位芯片 */ 文件传输功能设计(涉及XMODEM协议) 文件传输采用Xmodem协议,该协议非常简单,如下, 报文格式: 串口...
我相信国产芯片会越来越好,所以,芯片选择我都会采用国产芯片,例如本文芯片GD32F103。同时希望用这种方法能促进国产芯片的发展。 如果有国产芯片公司需要人为其编写驱动,丰富自己的例库,也可以发邮件(welcome_sk@126.com)给我,我很愿意帮忙的。
程序运行原理) 所谓引导至APP,其实就做两件事,一是重置MSP指针,二是重置PC指针。具体原因在OS章节说明。 AI代码解析 typedef void(*pAppFunction(void); #define BOOT_APP_MAIN_ADDR 0x800E000 static VOID BOOT_GoToApp(VOID) { pApp Jump__Application; unsigned long jumpAddress;//跳转至用户代码 jump...
__asmstaticvoidSetMSP(u32 addr){MSR MSP,r0 BX r14} IAP的APP程序实现 APP程序为用户程序,实际上任意程序都可以,但需要进行相应的配置,配置步骤如下: 设置起始地址和存储空间 在keil中设置起始地址和存储空间的大小,如下图所示,在Options for Target 'Target1’对话框中,打开Target标签页,勾选IROM1选项,并...
MSR_MSP(*(vu32*)appxaddr); // 初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址) // __set_CONTROL(0);//特权模式 jump2app(); // 跳转到APP. } } update_application()函数的功能请自行实现,改函数主要是实现固件完整性校验和固件拷贝。