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.

[参考译文] TM4C123GH6PM:如何修改主程序中的中断矢量表地址?

Guru**** 2484615 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/732432/tm4c123gh6pm-how-to-modify-the-interrupt-vector-table-address-in-the-main-program

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C123DK-TM4C123G

大家好、:

我的项目使用引导加载程序和带有 ucosIII 的应用程序。  引导加载程序我将其存储在闪存0x0 -0x7fff 中。  我的应用程序存储在0x8000中。

但是、引导加载程序跳转到应用程序条目地址后、应用程序无法运行。 我来看一些相关示例。

有一个提示、我需要在主程序的入口设置中断矢量表地址。

例如、MSP430: SCB->VTOR = FLASH_BASE | 0x10000;

例如、STM32:  NVIC_SetVectorTable (NVIC_VectTAB_FLASH、0x8000);

TM4C123是否有类似的方法让我在应用中设置中断矢量表地址? 非常感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 TivaWare 引导加载程序示例中、这是在调用应用程序之前在引导加载程序中完成的。 请参阅项目"C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\dk-tm4c123g\boot_serial"。 在汇编语言文件"BL_STARTUP_CCS.s"的第331到396行中、您会看到引导加载程序在调用新应用程序之前复制矢量表。 项目"C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\dk-tm4c123g\boot_demo1"是从引导加载程序调用的示例应用程序。 请注意、它会创建一个普通矢量表、但在链接命令文件"boot_demo1_ccs.cmd"中、".intvecs"段会映射到应用程序基址、而不是映射到地址0。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。

    在您的提示下、我复制了 BL_STARTUP_CCS 中的代码。 将中断矢量表设置为 statup。 c 在 uCOS III 项目中。

    并修改中断矢量表地址、即存储在闪存0x8000中的中断矢量。 UCOSIII 可以运行、我会继续测试、我希望不会出现异常情况。 我修改的代码如下所示:

    CPU_VECTOR 表存储
    MOVw r0、#(0x8000 & 0xFFFF)
    MOVw R1、#(0xE000ED08和0xFFFF)
    MOVt R1、#(0xE000ED08 >> 16)
    结构 R0、[R1]

    LDR SP、[r0]
    LDR R0、[r0、#4]
    BX LR

    静态空 App_Reset_ISR (空)

    cpu_vector_table_store ();

    #if __ARMVFP__ /*启用对浮点协处理器的访问。 *

    HWREG (NVIC_CPAC)=((HWREG (NVIC_CPAC)&
    ~(NVIC_CPAC_CP10_M | NVIC_CPAC_CP11_M)|
    NVIC_CPAC_CP10_FULL | NVIC_CPAC_CP11_FULL);

    DEF_BIT_CLR (CPU_REG_SCB_FPCCR、DEF_BIT_31); /*禁用自动 FP 寄存器内容 *
    DEF_BIT_CLR (CPU_REG_SCB_FPCCR、DEF_BIT_30); /*禁用怠惰上下文切换 *
    #endif


    _IAR_program_start();