主题中讨论的其他器件:MSP430F5529
您好!
我目前正在基于 MSPBOOT_2_00_00_01开发定制的主存储器引导加载程序。 我修改了 MSP430F5529的示例代码、引导加载程序本身工作正常。 但是、中断矢量表写入似乎不正确。 据我所知、中断矢量表(对于 AFE253、为0xFFE0 - 0xFFFF)应填充代理矢量、该矢量指向应用程序存储器中的位置、而应用程序的"中断矢量"又驻留在该位置。 我还修改了引导加载程序向量的链接器文件(使用 IAR):
-Z (code) intvec=_flash_vectors_start-_flash_end -Z (const) boot_vector_table=_flash_vectors_start-_flash_end -Z (code) reset=_flash_reset_vector-_flash_end
其中 _flash_vectors_start = 0xFFE0。 在引导加载程序代码中有一个名为 TI_MSPBoot_VecRed_Boot.c 的文件:
/********* //* 使用 MSP430F5529的 MSPBoot 引导加载程序的矢量重定向文件*/* 使用 MSPBootVecRedGen.pl 在2017年8月1日生成的文件*/*/*--- // //// include 文件 // #include #include "msp430afe253.h" #include "TI_MSPBoot_Common.h" #include "TI_MSPBoot_AppMgr.h" //// 链接器文件中的外部变量 // extern uint16_t _App_Proxy_Vector_Start[];//代理表地址*// 宏和定义 // //////未使用的矢量 #define (0xBFFF) /*! 用于计算应用程序代理表中向量地址的宏*/ #define APP_PROXY 向量(x) ((uint16_t)&_App_Proxy_Vector_Start[x*2]) // //常量表 // //! MSPBoot 矢量表:它是固定的、因为它不能被擦除和修改。 *指向应用程序区域中的代理矢量表*/ #pragma location="boot_vector_table" const uint16_t Vector_Table[]= { 0x1234、//app_proxy_vector (0)、 // FFE0 =未知 APP_PROXY 矢量(1)、 // FFE2 =端口2 APP_PROXY 矢量(2)、 // FFE4 =未知 APP_PROXY 矢量(3)、 // FFE6 =未知 APP_PROXY 矢量(4)、 // FFE8 =端口1 APP_PROXY 矢量(5)、 // FFEA = Timer0_A1、Timer0_A2 APP_PROXY 矢量(6)、 // FFEC = Timer0_A0 APP_PROXY 矢量(7)、 // FFEE =未知 APP_PROXY 矢量(8)、 // FFF0 = USART0发送 APP_PROXY 矢量(9)、 // FFF2 = USART0接收 app_proxy_vector (10)、 // FFF4 =看门狗 APP_PROXY 矢量(11)、 // FFF6 =未知 APP_PROXY 矢量(12)、 // FFF8 = SD24_A APP_PROXY 矢量(13)、 // FFFA =未知 APP_PROXY 矢量(14)、 // FFFC = NMI };
因此、当我调试引导加载程序时、我希望我的器件在 boot_vector_table (shold 为0xFFE0)放置一个变量 Vector_Table、并以0x1234的值开始。 但是、似乎根本没有放置该表或放置在错误的位置、因为当查看0xFFE0处的存储器时、只有0xFFFF 直到最终放置复位矢量。 您能给我一些提示吗?