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/MSP430FW427:MSP430FW427定时器有问题

Guru**** 665180 points
Other Parts Discussed in Thread: MSP430FW427, MSP430G2553, MSP430FW429
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/727043/ccs-msp430fw427-problem-with-msp430fw427-timer

器件型号:MSP430FW427
主题中讨论的其他器件: MSP430G2553

工具/软件:Code Composer Studio

你(们)好
我正在尝试使用 MSP430FW427中断计时器、但我在互联网上没有找到支持信息。 我找到的信息与 MSP430G2553或 F5529的定时器有关。
如果有人能帮助我提供有关如何管理计时器、如何计算时间以及如何调整时钟信号的信息或链接、我将不胜感激。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您访问 TI.com、然后在搜索框中键入您的器件型号、您将看到以下链接:
    www.ti.com/.../MSP430FW427

    页面顶部提供了用户指南(适用于 F4系列)和数据表(尤其适用于您的器件)。 您可能需要从"用户指南"中有关"计时器 A"的部分开始。

    "工具和软件"选项卡提供适合您的器件的可下载"代码示例"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您还可以在 TI Resource Explorer 中找到所有信息。 http://dev.ti.com/ti-rex

    在这里、您可以找到数据表、用户指南、勘误表以及代码示例等
    dev.ti.com/.../

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


    你(们)好

    感谢您的链接。 检查示例代码、但没有一个示例代码适用于我正在执行的操作。 您是否有任何代码或链接解释了如何在高频率下使用计时器? 问题是、在我看到的所有示例中、都基于32kHz 晶体、在我的示例中、我必须使用任何时钟源以至少10MHz 的频率进行中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    示例 fet410_TA_03.c 使用 SMCLK、它的运行速度与 CPU (MCLK)一样快。

    但是、使用8MHz CPU 时、您将无法成功地在10MHz 下中断。 如果您的程序不执行任何其他操作、您可能会在400kHz 频率下成功。

    根据输入表(数据表(SLA383E)第22页)、您也许能够对高达10MHz 的脉冲进行计数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    感谢您的回答。 我需要的是至少10MHz 的 MCLK 频率、因此我会中断到不同的时间段(周期因程序的执行而异)。 由于 CPU 必须执行的计算操作、我需要这个频率。 我的问题是:

    如何配置至少10MHz 的 MCLK 频率? 我知道如何使用 G2553或 F5529执行此操作、但头文件"msp430FW429.h"具有不同的声明。

    我如何使用该 MCLK 频率在中断周期内实现良好精度的中断? 也就是说、实现5us 或10us 相对准确。

    如何计算这些周期?

    我感谢您提供示例链接、这正是我所需要的。 我将更彻底地查看 fet410_TA_03.c 示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据"建议运行条件"表(数据表第19页)、最大 MCLK 为8MHz。 示例 fet410_fl_02.c 声明将 MCLK 设置为8MHz。

    即使你可以以10MHz 运行 FW427,你仍然不能以这个速率中断--这将允许1个 CPU 周期处理每个中断,在这里你可能估计至少20个 CPU 周期。

    如果您可以提供更多背景信息、也许这里的人会考虑另一种方法来执行您想要执行的操作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。


    你(们)好
    感谢您提供这些信息。 然后、我误解了数据表第31页上的表格。 我不知道 MCLK 的最大速度是8MHz。
    我将调整其余代码以移至8MHz。 我正在查看 Bruce McKenney47378提供给我的链接中的示例、其中所有示例都使用32kHz 信号(ACLK)作为 Timmer。 如何将 MCLK 的相同8MHz 频率用于时间?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    示例 fet410_TA_03.c 使用 SMCLK (1.048576MHz)、而不是 ACLK。 示例 fet410_cs_02.c 显示了如何将 DCO 设置为~8MHz。

    每个示例中的32kHz 晶体"要求"来自 FLL+时钟系统、该系统使用外部晶体来调优 DCO。 如果您没有这种晶体、则可能需要对 FLLD 值(可能还有"DCO "值)进行反转以获得8MHz。 似乎没有什么与(例如) G2553中的 CALDCO/BC1常数类似的东西。

    示例 fet410_cs_02.c 是一个开始位置。 [提示:由于您没有参考、我猜您将需要使用类似"__BIS_SR (SCG0);"参考用户指南 SLAU056L sec.8.2]的内容关闭 FLL

    是否可以在不更改 MCLK/SMCLK 的情况下执行某些应用? 在启动时、它的频率接近1MHz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、感谢大家的合作。

    使用此代码、中断的发生如示例所示、大约每33ms 进行一次。

    #include

    unsigned int alfa=0

    int main (空)

    WDTCTL = WDTPW + WDTHOLD;//停止 WDT
    SCFI0 |= FN_3;//设置 DCO 工作范围
    SCFQCTL = 121;//(121+1) x 32768 x 2 = 7.99MHz
    FLL_CTL0 = DCOPLUS + XCAP18PF;// DCO+设置为频率= xtal x D x N+1
    CCTL0 = CCIE;//启用 CCR0中断
    CCR0 = 1000 - 1;
    TACTL = tassel_1 + MC_1;// ACLK、向上计数模式
    _bis_SR_register (GIE); //中断使能
    。//algoritmo

    #pragma vector=TIMER0_A0_VECTOR
    _interrupt void Timer_A (void)

    Alfa++;


    使用此代码时、中断大约每3秒就会发生一次、但我不知道 CPU 速度下降的原因、我不知道我是错的、因为我认为使用"tassel_2"时、只更改了计时器的信号、但似乎也修改了 MCLK。

    #include
    unsigned int alfa=0;
    int main (空)

    WDTCTL = WDTPW + WDTHOLD; //停止 WDT
    SCFI0 |= FN_3; //设置 DCO 工作范围
    SCFQCTL = 121; //(121+1) x 32768 x 2 = 7.99MHz
    FLL_CTL0 = DCOPLUS + XCAP18PF; // DCO+设置为频率= xtal x D x N+1

    CCTL0 = CCIE; //启用 CCR0中断
    CCR0 = 20; //20 ciclos para cada interrucion
    TACTL = tassel_2 + MC_1; // SMCLK、向上计数模式
    _bis_SR_register (GIE); //中断使能
    ………….// algoritmo

    #pragma vector=TIMER0_A0_VECTOR
    _interrupt void Timer_A (void)

    Alfa++;


    如何使用32kHz 晶振获得 MCLK 和 timmer 的最大频率?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在8MHz 时、21个时钟大约为2.6 μ s、因此测量结果看起来正确。 我想您非常接近极限、因为您的 ISR 可能需要这么多的时钟。

    您如何得出 MCLK 正在减速的结论? 请记住,在这种中断率下,您的 main()几乎不会完成任何操作。

    [编辑:点击 Post too fast。]

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

    是的、您说的是真的。 我注意到我可以在 LCD 中看到的一些计算速度有所下降、但我想这是因为 ISR 花费了大量时间来进行部分处理。

    无论如何、我已经有一种方法来同步它。

    朋友、感谢您的帮助。