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.

TMS320F2800137: 如何切換Interrupt Vector Table

Part Number: TMS320F2800137

各位先進好:

       我正在進行Bootloader之設計,Bootloader有自己的Interrupt Vector Table,Application也有自己的Interrupt Vector Table,當我從Bootloader跳轉Application時,

我要如何切換Interrupt Vector Table,謝謝

  • Hi William,

    我已经向相关工程师询问。有了结果会第一时间回复

  • Hi William,

    程序跳到主程序后,重新初始化中断向量表,之后再重新使能中断。

  • Hi Yale,

    感謝您的回覆,您的意思是跳到主程序後,只需要重新將中斷Re-map,然後重新始能中斷就可以嗎?謝謝。

  • Hi William,

    C2000器件的中断向量表是固定的,所以不需要重新映射,程序跳转之后重新初始化、并在初始化之后重新使能中断即可。

    您的bootloader中有相应的中断程序,主程序中也有相应的中断的程序,它们使用的中断向量表就是datasheet中提供的,这个是固定的。

    所以您只需要在bootloader与主程序中分别初始化中断向量表。

    通俗来讲就是中断向量表是不变的,只需要改变链接到中断向量表的中断程序即可。

  • Hi Yale

    了解了,謝謝您。

  • Hi William,

    不客气。有什么问题欢迎随时提问

  • 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

  • Hi Yale

        好的,我已提出新問題,謝謝。