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.

[参考译文] RTOS/MSP432P401R:如何在 TI-RTOS 中使用48MHz 外部晶体?

Guru**** 2558250 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/600197/rtos-msp432p401r-how-to-use-external-crystal-48mhz-in-ti-rtos

器件型号:MSP432P401R
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

:MSP430P401R

:CCS 7.1.0.00016

:MSP-EXP432P401R -版本2.x (红色),适用于 MSP430 V2.20.00.06的 TI-RTOS

: SimpleLink MSP432 SDK V1.30.00.40

您好!

我正在尝试在我的应用中使用48MHz 晶体。

我从导入了项目"cs_hfxt_start_MSP_EXP432P401R_nortos_ccs"

完美!!!

但我不知道如何在 TI-RTOS 中执行此操作。

在线程中(https://e2e.ti.com/support/embedded/tirtos/f/355/t/505658

我从导入一个空项目

并在 empty.cfg 中添加以下代码

VAR 计时器= xdc.useModule('ti.sysbios.family.arm.msp432.Timer');
Timer.intFreq.hi = 0;
Timer.intFreq.lo = 48000000;

VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
bios.cpufreq.hi = 0;
bios.cpufreq.lo = 48000000;

我收到一个错误、显示"ti.sysbios.family.arm.msp432.Timer: no property named 'intFreq"

问题1. 外部晶体和 DCO、哪个现在在 MCLK 和 SMCLK 上工作? 如何证明?

问题2. 如何将 MCLK/SMCLK 源设置为外部晶振?

任何回答都很有帮助、感谢您花时间阅读此帖子。

是的

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

    YHH、

     在 TI-RTOS / TI 驱动程序中、MCLK/HSMCLK 不像您引用的 driverlib 示例中那样直接受到控制。 而是这些设置

    使用 Power_setPerformanceLevel() API 函数进行修改。  您可以从下面列出的4个性能级别中进行选择。 在这里

    如果您希望级别=3、

    *电平 MCLK (MHz) HSMCLK (MHz) SMCLK (MHz) ACLK (Hz)
    *---- ------ ------ ------ ------
    * 0   12         3            3      32768
    * 1   24         6                  6 32768
    * 2   48         24            12      32768
    * 3   48         48            24      32768

    您可以在 TI Resource Explorer中找到有关此功能和其他电源 API 函数的文档。 TI 驱动程序 API 文档位于:

    软件-> SimpleLink MSP432 SDK ->文档->驱动程序-> TI 驱动程序运行时 API (doxygen) 和 TI 驱动程序电源管理

    对于 Power_setPerformanceLevel() API,仅支持 DCO 时钟源。  您必须使用 driverlib 调用

    从您参考的示例中、您可以将其更改为外部晶体。

    来自 cs_hfxt_start.c 示例的代码、用于设置 MCLK 的时钟源。

    /*将 MCLK 初始化为 HFXT (有效48MHz)*/
    MAP_CS_initClockSignal (CS_MCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_1);

    此处请注意、使用 CS_HFXTCLK_SELECT 将 MCLK 设置为使用外部晶体。

    此致、

     Bob

     

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

    尊敬的 Bob:

    我根据您的意见进行一些测试。

    A)

    下面是我修改并添加了 driverlib 的 uartecho 示例(SimpleLink MSP432 SDK/TI 驱动程序/uartecho/TI-RTOS/)。

    uartecho.c

    /* DriverLib 包括*/
    #include 
    
    /*
    === uartecho.c ====
    */
    #include 
    #include 
    
    /*驱动程序头文件*/
    #include 
    #include 
    
    /*示例/板头文件*/
    #include "Board.h"
    
    /*
    === mainThread ====
    //
    void * mainThread (void * arg0)
    {
    特性 输入;
    const char echoPrompt[]="回显字符:\r\n";
    UART_Handle UART;
    UART_Params uartParams;
    
    /*停止看门狗*/
    MAP_WDT_A_HOLDTimer();
    
    /*为外设/晶体使用配置引脚、为输出配置 LED */
    MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_PJ、
    GPIO_PIN3 | GPIO_PIN2、GPIO_PRIMARY_MODULE_FUNCTION);
    MAP_GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN4);
    
    /*以防用户想要使用 getACLK、getMCLK 等函数、
    *让我们在代码中设置时钟频率。
    *
    cs_setExternalClockSourceFrequency (32000、48000000);
    
    /*在非旁路模式下启动 HFXT 而不超时。 开始之前
    *我们必须将 VCORE 更改为1以支持48MHz 频率*/
    MAP_PCM_setCoreVoltageLevel (PCM_VCORE1);
    MAP_FlashCtl_setWaitState (FLASH_BANK0、2);
    MAP_FlashCtl_setWaitState (FLASH_BANK1、2);
    CS_startHFXT (false);
    
    /*将 MCLK 初始化为 HFXT (有效48MHz)*/
    MAP_CS_initClockSignal (CS_MCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_1);
    MAP_CS_initClockSignal (CS_HSMCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_1);
    MAP_CS_initClockSignal (CS_SMCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_2);
    
    /*调用驱动程序初始化函数*/
    //GPIO_init();
    UART_INIT();
    
    /*打开用户 LED */
    //GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);
    
    /*创建一个数据处理关闭的 UART。 *
    UART_PARAMS_INIT (uartParams);
    uartParams.writeDataMode = UART_DATA_BINARY;
    uartParams.readDataMode = UART_DATA_BINARY;
    uartParams.readReturnMode = UART_return_full;
    uartParams.readEcho = UART_ECHO_OFF;
    uartParams.baudrate = 115200;
    
    UART = UART_OPEN (Board_UART0、uartParams);
    
    if (UART == NULL){
    /* UART_open()失败*/
    while (1);
    }
    
    UART_WRITE (UART、echoPrompt、sizeof (echoPrompt));
    
    /*循环永久回显*/
    while (1){
    UART_READ (UART、INPUT、1);
    UART_WRITE (UART、INPUT、1);
    }
    }
    

    B)

    *电平 MCLK (MHz) HSMCLK (MHz) SMCLK (MHz) ACLK (Hz)
    *---- ------ ------ ------ ------
    * 0      12.            3.               3.            32768
    * 1.      24            6.               6.            32768
    * 2.      48           24             12.            32768
    * 3.      48           48             24            32768

    根据以下设置、我获得了 UART0的正确响应。

    1.在 MSP_EXP432P401R.c 中设置".initialPerfLevel = 3"

    MAP_CS_initClockSignal (CS_MCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_1);
    MAP_CS_initClockSignal (CS_HSMCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_1);
    MAP_CS_initClockSignal (CS_SMCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_2);

    2.在 MSP_EXP432P401R.c 中设置".initialPerfLevel = 2"

    MAP_CS_initClockSignal (CS_MCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_1);
    MAP_CS_initClockSignal (CS_HSMCLK、CS_HFXTCLK_SELECT、CS_CLOCK 分频器_2);
    MAP_CS_initClockSignal (CS_SMCLK、CS_HFXTCLK_SELECT、CS_CLOCK_DEVIDER_4);

    C)我想答案是...

    使用不同的 DCO 频率

      1.a -通过 MSP_EXP432P401R.c 中的".initialPerfLevel = X"设置所需的频率

    2.使用48MHz 外部晶振  

      2.a -通过 MAP_CS_initClockSignal ()设置外部晶体

      2.b -在   MSP_EXP432P401R.c 中设置正确频率".initialPerfLevel = X"

    正确吗?

    *我正在尝试找到显示当前 MCLK/HSMCLK/SMCLK 频率的方法。

    D)

    如何使用列表中未列出的不同频率晶体? (例如8MHz/16MHz)

    此致、

    是的