各位先進好:
我正在進行Bootloader之設計,Bootloader有自己的Interrupt Vector Table,Application也有自己的Interrupt Vector Table,當我從Bootloader跳轉Application時,
我要如何切換Interrupt Vector Table,謝謝
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
各位先進好:
我正在進行Bootloader之設計,Bootloader有自己的Interrupt Vector Table,Application也有自己的Interrupt Vector Table,當我從Bootloader跳轉Application時,
我要如何切換Interrupt Vector Table,謝謝
Hi Yale,
感謝您的回覆,您的意思是跳到主程序後,只需要重新將中斷Re-map,然後重新始能中斷就可以嗎?謝謝。
Hi William,
C2000器件的中断向量表是固定的,所以不需要重新映射,程序跳转之后重新初始化、并在初始化之后重新使能中断即可。
您的bootloader中有相应的中断程序,主程序中也有相应的中断的程序,它们使用的中断向量表就是datasheet中提供的,这个是固定的。
所以您只需要在bootloader与主程序中分别初始化中断向量表。
通俗来讲就是中断向量表是不变的,只需要改变链接到中断向量表的中断程序即可。
Hi Yale
每次reset後,都必須從Bootloader跳轉到APP,那麼現在又有一些問題,就是我要如何從Bootloader跳轉到APP,APP的cmd file又該如何正確修改(APP起始位置為0x0008C000),下列代碼是我修改過的,謝謝。
MEMORY { BEGIN_APP : origin = 0x0008C000, length = 0x00000002 BOOT_RSVD : origin = 0x00000002, length = 0x00000126 RAMM0 : origin = 0x00000128, length = 0x000002D8 RAMM1 : origin = 0x00000400, length = 0x000003F8 // RAMM1_RSVD : origin = 0x000007F8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ RAMLS0 : origin = 0x00008000, length = 0x00002000 RAMLS1 : origin = 0x0000A000, length = 0x00001FF8 // RAMLS1_RSVD : origin = 0x0000BFF8, length = 0x00000008 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ RESET : origin = 0x003FFFC0, length = 0x00000002 /* Flash sectors */ FLASH_BANK0_SEC_0_7 : origin = 0x080002, length = 0x1FFE /* on-chip Flash */ FLASH_BANK0_SEC_8_15 : origin = 0x082000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_16_23 : origin = 0x084000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_24_31 : origin = 0x086000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_32_29 : origin = 0x088000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_40_47 : origin = 0x08A000, length = 0x2000 /* on-chip Flash */ //FLASH_BANK0_SEC_48_55 : origin = 0x08C000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_48_55 : origin = 0x08C002, length = 0x1FFE /* on-chip Flash */ FLASH_BANK0_SEC_56_63 : origin = 0x08E000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_64_71 : origin = 0x090000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_72_79 : origin = 0x092000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_80_87 : origin = 0x094000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_88_95 : origin = 0x096000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_96_103 : origin = 0x098000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_104_111 : origin = 0x09A000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_112_119 : origin = 0x09C000, length = 0x2000 /* on-chip Flash */ FLASH_BANK0_SEC_120_127 : origin = 0x09E000, length = 0x1FF0 /* on-chip Flash */ // FLASH_BANK0_SEC_127_RSVD : origin = 0x0A0FF0, length = 0x0010 /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */ } SECTIONS { codestart : > BEGIN_APP //BEGIN //.text : >> FLASH_BANK0_SEC_8_15 | FLASH_BANK0_SEC_16_23 | FLASH_BANK0_SEC_24_31, ALIGN(8) //.cinit : > FLASH_BANK0_SEC_0_7, ALIGN(8) //.switch : > FLASH_BANK0_SEC_0_7, ALIGN(8) .text : >> FLASH_BANK0_SEC_56_63 | FLASH_BANK0_SEC_64_71 | FLASH_BANK0_SEC_72_79, ALIGN(8) .cinit : > FLASH_BANK0_SEC_48_55, ALIGN(8) .switch : > FLASH_BANK0_SEC_48_55, ALIGN(8) .reset : > RESET, TYPE = DSECT /* not used, */ .stack : > RAMM1 #if defined(__TI_EABI__) .bss : > RAMLS0 .bss:output : > RAMLS0 //.init_array : >> FLASH_BANK0_SEC_0_7, ALIGN(8) //.const : >> FLASH_BANK0_SEC_32_29, ALIGN(8) .init_array : >> FLASH_BANK0_SEC_48_55, ALIGN(8) .const : >> FLASH_BANK0_SEC_80_87, ALIGN(8) .data : > RAMLS0 .sysmem : > RAMLS0 .bss:cio : > RAMLS0 #else //.pinit : >> FLASH_BANK0_SEC_0_7, ALIGN(8) .pinit : >> FLASH_BANK0_SEC_48_55, ALIGN(8) .ebss : > RAMLS0 //.econst : >> FLASH_BANK0_SEC_32_29, ALIGN(8) .econst : >> FLASH_BANK0_SEC_80_87, ALIGN(8) .esysmem : > RAMLS0 .cio : > RAMLS0 #endif #if defined(__TI_EABI__) //.TI.ramfunc : LOAD = FLASH_BANK0_SEC_0_7, .TI.ramfunc : LOAD = FLASH_BANK0_SEC_48_55, RUN = RAMLS0, LOAD_START(RamfuncsLoadStart), LOAD_SIZE(RamfuncsLoadSize), LOAD_END(RamfuncsLoadEnd), RUN_START(RamfuncsRunStart), RUN_SIZE(RamfuncsRunSize), RUN_END(RamfuncsRunEnd), ALIGN(8) #else //.TI.ramfunc : LOAD = FLASH_BANK0_SEC_0_7, .TI.ramfunc : LOAD = FLASH_BANK0_SEC_48_55, RUN = RAMLS0, LOAD_START(_RamfuncsLoadStart), LOAD_SIZE(_RamfuncsLoadSize), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), RUN_SIZE(_RamfuncsRunSize), RUN_END(_RamfuncsRunEnd), ALIGN(8) #endif /* Allocate IQ math areas: */ //IQmath : > FLASH_BANK0_SEC_32_29, ALIGN(8) //IQmathTables : > FLASH_BANK0_SEC_32_29, ALIGN(8) IQmath : > FLASH_BANK0_SEC_80_87, ALIGN(8) IQmathTables : > FLASH_BANK0_SEC_80_87, ALIGN(8) }
Hi William,
如果需要新的技术支持请点击右上角红色按钮提出新问题,
如果与此问题相关则点击橙色按钮提出相关问题,
这样便于我们识别及跟进,以为您提供更好的技术支持。
--
谢谢
Yale