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.

[参考译文] CCS/TMS320F28335:用户能否在 TMS320F28335中重新映射 IRQ 矢量表?

Guru**** 2606725 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/681213/ccs-tms320f28335-can-user-re-map-irq-vector-table-in-tms320f28335

器件型号:TMS320F28335

工具/软件:Code Composer Studio

您好、先生、

我对矢量表有疑问。

如果有两个项目:引导加载程序(从闪存0x33FFF6开始)+应用程序(从整个闪存的中间扇区开始)。

引导加载程序和应用程序具有相同的 IRQ ISR。

我的问题是:

如何处理 IRQ 的矢量表?  是否需要重新映射矢量表? (作为 ARM7、Cortex-M3、它有矢量表重新映射寄存器来设置它。)

谢谢。

此致、

文森特

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

    文森特

    您无法重新映射中断矢量。  但您描述的情形将自行处理。  次级 引导加载程序和应用程序都是具有自己中断表的独立项目。  引导加载程序首先运行、并使用其中断表初始化 PIE RAM。  将控制权转移到应用程序后、应用程序将使用其中断表初始化 PIE RAM。

    此致、

    David

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

    尊敬的 David:

    感谢您的回答。

    因此,我的理解是:

    DSP28335 无法重新映射中断向量。  

    2. 在次级引导加载程序和应用程序中使用"InitPieVectTable();"来初始化它们自己的中断表。

       但如何 区分这两个矢量表?

       例如:(下面的地址只是一个示例,而不是实际地址)

        1) 1)次引导基址= 0x0000h; 应用程序基址= 0x6000h

        2) 2)次级引导和应用都具有 SCI 中断。  SCI 中断矢量表的实地址为0xFC (当 IRQ 发生时、第一个访问地址)。

        3) 3)在次级引导中: SCI ISR 路由条目地址= 0x1234。 (此地址由编译器编译)   

          因此 、闪存中地址0xFC 的数据:

              闪存地址   数据

              0xFC            0x12

              0xFD            0x34        

         4)在 APP 中:SCI ISR 路由入口地址= 0x789a (该地址由编译器编译,十六进制的应用数据应由升级函数传输并写入闪存)   

           地址0x60fc 的数据(如果有重映射函数)       数据

                0x60fc                                       0x78

                0x60fd                                       0x9a

          现在没有重映射函数、因此我不知道如何排列 ISR 路由条目地址。   

         当然,次引导不能使用 IRQ,请使用查询模式从 PC 接收数据。 但我的问题是:在没有矢量重映射功能时如何查找应用程序的 ISR 条目地址。

         我以前使用过没有矢量重映射功能的 TI MSP430,我的 MSP430解决方案是:

          1)在次引导中,不使用 IRQ,只使用查询模式。  

          2) 2)在次级引导中 、编写了一个汇编语句、强制 PC 跳转到地址0x60fc、以便在 PC 在应用程序中运行时出现 IRQ 时、它可以找到应用程序的正确 ISR 路由条目地址。

        我的问题是:

        a.如果我必须遵循 MSP430方法来处理 DSP 28335中的矢量表?

        b.处理向量表的任何其他解决方案,或者无需处理它,只需使用 InitPieVectTable()来初始化向量表? 或其他配置需要进行配置?

    谢谢。

    此致、

    文森特

     

       

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

    尊敬的 Vincent:

    这两个项目(引导加载程序和应用程序)中的每一个都是独立的 CCS 项目。  每个都有自己的 PIE 中断矢量、这些矢量指向自己的 ISR。  这些地址由链接器在工程编译时解析。  您无需在此处执行任何特殊操作。  一次只运行一个项目。  引导加载程序通常在复位后运行。  它将初始化 PIE 矢量、然后执行您希望执行的任何操作(例如、验证应用或将新应用下载到闪存)。  然后、它将控制权转移给应用程序。  有 e2e 帖子介绍了如何执行此操作、例如:

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/273790

    此时、应用程序将从头开始运行、并使用其矢量初始化 PIE 矢量。  引导加载程序不再运行。  如果需要运行引导加载程序、则必须将执行链接回引导加载程序的开头、此时 PIE 矢量再次使用引导加载程序矢量进行初始化。

    这样可以清除它吗?

    此致、

    David

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

    尊敬的 David:

    非常感谢您的专业响应。

    因为我以前没有使用 DSP、所以我的经验都基于 ARM7或 Cortex-MX、这是 DSP 的不同内核。  阅读您的响应并链接有关从引导到应用程序的主题后。  我正在评估升级设计,稍后将尝试此方法,可能会出现新问题,然后我认为需要创建新主题。  

    当前我只与您确认两点:

    关于 矢量表、我不需要在两个项目(次级引导+应用)中修改任何有关矢量表的内容。 我唯一需要做的就是为 secondary 引导和 app 分配不同的闪存扇区、对吧?

       处理该矢量表似乎非常简单。   是否有任何文档详细描述矢量表?   

    2. 您在链接线程中提到从引导跳转到应用程序是使用"asm (" lb 0x123456");"。 我的问题是我的应用程序大小是否大于一个闪存段,例如,应用程序大小>一个段大小,应用程序大小在 Flash_E + Flash_D 中 (从0x31 8000h 到0x32 7FFFh)。 在本例中、当从引导模式跳转到应用程序时、

    我需要使用:

    asm (" lb 0x327FFFE"); 、

    对吧?  跳转地址始终是应用项目最后一个闪存部分的最后两个字节?

    再次感谢您的帮助。

    此致、

    文森特   

     

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

    文森特

    [引用用户="Vincent Hu"]

    关于 矢量表、我不需要在两个项目(次级引导+应用)中修改任何有关矢量表的内容。 我唯一需要做的就是为 secondary 引导和 app 分配不同的闪存扇区、对吧?

    [/报价]

    正确。

    [引用用户="Vincent Hu"]

    2. 您在链接线程中提到从引导跳转到应用程序是使用"asm (" lb 0x123456");"。 我的问题是我的应用程序大小是否大于一个闪存段,例如,应用程序大小>一个段大小,应用程序大小在 Flash_E + Flash_D 中 (从0x31 8000h 到0x32 7FFFh)。 在本例中、当从引导模式跳转到应用程序时、

    我需要使用:

    asm (" lb 0x327FFFE"); 、

    对吧?  跳转地址始终是应用项目最后一个闪存部分的最后两个字节?

    [/报价]

    我想您是指0x327FFE。  是的、假设 您选择的硬地址是包含程序的闪存扇区的最后一个(最高寻址)字。  这是另一个 e2e 线程中的建议。  这里的想法只是为了使硬地址不受程序的影响。  通过使用包含程序的存储器的最后两个字、硬地址 LB 指令不会破坏程序使用的存储器。

    此致、

    David

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

    尊敬的 David:

    得到它、再次感谢。

    我稍后会尝试。

    BTW: 是否有描述 TI 矢量表的特殊文档?

    谢谢。

    此致、

    文森特

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

    尊敬的 Vincent:

    [引用用户="Vincent Hu"]

    BTW: 是否有描述 TI 矢量表的特殊文档?

    [/报价]

    系统控制用户指南 SPRUFB0中介绍了 PIE。

    此致、

    David

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

    尊敬的 David:

    非常感谢。

    BTW:TI 是否有任何可直接使用的 IAP 示例?  我知道,IAP 示例应包括:secondary 引导+ user_app 项目。

    此致、

    文森特

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

    文森特

    [引用用户="Vincent Hu"]

    TI 是否有任何可直接使用的 IAP 示例?  我知道,IAP 示例应包括:secondary 引导+ user_app 项目。

    [/报价]

    我不知道有这样的例子。  抱歉。

    戴维