我的目标是:
-配置计时器周期(在0.1至1ms 范围内的某处)
读取计时器值(在我的端口引脚 ISR 中)
-将计时器重置为零
您能帮我做这3件事吗?
我看到这个器件上有3个16位计时器、它们/用例中的一个在这方面是否存在差异?
我的系统时钟 为8MHz。
抱歉、如果这是一个多余的帖子;看起来像一个基本操作、但我的搜索结果却没有显示。谢谢!
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.
我的目标是:
-配置计时器周期(在0.1至1ms 范围内的某处)
读取计时器值(在我的端口引脚 ISR 中)
-将计时器重置为零
您能帮我做这3件事吗?
我看到这个器件上有3个16位计时器、它们/用例中的一个在这方面是否存在差异?
我的系统时钟 为8MHz。
抱歉、如果这是一个多余的帖子;看起来像一个基本操作、但我的搜索结果却没有显示。谢谢!
谢谢你。 通过阅读这些示例、我发现我可以使用"捕获"功能来实现我的最终目标(脉冲频率测量)、前提是这是唯一的实现方法。
但是、我希望一个软件事件能够读取并复位计时器。 (非常适合从 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 的频率计数方法。
此处为有类似需求的其他人提供更新。
我的第一个错误是尝试使用数据表而不是用户指南来查找正确的助记符。 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;//从零重新启动计时器
我认识到捕获方法将更准确、也同样简单;但这是一个很好的学习练习、而且很直观。 希望这对他人有所帮助。