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.

[参考译文] MSP432E411Y:如何在 main()函数之前实现外设初始化过程

Guru**** 2511415 points
Other Parts Discussed in Thread: MSP432E411Y

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1181729/msp432e411y-how-to-implement-peripheral-initialization-process-before-main-function

器件型号:MSP432E411Y

您好!

目前、我们要将全局变量等存储器区域分配给安装在定制板上的外部 SRAM 并加以实现。

由于全局变量等被分配给外部 SRAM、在执行段初始化处理之前(在主函数之前)、有必要执行以下初始化处理、例如外部总线接口。

在使用 TI-RTOS 的项目中,您能告诉我如何在 main()函数之前实现外设初始化处理,例如 EPI 函数吗? 我使用的代码如下所示。

simplelink_msp432e4_sdk_4_20_00_12\examples\rtos\MSP432E411Y_BGAEVM\drivers\gpiointerrupt

谢谢、

Astro

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

    您好!

      我认为可以在 main 之前添加一些用户提供的函数、但我不知道如何操作。 以下是您可以查看的文档。  

      https://www.ti.com/lit/pdf/spruex3 -请参阅第3.1节

      https://www.ti.com/lit/ug/spruex4/spruex4.pdf -请参阅 XDC 引导顺序和控制点

     我还认为你可以在 main()之后执行它。  

     第一个主函数将调用 Board_init()。 Board_init()调用 Board_initHook()。 您可以使用 Board_initHook()函数来初始化 EPI 模块。  

    /*
     *  ======== Board_initHook ========
     *  Perform any board-specific initialization needed at startup.  This
     *  function is declared weak to allow applications to override it if needed.
     */
    void __attribute__((weak)) Board_initHook(void)
    {
    }
    
    /*
     *  ======== Board_init ========
     *  Perform any initialization needed before using any board APIs
     */
    void Board_init(void)
    {
        /* ==== /ti/drivers/Power initialization ==== */
        Power_init();
    
        /* Grant the DMA access to all FLASH memory */
        FLASH_CTRL->PP |= FLASH_PP_DFA;
    
        /* Region start address - match FLASH start address */
        FLASH_CTRL->DMAST = 0x00000000;
    
        /*
         * Access to FLASH is granted to the DMA in 2KB regions.  The value
         * assigned to DMASZ is the amount of 2KB regions to which the DMA will
         * have access.  The value can be determined via the following:
         *     2 * (num_regions + 1) KB
         *
         * To grant full access to entire 1MB of FLASH:
         *     2 * (511 + 1) KB = 1024 KB (1 MB)
         */
        FLASH_CTRL->DMASZ = 511;
    
        Board_initHook();
    }

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

    您好!

    我想将变量、堆栈和堆的存储器区域从内部 SRAM 更改为外部 SRAM。 我的理解是全局变量等的初始化在 c_int00()中完成。 如果是,是否确定要在 Board_initHook()中初始化 EPI 模块?

    还是不建议在外部 SRAM 中分配全局变量?

    谢谢、

    Astro

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

    尊敬的 Astro:

     是的、我同意不建议将全局变量分配给外部 SRAM。 首先、您需要配置链接器以将全局变量放置在映射到外部 SRAM 地址的段中。 您还需要在全局变量初始化发生之前初始化 EPI。 全局变量初始化恰好发生在_c_init00()中,我不知道。 我担心对代码的黑客攻击太多。 EPI 配置(例如时钟、等待状态)还需要系统时钟的定义和稳定状态。  这意味着 EPI 初始化需要在定义系统时钟之前以及全局变量初始化之前进行。 我只是觉得、如果您将全局变量保留在内部 SRAM 中、会容易得多。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="465179" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1181729/msp432e411y-how-to-implement-peripheral-initialization-process-before-main-function "]由于全局变量等已分配给外部 SRAM,因此必须在执行段初始化处理(在主函数之前)之前实施以下初始化处理,例如外部总线接口。

    RTOS/MSP432E401Y:SDRAM 默认堆 具有一些有关如何注册 xdc.runtime.Startup 函数的信息、该函数在 main 之前调用。

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

    切斯特、您好!

     谢谢! 我自己学到了一些有关如何实现这一目标的新知识。  

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

    大家好、Chester、Charles

    是否可以通过在 xdc.runtime.Startup 函数中初始化外部总线接口将全局变量等存储在外部 SRAM 中? 此外、我想知道 xdc.runtime.Startup 函数在示例项目中的调用位置。

    谢谢、

    Astro

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

    您好!

    你有更新吗?

    谢谢、

    Astro

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

    尊敬的 Astro:

     抱歉,我不知道在 调用 main()之前使用 XDC 来初始化 EPI 或任何模块。 我不知道 Chester 或论坛上的其他人以前是否曾尝试过。 我认为此网页可能有用。  https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/sysbios/6_53_02_00/exports/bios_6_53_02_00/docs/cdoc/xdc/runtime/Startup.html

    示例
    以下代码显示了如何将自定义启动函数添加到此模块。
    VAR 启动= xdc.useModule('xdc.runtime.Startup');
    startup.resetFxn ="&myResetFxn";
    startup.firstFxns[Startup.firstFxns.length++]="&myFirst";
    startup.lastFxns[Startup.lastFxns.length++]="&myLast";