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/MSP432P401R:MSP432

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/748173/ccs-msp432p401r-msp432

器件型号:MSP432P401R

工具/软件:Code Composer Studio

我想使用 HFXTL 振荡器从 SMCLK 中生成48MHz、我将用于 I2C 时钟。 我不确定初始化例程是否正确。 是否有人能指出在执行例行程序时出现的任何错误。 请注意、我没有使用任何低功耗模式:

void clock_setup(){

CS->KEY = CS_KEY_VAL;//Enter the CS key to unlock the registers
CS->CTL1 = CS_CTL1_SELS __HFXTCLK;//选择 HFXTCLK 作为 SMCLK 的源
CS->CTL2 = CS_CTL2_HFXT_EN | CS_CTL2_HFXTFREQ_6;//打开 HFXT 振荡器,无论是否用作时钟资源、40 - 48 MHz 时钟,
while (!(CS->STAT 和 CS_STAT_SMCLK_READY));//等待 SMCLK 稳定

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

    TI 提供的 driverlib 负责器件设置所需的大多数初始化函数。 在下面、您可以看到该库中的 HFXT 启动函数作为参考、以便进行比较。

    通常、使用 driverlib 可以简化许多工作、节省时间和开发工作量。 其他信息可在此处找到:

    http://dev.ti.com/tirex/#/?link=Software%2FSimpleLink%20MSP432P4%20SDK%2FDocuments%2FDriverLib

    bool CS_startLFXTWithTimeout (uint32_t xtDrive、uint32_t timeout)
    {
    uint8_t bNMStatus;
    bool boolBypassMode、boolTimeout;
    
    assert (lfxtFreq!= 0)
    assert()
    (xtDrive = CS_LFXT_Drive0)||(xtDrive = CS_LFXT_Drive1)
    ||(xtDrive == CS_LFXT_drive2)
    ||(xtDrive == CS_LFXT_DRIVE3)
    ||(xtDrive == CS_LFXT_BYPASS);
    
    /*解锁 CS 模块*/
    CS->KEY = CS_KEY;
    
    //
    #ifdef __MCU_HAS_SYSCTL_A__为 UCS 故障保存状态并暂时禁用 NMI
    bNMIStatus = SYSCTL_A_getNMISSourcedStatus ()& SYSCTL_A_CS_SRC;
    SYSCTL_A_disableNMISSOURCE (SYSCTL_A_CS_SRC);
    #else
    bNMIStatus = SYSCTL_getNMISSourcedStatus()& SYSCTL_CS_SRC;
    SYSCTL_DisableNMISSource (SYSCTL_CS_SRC);
    #endif
    BoolBypassMode =(xtDrive == CS_LFXT_BYPASS)? true:false;
    boolTimeout =(超时=0)? false:true;
    
    /*设置为最大驱动强度*/
    IF (波洛旁路模式)
    {
    BITBAND_PERI (CS->CTL2、CS_CTL2_LFXTBYPASS)= 1;
    } 其他
    {
    CS->CTL2 |=(CS_LFXT_DRIVE3);
    BITBAND_PERI (CS->CTL2、CS_CTL2_LFXTBYPASS)= 0;
    }
    
    /*等待频率稳定*/
    BITBAND_PERI (CS->CTL2、CS_CTL2_LFXT_EN_OFS)= 1;
    
    while (BITBAND_peri (CS->IFG、CS_IFG_LFXTIFG_OFS))
    {
    if (boolTimeout &&(--timeout)=0))
    中断;
    
    BITBAND_PERI (CS->CLRIFG、CS_CLRIFG_CLR_LFXTIFG_OFS)= 1;
    }
    
    /*设置驱动强度*/
    如果(!boolBypassMode)
    {
    CS->CTL2 =(((CS->CTL2 &~CS_LFXT_DRIVE3)| xtDrive);
    }
    
    /*锁定模块*/
    BITBAND_PERI (CS->KEY、CS_KEY_OFS)= 1;
    
    //启用 NMI 状态*/
    #ifdef __MCU_HAS_SYSCTL_A__
    SYSCTL_A_enableNMISSOURCE (bNMIStatus);
    #else
    SYSCTL_enableNMISSOURCE (bNMIStatus);
    #endif
    
    if (boolTimeout && timeout =0)
    返回 false;
    
    返回 true;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另一个注意事项:
    while (!(CS->STAT 和 CS_STAT_SMCLK_READY));//等待 SMCLK 稳定
    时钟是否在分频器变化后稳定、
    不是检查 HF XTAL 是否已启动并稳定的正确方法。

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

    您可以解决您的问题吗? 如果是、请为解决您的问题的帖子选择"已解决"、以便关闭此主题。 如果您有其他问题、请选择"提出相关问题"或"提出新问题"。
    非常感谢!

    此致、
    Stefan