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.

关于TM4C中断向量表映射 .intvecs: > 0x00000000,是只能放到Flash地址吗?放到0x20000000好像不能进中断

Other Parts Discussed in Thread: TM4C123AH6PM

    .intvecs:   > 0x00000000这个位置是Flash的首地址(tm4c123ah6pm),中断向量表的位置是不是固定在此处呢?谢谢各位!

  • 仔细看看TM4C的内存映射表,每个地址段都有他自己固定的作用,是不可以乱放的。我理解的是,你可以自己在flash中定义中断向量表的位置,但是必须保证程序不会放在这些位置中。

  • 谢谢你的回答。

    我查阅了相应期间的内存映射表如下:

     *
     * Revisions:
     *  June-10-2014 3rd revision
     *
     * This is derived from revision 12770 of the TivaWare Library.
     *
     */
    menuitem "StartUp"
    hotmenu StartUp()
    {
        /* Load the CortexM3_util.gel file */
        GEL_LoadGel("$(GEL_file_dir)/CortexM3_util.gel");
        GEL_MapOff();
        GEL_MapReset();
        GEL_MapOn();
        memorymap_init();
    }
    OnTargetConnect()
    {
    }
    memorymap_init()
    {
        /*
         * Syntax for GEL_MapAddStr.
         * GEL_MapAddStr(address, page, length, "attribute", waitstate);
        Basic Attribute Types           Derived Attribute Types
        String      Description         String      Description
        R           Read                NONE        No memory/protected
        W           Write               RAM         Read and write
        P           Port                ROM         Read only
        EX          External            WOM         Write only
        EM          Emulator            INPORT      Port read only
        PR          Programmable        OUTPORT     Port write only
        ER          Erasable            IOPORT      Port read and write
        DA          Dual access         SARAM       Single access RAM
        ASn         Access size         DARAM       Dual access RAM
        SHnC        Shared              FLASH       Flash ROM
        CACHE       Cache               EXRAM       External RAM
        TX          Text                EXROM       External ROM
        MN          Monitor             EPROM       Erasable write-able EPROM
        SA          Single access       MONITOR     Monitor ROM
        FL          Flash               PRAM        Program RAM
        MR          Memory mapped       PROM        Program ROM
        NULL        NULL                NULL        NULL
        */
        GEL_MapAddStr(0x00000000, 0, 0x00100000, "R", 0);  /* Flash */
        GEL_MapAddStr(0x01000000, 0, 0x00008c00, "R", 0);  /* ROM */
        GEL_MapAddStr(0x20000000, 0, 0x00040000, "R|W", 0);  /* SRAM */
        GEL_MapAddStr(0x40000000, 0, 0x00001000, "R|W", 0);  /* WATCHDOG0 */
        GEL_MapAddStr(0x40001000, 0, 0x00001000, "R|W", 0);  /* WATCHDOG1 */
        GEL_MapAddStr(0x40008000, 0, 0x00001000, "R|W", 0);  /* SSI0 */
        GEL_MapAddStr(0x40009000, 0, 0x00001000, "R|W", 0);  /* SSI1 */
        GEL_MapAddStr(0x4000A000, 0, 0x00001000, "R|W", 0);  /* SSI2 */
        GEL_MapAddStr(0x4000B000, 0, 0x00001000, "R|W", 0);  /* SSI3 */
        GEL_MapAddStr(0x4000C000, 0, 0x00001000, "R|W", 0);  /* UART0 */
        GEL_MapAddStr(0x4000D000, 0, 0x00001000, "R|W", 0);  /* UART1 */
        GEL_MapAddStr(0x4000E000, 0, 0x00001000, "R|W", 0);  /* UART2 */
        GEL_MapAddStr(0x4000F000, 0, 0x00001000, "R|W", 0);  /* UART3 */
        GEL_MapAddStr(0x40010000, 0, 0x00001000, "R|W", 0);  /* UART4 */
        GEL_MapAddStr(0x40011000, 0, 0x00001000, "R|W", 0);  /* UART5 */
        GEL_MapAddStr(0x40012000, 0, 0x00001000, "R|W", 0);  /* UART6 */
        GEL_MapAddStr(0x40013000, 0, 0x00001000, "R|W", 0);  /* UART7 */
        GEL_MapAddStr(0x40020000, 0, 0x00001000, "R|W", 0);  /* I2C0 */
        GEL_MapAddStr(0x40021000, 0, 0x00001000, "R|W", 0);  /* I2C1 */
        GEL_MapAddStr(0x40022000, 0, 0x00001000, "R|W", 0);  /* I2C2 */
        GEL_MapAddStr(0x40023000, 0, 0x00001000, "R|W", 0);  /* I2C3 */
        GEL_MapAddStr(0x40028000, 0, 0x00001000, "R|W", 0);  /* PWM0 */
        GEL_MapAddStr(0x4002C000, 0, 0x00001000, "R|W", 0);  /* QEI0 */
        GEL_MapAddStr(0x40030000, 0, 0x00001000, "R|W", 0);  /* TIMER0 */
        GEL_MapAddStr(0x40031000, 0, 0x00001000, "R|W", 0);  /* TIMER1 */
        GEL_MapAddStr(0x40032000, 0, 0x00001000, "R|W", 0);  /* TIMER2 */
        GEL_MapAddStr(0x40033000, 0, 0x00001000, "R|W", 0);  /* TIMER3 */
        GEL_MapAddStr(0x40034000, 0, 0x00001000, "R|W", 0);  /* TIMER4 */
        GEL_MapAddStr(0x40035000, 0, 0x00001000, "R|W", 0);  /* TIMER5 */
        GEL_MapAddStr(0x40038000, 0, 0x00001000, "R|W", 0);  /* ADC0 */
        GEL_MapAddStr(0x40039000, 0, 0x00001000, "R|W", 0);  /* ADC1 */
        GEL_MapAddStr(0x4003C000, 0, 0x00001000, "R|W", 0);  /* COMP */
        GEL_MapAddStr(0x40040000, 0, 0x00001000, "R|W", 0);  /* CAN0 */
        GEL_MapAddStr(0x40041000, 0, 0x00001000, "R|W", 0);  /* CAN1 */
        GEL_MapAddStr(0x40050000, 0, 0x00001000, "R|W", 0);  /* USB0 */
        GEL_MapAddStr(0x40058000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTA AHB */
        GEL_MapAddStr(0x40059000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTB AHB */
        GEL_MapAddStr(0x4005A000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTC AHB */
        GEL_MapAddStr(0x4005B000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTD AHB */
        GEL_MapAddStr(0x4005C000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTE AHB */
        GEL_MapAddStr(0x4005D000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTF AHB */
        GEL_MapAddStr(0x4005E000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTG AHB */
        GEL_MapAddStr(0x4005F000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTH AHB */
        GEL_MapAddStr(0x40060000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTJ AHB */
        GEL_MapAddStr(0x40061000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTK */
        GEL_MapAddStr(0x40062000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTL */
        GEL_MapAddStr(0x40063000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTM */
        GEL_MapAddStr(0x40064000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTN */
        GEL_MapAddStr(0x40065000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTP */
        GEL_MapAddStr(0x40066000, 0, 0x00001000, "R|W", 0);  /* GPIO PORTQ */
        GEL_MapAddStr(0x400AF000, 0, 0x00001000, "R|W", 0);  /* EEPROM */
        GEL_MapAddStr(0x400B8000, 0, 0x00001000, "R|W", 0);  /* I2C8 */
        GEL_MapAddStr(0x400B9000, 0, 0x00001000, "R|W", 0);  /* I2C9 */
        GEL_MapAddStr(0x400C0000, 0, 0x00001000, "R|W", 0);  /* I2C4 */
        GEL_MapAddStr(0x400C1000, 0, 0x00001000, "R|W", 0);  /* I2C5 */
        GEL_MapAddStr(0x400C2000, 0, 0x00001000, "R|W", 0);  /* I2C6 */
        GEL_MapAddStr(0x400C3000, 0, 0x00001000, "R|W", 0);  /* I2C7 */
        GEL_MapAddStr(0x400D0000, 0, 0x00001000, "R|W", 0);  /* EPI0 */
        GEL_MapAddStr(0x400E0000, 0, 0x00001000, "R|W", 0);  /* TIMER6 */
        GEL_MapAddStr(0x400E1000, 0, 0x00001000, "R|W", 0);  /* TIMER7 */
        GEL_MapAddStr(0x400EC000, 0, 0x00001000, "R|W", 0);  /* EMAC0 */
        GEL_MapAddStr(0x400F9000, 0, 0x00001000, "R|W", 0);  /* SYSEXC */
        GEL_MapAddStr(0x400FC000, 0, 0x00001000, "R|W", 0);  /* HIB */
        GEL_MapAddStr(0x400FD000, 0, 0x00001000, "R|W", 0);  /* FLASH CTRL */
        GEL_MapAddStr(0x400FE000, 0, 0x00001000, "R|W", 0);  /* SYSCTL */
        GEL_MapAddStr(0x400FF000, 0, 0x00001000, "R|W", 0);  /* UDMA */
        GEL_MapAddStr(0x44030000, 0, 0x00001000, "R|W", 0);  /* CCM0 */
        GEL_MapAddStr(0xE000E000, 0, 0x00001000, "R|W", 0);  /* NVIC */
        GEL_TextOut("\nMemory Map Initialization Complete\n");
    这里没有说明中断向量表应该映射的位置,所以才上来问问大家,我不确定中断向量表映射到    GEL_MapAddStr(0x20000000, 0, 0x00040000, "R|W", 0);  /* SRAM */这里行不行?
  • 这是基于 Cortex-M4F 处理器设计的,你可以查看Cortex-M4F中的向量表部分,向量表是被固定的,不能随意更改。M3应该是整个地址空间的底部开始的,M4应该也是吧。