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.

[参考译文] MSP430FR6989:MSP430上的快速计时器

Guru**** 2590290 points
Other Parts Discussed in Thread: MSP430FR6989

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/895335/msp430fr6989-fast-timers-on-msp430

器件型号:MSP430FR6989

尊敬的:  

我是一名从事硕士论文工作的学生。 在本论文中、我是一家与空间相关的公司、他们希望检查如何优化 C 代码(使用 MSP430、所以我将其用作基准)。 他们希望使用编译器(gcc 具有多个标志、最明显的是-O2和-O3)、但他们也坚决认为可以在 C 代码中进行优化(查找算法编写方式的更改、以及 C 代码本身的编写方式)。  我将对其进行测试。  

因此、我希望计时代码在 MSP430上运行(我有 MSP430FR6989)。 该板在16MHz 上工作、但最快的计时器是使用 SMCLK 的计时器、频率为1MHz。 这意味着精度不会非常高。 是否有其他方法对此进行计时? 是否有可使用的更快的 CLK 或计时器(或可推荐使用的其他板)?

PS:我还考虑了使用逻辑分析仪切换引脚和计时、我认为这将更加准确。 然而、这有一个问题、测试需要运行很多次(对于每个代码示例及其基准测试、可能至少运行50次)、 这需要大量的手动密集型工作、可以通过在 PC 上使用 UART 连接来避免。 特别是、由于我想使用 Python 来处理数据、我的首选方法是只通过 USB 发送时序、而不是使用逻辑分析仪。  

谢谢、在此致问候、  
Yannick

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

    Yannick、

    您还可以让计时器以16MHz 的频率运行、这就是为什么您将计时器限制为1MHz 的原因。

    如果您确实需要高分辨率计时器、我建议使用 F5132等 TimerD 进行 MSP 衍生、但这来自不同的器件系列闪存 F5xx。

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

    是的、我看到了错误的事情... 抱歉。 我是 MSP430新手

    另一个相当小的问题。 我使用 UART 连接将数据发送到 PC。  我使用了 MSP430FR6989中的一些示例代码。 其中包含以下代码:  

    //最大 DCO 设置~8MHz
    CSCTL0_H = CSKEY >> 8的启动时钟系统; //解锁时钟寄存器
    CSCTL1 = DCOFSEL_3 | DCORSEL; //将 DCO 设置为8MHz
    CSCTL2 = SELA_VLOCLK | SELS_DCOCLK | SELM_DCOCLK;
    CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1; //设置所有分频
    器 CSCTL0_H = 0; //锁定 CS 寄存器
    
    //为 UART 模式配置 USCI_A1
    UCA1CTLW0 = UCSWRST; //将 eUSCI 置于复位
    UCA1CTLW0 |= UCSSEL_SMCLK; // CLK = SMCLK
    //波特率计算
    // 800000000 /(16*9600)= 52.083
    //分数部分= 0.083
    //用户指南表21-4:UCBRSx = 0x04
    // UCBRFx = int ((52.083-52)*16)= 1
    UCA1BR0 = 52; // 8000000/16/9600
    UCA1BR1 = 0x00;
    UCA1MCTLW |= UCOS16 | UCBRF_1 | 0x4900;
    UCA1CTLW0 &=~UCSWRST; //初始化 eUSCI
    UCA1IE |= UCRXIE; //启用 USCI_A0 RX 中断 

    其中时钟设置为8MHz、用于 UART。 我可以将其设置为16MHz、还是 UART 在之后不再工作(当然、也会针对波特率再次进行计算)、以便为我的另一个计时器使用相同的时钟? 因为这会增大分辨率。  

    此致、  
    Yannick

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

    Yannick、

    如果您希望运行与计时器类似的16MHz UART、则根据下面的规格、这不是问题。 但请注意、如果您以16MHz 运行 MCLK、则需要正确设置 FRAM 访问的等待状态:

    如果您不熟悉 MSP430、我强烈建议您打开系列用户指南并研究您所使用的块的方框图。 这有助于快速了解模块可以提供的内容。 有关电流、时序...的详细信息 可在相应的数据表中找到。 此外、如果您的应用受到任何影响、还应检查勘误表。