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.

[参考译文] MSP430FR5969:配置外部时钟

Guru**** 2539500 points
Other Parts Discussed in Thread: MSP430FR5969

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/904485/msp430fr5969-configure-external-clock

器件型号:MSP430FR5969

各位专家、您好!

在 MSP430FR5969中、我们是否有任何将外部时钟配置为1MHz 的示例代码? 如果是、请提供该链接。

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

    Manish、您好!

    您可以在 TI 经销商资源管理器中找到此特定器件的示例

    在指向示例的链接下:

    链接

    另请查看此器件的其他 CS 示例以了解更多信息。

    根据您的外部时钟、您可以使用时钟分频器 生成目标1MHz。

    UG 上的图3-1 给出了 CS 模块的良好概述。

    谢谢

    此致

    Kostas

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

    Kostas、您好!

    感谢以上链接。 在数据表中、我们可以将 P1.2 用于 TA0CLK、但当我将 P1.2配置为输入方向并将时钟源设置为 TACLK 时、它不会捕获输入、您可以看到我的配置并让我知道错误。

    void timer_init()

     CSCTL0_H = CSKEY >> 8;                   //解锁 CS 寄存器
     CSCTL1 = DCOFSEL_6;                      //将 DCO 设置为8MHz
     CSCTL2 = SELA_LFXTCLK | SELS__HFXTCLK | SELM_DCOCLK;
     CSCTL3 = DIVA__1 | DIVM_1 | DIVM__1;    //将所有分频器设置为1
     CSCTL4 |= LFXTDRIVE_3 | HFXTDRIVE_3;
     CSCTL4 &=~(LFXTOFF | HFXTOFF);
     操作
     {
       CSCTL5 &=~(LFXTOFFG | HFXTOFFG);      //清除 XT1和 XT2故障标志
       SFRIFG1 &=~OFIFG;
     } while (SFRIFG1&OFIFG);                  //测试振荡器故障标志
     CSCTL0_H = 0;


    int main (空)

     WDTCTL = WDTPW | WDTHOLD;                //停止 WDT

    //配置 GPIO
     P1OUT = 0;
     P1DIR = BIT0;                            //表示 LED
     
     P1DIR &=~BIT2;                    // P1.2输入方向
     P1SEL0 |= BIT2;
     P1SEL1 &=~BIT2;

     P2DIR |= BIT0;
     P2SEL0 |= BIT0;                          //输出 ACLK
     P2SEL1 |= BIT0;

     P3DIR |= BIT4;
     P3SEL0 |= BIT4;                          //输出 SMCLK
     P3SEL1 |= BIT4;

     PJSEL0 |= BIT4 | BIT5 | BIT6 | BIT4;     //用于 XT1和 XT2

     //禁用 GPIO 上电默认高阻抗模式以激活
     //先前配置的端口设置
     PM5CTL0 &=~LOCKLPM5;

     timer_init();

     TA0CCTL2 = CM_1 | CCIS_1 | SCS | CAP | CCIE;
                                               //捕获上升沿,
                                               //使用 CCI2B=ACLK、
                                               //同步捕捉,
                                               //启用捕获模式,
                                               //启用捕捉中断

     TA0CTL = tassel_TACLK; //使用 TACLK 作为时钟源、
                                               //在连续模式中启动计时器
     
     _bis_SR_register (LPM0_bits | GIE);      //输入 LPM3、带中断
    // while (1)
    //   __no_operation();

    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector = TIMER0_A1_vector
    _interrupt void Timer0_A1_ISR (void)
    #Elif defined (_GNU_)
    void __attribute__((中断(TIMER0_A1_vector)) Timer0_A1_ISR (void)
    其他
    错误编译器不受支持!
    #endif

     switch (__evo_in_range (TA0IV、TA0IV_TAIFG)){
       案例 TA0IV_TA0CCR1:
         中断;
       案例 TA0IV_TA0CCR2:
         timerAcaptureValues[timerAcapturePointer++]= TA0CCR2;
         //count1++;
         中断;
       案例 TA0IV_TA0IFG:
         中断;
       默认值:
         中断;
     }

    您能不能说为什么在上升沿到来时我没有收到计时器中断?

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

     > 您是否正在使用 Launchpad? 在交付时、高频晶振(Y1)未被组装。 您的程序是否可能一直等待(永远) HFXT 启动?

    具体而言:如果您在调试器中暂停、您的程序在哪里执行?

    [编辑:我忘了提一下:您没有设置 TA0CTL MC 字段、因此计时器不在计数。 您仍然应该获得捕获(因为它们由 ACLK 驱动)、但它们都将为=0。]

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

    您好、Bruce、

    正如您在这里提到的、如果您暂停在调试器中、您的程序在哪里执行? 我的程序正在执行、但当它处于低功耗模式时会发生什么情况。我的程序仅执行此语句

    _bis_SR_register (LPM0_bits | GIE);

    是的、感谢您刚才提到的设置 TA0CTL MC feild 的建议、因此、我将设置该 feild、并告诉您我是否能够捕获。

    编辑:[您之前提到过、您仍应获取捕获(因为它们由 ACLK 驱动)、但它们都将为=0。 您能解释一下、如果它由 ACLK 驱动、为什么我应该得到0。]

    编辑2:[TA0CTL = tassel_TACLK;因此我需要选择哪种模式我有点困惑]

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

    大家好、可以不能向我推荐任何建议?

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

    Manish、您好!

    让我们尝试清除该主题、您能告诉我们您想要做什么以及有哪些问题、这将有助于理解上述代码。

    我知道我们有来自前一个主题的一些信息、但让我们在这里总结一下要求。

    请告诉我们:

    -项目概念的简短描述,可能还有您计划使用的引脚。

    -也是对上述有关您使用的硬件的问题的回答。

    我们随时准备为您提供支持。

    等待您的回复

    谢谢

    Kostas

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

    Kostas、您好!

    代码的目的是使用两个计时器一个计时器用于计数500ms、另一个计时器用于从端口1.2捕获输入未知频率。 但我们需要捕获两个计数之间的差异并找出外部频率。 正如您从先前的线程中所知、但我们无法获得准确的频率。 与之前的代码相同的概念、但这次第二个计时器应该使用时钟作为计时器时钟。 那么、这是实际的 scnerio。

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

    mc__continuous 可能是一个合理的选择。

    ----------

    >P1SEL0 |= BIT2;
    > P1SEL1 &=~BIT2;

    根据数据表(SLAS704G)表6-49、这不会选择 TA0CLK。 尝试:

    根据 SLAS704G 表6-49、> P1SEL0 &=~BIT2;// P1.2作为 TA0CLK
    > P1SEL1 |= BIT2;

    ----------

    这两个都不会阻止从 ACLK (CCIS=1)捕获数据。 您如何知道您没有获得捕获? 是否在 ISR 中设置断点? 还是查看捕获阵列?

    ----------

    正如 Kostas 不断问的:您使用的平台是什么?

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

    > TA0CCTL2 = CM_1 | CCIS_1 | SCS | CAP | CCIE;

    删除此处的 SCS。 如果定时器没有主动计数、它没有与之同步的边沿(ACLK)、所以它不会捕获。 必然结果是、如果您尝试测量低于32kHz 的频率、您将丢失捕获并计算错误的结果。  例如、尝试:

    > TA0CCTL2 = CM_1 | CCIS_1 | CAP | CCIE;

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

    Kostas 和 Bruce、大家好、

    我使用的是 Launchpad、很抱歉、我在上一篇帖子中忘记了这一点。 感谢您的建议、我将尝试您在上述帖子中所说的内容。

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

    Hallo Manish、

    感谢您提供信息。 我也在使用该板。

    遗憾的是、我无法测试电路板、正如 Bruce 所说的、HF XT 未组装在电路板上(C4)

    我将尝试更新板(在家工作并不容易)

    此致

    Kostas

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

    Manish、您好!

    我正在研究一个解决方案。

    您能否通过以下方式单独替换您的 TA0CTL:

     TA0CTL = tassel_TACLK | MC__Continous | TAIE

    在测试中、我已经离开 HFTX、只将 LFTX 用于 ACLK。 我将 SMCLK 设置为 DCO。

    通过更改 TA0CLK (P1.2)频率、我可以跳转到 ISR 并检测预期计数。

    如果我有更多信息、我会回来的

    此致

    Kostas

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

    Kostas、您好!

    非常感谢您的努力将有助于您在上述帖子中所述的内容。

    谢谢

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

    Manish、您好!

    自从我们上次沟通以来已经有一段时间了。

    状态是否有更新? 您能解决这个问题。

    谢谢

    此致

    Kostas

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

    Kostas、您好!

    我对延迟响应进行了拓扑、它得到了解决。 非常感谢您的支持。