Other Parts Discussed in Thread: MSP430FR5969
我现在在实现MSP430FR6047的APP和IAP程序,由于硬件和与以前产品兼容的问题,我无法使用BSL的方式进行升级,故我需要将FRAM拆分成IAP和APP两部分进行实现。我将0X4000-0X7FFF作为IAP区间,IAP的xcl文件我将中断部分修改成了如下代码
-Z(CONST)JTAGSIGNATURE=FF80-FF83 -Z(CONST)BSLSIGNATURE=FF84-FF87 -Z(CONST)IPESIGNATURE=FF88-FF8F -Z(CODE)INTVEC=FF90-FFFF -Z(CODE)RESET=FFFE-FFFF。而APP我将0x8000-0x43fff作为APP区域,其xcl的中断部分我修改为了如下代码
-Z(CONST)JTAGSIGNATURE=FE80-FE83 -Z(CONST)BSLSIGNATURE=FE84-FE87 -Z(CONST)IPESIGNATURE=FE88-FE8F -Z(CODE)INTVEC=FE90-FEFF -Z(CODE)RESET=FEFE-FEFF。然后在IAP跳转至APP时做出如下处理
void jump_app(void) { __disable_interrupt(); WDTCTL = WDTPW | WDTHOLD; // 关闭看门狗 memcpy((uint8_t*)0xFF00, (uint8_t*)0xFF80, 0x80); // 保存iap的中断向量 memcpy((uint8_t*)0xFF80, (uint8_t*)0xFE80, 0x80); // 拷贝app的中断向量 PMM_trigBOR(); // 触发软复位 }。APP跳转回IAP时做如下处理
__disable_interrupt(); WDTCTL = WDTPW | WDTHOLD; // 关闭看门狗 memcpy((uint8_t*)0xFF80, (uint8_t*)0xFF00, 0x80); // 还原IAP的中断向量 PMM_trigBOR(); // 软件复位。通过这种方式我实现了预期的IAP到APP以及APP到IAP的跳转,并能够通过我的预期进行升级,但是我升级后我发现我的串口无法工作了