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.

[参考译文] MSP430FR2355:基本定时器读取/复位/控制操作

Guru**** 2531950 points
Other Parts Discussed in Thread: MSP430FR2355

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1045699/msp430fr2355-basic-timer-read-reset-control-operations

器件型号:MSP430FR2355

我的目标是:

-配置计时器周期(在0.1至1ms 范围内的某处)

读取计时器值(在我的端口引脚 ISR 中)

-将计时器重置为零  

您能帮我做这3件事吗?

我看到这个器件上有3个16位计时器、它们/用例中的一个在这方面是否存在差异?

我的系统时钟 为8MHz。  

抱歉、如果这是一个多余的帖子;看起来像一个基本操作、但我的搜索结果却没有显示。谢谢!

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

    最好从 TI Resource Explorer 下载计时器示例代码。 数据表和用户手册还可以帮助解释定时器之间的差异。

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

    尊敬的 John:

    对于基本的计时器概念、我们创建了这些 Academy 示例、可帮助 计时器学院

    针对您的特定器件、我们还提供了计时器示例、 可以在此处找到 MSP430FR2355示例代码。

    数据表 用户指南等资源 可为您提供更多信息。

    此致、

    Luke

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

    谢谢你。 通过阅读这些示例、我发现我可以使用"捕获"功能来实现我的最终目标(脉冲频率测量)、前提是这是唯一的实现方法。

    但是、我希望一个软件事件能够读取并复位计时器。 (非常适合从 dsPIC33项目移植)。 例如、在 dsPIC33上、我可以具有以下内容:

    (端口中断)

    myValue = TMR1;

    TMR1_RESET ();

    doStudioWih (myValue);

    根据我在这里看到的示例、似乎我需要将我的"端口中断"信号绑定到一个捕获/比较引脚、然后在一个缓冲器中累积一个特定数量的"捕获"值;触发一个缓冲器状态上的中断; 对缓冲区中收集的值求平均值、然后继续使用平均经历时间。

    如上所述、是否有方法使用 MSP430计时器、如 dsPIC 计时器? 我怀疑我只是无法识别用于查询计时器计数器值的助记符。

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

    定时器捕捉在逻辑上等同于读取(例如)引脚中断中的 TB0R、但没有软件延迟。 [(例如)(DS70005371B)第10.4节中介绍了 dsPIC33的等效机制。] 通常、您不会在每次捕获时重置计时器、而是使用连续模式并减去连续捕获值。 (引脚中断方法也是如此。) 唯一真正不使用捕捉的原因是您无法访问任何指定的捕捉输入(触发)引脚。

    示例 msp430fr235x_tb0_capture.c 简要显示了设置。 您无需将捕获的值(在本例中为 TB0CCR0)保存在缓冲区中、如果愿意、您可以立即在 ISR 中处理它。 此示例在一个内部信号上触发(TB0.CCI0B=ACLK)、所以您需要选择一个外部引脚并相应地调整设置。 (P1.6=TB0.1=TB0.1=CCI1A->TB0CCR1似乎类似于[参考数据表(SLASEC4C)表6-63]。)

    在您深入探讨之前:您的信号速度有多快? 使用捕捉来对慢信号进行频率计数-比如<10kHz -是很好的,但是对于一个快速信号,你应该使用一个带有(例如) TB0CLK 的频率计数方法。

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

    谢谢 Bruce、我将使用这种方法。 如果我有困难、我将在这里跟进。

    我的信号很慢(0-1000Hz)、因此适合进行捕获。 理想情况下、我还需要一个"超时"、例如、如果在没有下降沿的情况下通过3秒、ISR 将执行其他操作。 我认为这里有足够的信息让我能够做到这一点。 感谢你的帮助。

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

    我使用的一种方法是:

    1) 1)在同一个计时器中采用未使用的 CCR、例如 CCR2

    2) 2)设置 TB0CCTL2 = CCIE 来请求一个比较中断

    3) 3)每次捕获时、将捕获的值存储在 TB0CCR2中。

    4)如果您遇到 CCR2中断、这意味着计时器已完全循环(64K 个周期)、并且您处于捕捉时序的极限-这是任何超时都一样好。  

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

    此处为有类似需求的其他人提供更新。

    我的第一个错误是尝试使用数据表而不是用户指南来查找正确的助记符。 MSP430用户指南中的配置字内容和"友好名称"与我在 dsPIC33数据表中看到的内容类似、但在 MSP430 DS 中找不到。

    虽然 Bruce 的捕获中断方法更正确、但我首先使用原始帖子中列出的方法对我的旧代码执行了一个线对线端口以连接到 MSP430。 事实证明、这非常简单、一旦配备了用户指南:

    在 main()中:

    TB0CTL |= TBSSEL_1 | ID_3 | MC_2 | TBCLR;//计时器 B 控制:
    //TBSSEL_2时钟源选择:替代方案是 SMCLK、ACLK、TBxCLK、INCLK。
    // MC_2模式集:连续。 这将启动计时器。 替代方案有00-stop、01=up、11=UPDN
    // TBCLR 复位时钟。 该位自动返回0。
    //时钟现在正在运行

    然后、在端口引脚触发的中断中:

    TB0CTL &=~MC_3;//停止计时器
    doStudioWih (TB0R);//读取16位定时器值并执行该值的操作
    TB0CTL |= MC_2 | TBCLR;//重置计时器
    TB0CTL |= MC_2;//从零重新启动计时器

    我认识到捕获方法将更准确、也同样简单;但这是一个很好的学习练习、而且很直观。 希望这对他人有所帮助。