|
本帖最后由 syfcoltd 于 2014-3-25 15:28 编辑
如題~ 請各位路過的大俠幫忙指教... 小弟目前提供的方法是以NXP原廠AN11071 及 AN10866 (NXP usb IAP) 方案修改而成但目前仍有APP 可能跳轉失敗的情況
1. IAP 程序跳轉至 APP (有時會跑飛的原因大都是 中斷位移 remap 內存 地址給的方式不對 )
#define OFFSET_ADDRESS 0x4000 // APP 程序的偏移地址 , 跳過了 IAP 程序段
__asm void JMP_App( u32 address ){
LDR SP, [R0] ; 載入 sp 堆棧地址 , 此時給的是 APP 使用的堆棧
LDR PC, [R0, #4] ; 載入 目的編程 偏移地址 程序即跳轉到 APP 程序開始的地址
}
void AppEntry(void)
{
__disable_irq(); // 暫時停止所有中斷
// SCB->VTOS = OFFSET_ADDRESS; // 方法一 , 直接給值 (這個方式可能發生程序跑飛的問題)
NVIC_SetVTOR( OFFSET_ADDRESS); // 方法二 , 透過固件程序給值
JMP_App(OFFSET_ADDRESS); // 跳轉到 目的編程
}
2. APP 應用程序的進入點
int main (void)
{
__disable_irq(); // 暫時停止所有中斷
// SCB->VTOS = OFFSET_ADDRESS; // 方法一 , 直接給值 (這個方式可能發生程序跑飛的問題)
NVIC_SetVTOR( OFFSET_ADDRESS); // 方法二 , 透過固件程序給值
//.... ? 其他應用程序原碼
for(;;) //
return 0;
}
3.APP 應用程序 在 Option->Target ->IROM1 : offset 0x00004000 lenght 0x0007C000 (應用程序偏移到 0x4000 的地址開始執行 , length為應用程序最大長度)
4.APP 應用程序 在 Option->asm : Conditional Assembly Control Symbols > NO_CRP (設定為 No Code Read Protection , 重要!!!)
5.APP 應用程序 在 Option->User : Run User Programs After Build/Rebuild > fromelf --bin -o .\App.bin .\Output\App.axf (將 axf 轉成 bin 檔 , 重要!!!)
6.目前測試時 上位機程序使用 超級終端機 或 Tera Term Pro 這類軟件 使用 xmodem-1K 協議下載程序
|
|