大家好、我们正在尝试使用16MHz SMCLK 配置来调试捕获计时器、目前我们需要捕获 us 级别的低电平持续时间。
但目前有以下两个问题、我想请您帮助确认:
1. CS 的相关配置(sys_cs_init)是否正常、尤其是代码中的 CS_MCLK_FLLREF_Ratio 参数。
2.捕获中断中的 elapsedTime 计算方法是否正确,单位是 us.e2e.ti.com/.../PUMA_2D00_MCU_2D00_test.zip
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.
大家好、我们正在尝试使用16MHz SMCLK 配置来调试捕获计时器、目前我们需要捕获 us 级别的低电平持续时间。
但目前有以下两个问题、我想请您帮助确认:
1. CS 的相关配置(sys_cs_init)是否正常、尤其是代码中的 CS_MCLK_FLLREF_Ratio 参数。
2.捕获中断中的 elapsedTime 计算方法是否正确,单位是 us.e2e.ti.com/.../PUMA_2D00_MCU_2D00_test.zip
您好、周 GE
我们提供 了有关 MSP430FR2xx 和 MSP430FR4xx DCO+FLL 应用指南的应用手册。 希望这对问题1有所帮助。
谢谢!
您好、可以帮助验证附件中的项目吗? 看看是否可以捕获 US 电平的低电平持续时间?
[引用 userid="495676" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1027499/msp-exp430fr2433-consultation-on-capture-timer-related-issues ]PUMA-MCU-test.zip[/quot]这看起来与这里的线程非常相似:
这看起来与这里的线程非常相似:
[/报价]这似乎与我先前提到的情况相同,包括问题和附件。 我想请您帮助确认捕获是否可以使用当前 CS 配置捕获"us"的低电平持续时间。 谢谢。
计时器捕捉对计时器的分辨率是准确的。
如果我可以建议、我会在这里看到两种危险:
1) 1)从0开始(使用 TACLR)的技术会在启动时间中引入软件延迟、因此 CPU 达到 TACLR 设置所需的时间会是错误的。 您应该使用在 CCR1中捕获的值、该值是正确的
2) 2)计数溢出在大多数时间都有效、但易受角/竞态条件的影响。 在您的应用中、您无需这样做。
因此我建议您:
a)请勿在前导(下降)边沿使用 TACLR、只需记录捕获的(TA0CCR1)值即可。 在后沿(上升沿)、从(新) TA0CCR1值中减去该值。 无符号减法的规则将为您提供正确的结果、即使 TA0R 在两者之间"换行"为0也是如此。
b)通过设置 Id=3将定时器时钟除以/8。 那么 您的分辨率为0.5 μ s、但您的最大周期为32毫秒以上;(看起来在原始代码所期望的范围内)、并且不需要计数溢出。
如果您担心超时(我总是)、以下是一种方法:
c)采用第二个 CCR (例如 TA0CCR2)并设置其 CCIE。 在前缘、将 TA0CCR1存储到 TA0CCR2中。 如果您从 TA0CCR2获得比较匹配(CCIFG)、TA0R 为全圆(32ms)、因此您已超时。 然后、您可以采取补救措施(可能只是扔掉该读数)。
很抱歉、我对您提到的修改配置不是很清楚。 您可以修改之前上传的代码并进行解释吗?
[引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1027499/msp-exp430fr2433-consultation-on-capture-timer-related-issues/3799927 #3799927]1)从0开始的技术(使用 TACLR)会将软件延迟引入到启动时间中,因此 CPU 达到 TACLR 设置所需的时间是错误的。 您应该使用在 CCR1中捕获的值、该值是正确的目前、中断中的 EndTime 使用 TA0CCR1。 同时、我仍然不理解您对 TACLR 的看法。
[引用 userid="47378" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1027499/msp-exp430fr2433-consultation-on-capture-timer-related-issues/3799927 #3799927"]B)通过设置 ID=3将计时器时钟除以/8。 然后 、您的分辨率为0.5 μ s、但您的最大周期为32毫秒以上;(看起来在原始代码所期望的范围内)、并且不需要对溢出进行计数。关于此修改、我还可以将16MHz 更改为2MHz 吗? 这是否相同?在本例中、如果我们要捕获15.6ms、则无需考虑溢出情况。
在此、我想解释一下、我们需要捕获以下三个数据:15.6ms、330us 和670us。
a) i)替换
>StartTime = 0;//重置计时器变量和 CCR2,以连续模式启动计时器
>TA0CCR1 = 0;
>TA0CTL |= TACLR | MC_2;
使用
>StartTime = TA0CCR1;//捕捉前沿
>TA0CCR2 = StartTime; //保存以进行超时检查;
(二)和替换
> elapsedTime =(4096*溢出计数器)+(EndTime/16);
使用
> elapsedTime =(EndTime - StartTime)/2; //用微秒表示的低周期
(三)并加上
>案例 TA0IV_TACCR2://超时
>edgeFlag = 0; //未解决--重新开始
>中断;//
----
b)是的、如果您不需要 CPU (MCLK)以16MHz 运行、则可以将 MCLK/SMCLK 降低至2MHz 并获得相同的结果。
您是如何测试的? 您得到了什么结果?
488是正确的值。 它成为 CSCTL2:FLLN (driverlib 函数为您执行-1)。
正如我在另一个线程中提到的、我获取了您的代码并将 SMCLK 输出到引脚上。 我的示波器的测量值为15.9-16.1 MHz (这是一个平庸的示波器)。 这告诉我、所有呼叫的最终结果都符合预期。
我在另一个线程中提到的另一点是、我无法使您的项目(如发布的那样)正常工作、因此我创建了一个新项目并将 main.c 复制到其中。 您可能希望执行同样的操作、因为您的项目可能会有一些奇怪的设置、会妨碍您的工作。
大家好、我使用以下定义
#define mg/sleep __delay_cycles (16000000*s)
我尝试在主函数中添加一个 while (1)循环、调用 Mg_sleep 接口、在1S 中翻转 P1.0引脚一次、然后使用示波器测试 P1.0引脚的波形。但测试情况周期不会每1S 改变一次。
+#define mg_sleep(s) __delay_cycles(16000000*s) int main(void) { + GPIO_setAsOutputPin( + GPIO_PORT_P1, + GPIO_PIN0 + ); + while(1) + { + GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); + mg_sleep(1);//sleep 1s + } }
大家好、我检查了代码、发现睡眠不准确的原因是我们的代码中配置了与 ADC 相关的配置。 这部分代码包含 SMCLK 的配置。 在屏蔽 ADC_init 接口后、Sleep 1S 是正常的、但我们的项目也需要 ADC 多通道采样功能。 您能提供一些建议吗? 看看 ADC 中 TA1的配置是否需要进行一些修改?
请参阅附件以了解代码工程