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.

[参考译文] MSP430F5342:使用带有CBOUT的TA2捕获计时器值时出现问题。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/571630/msp430f5342-problem-using-ta2-with-cbout-to-capture-timer-value

部件号:MSP430F5342
主题中讨论的其他部件:MSP430WARE

您好,

我开始使用MSP430ware_1_60_02_09封装中包含的MSP430F534x_compB_06.c示例代码。  (我不知道这是不是最新的,但似乎对我的测试有效)。  我正在尝试将比较器输出上的计时器捕获添加到我的应用程序中,并希望首先通过此示例来解压外围设备。  此外,在我的应用程序中,我已经在使用Timer_A0和Timer_A1来执行其他操作,所以我想使用Timer_A2来执行此功能。  在我的应用程序中,我只关心捕获上升边缘上的计时器计数。  因此,我修改了代码,只使用Timer_A2而不是Timer_A0和Timer_A1。  当我这样做的时候,我看到了TA2CCR1报告的完全随机的值。  我再次修改了我的代码,以切换回使用Timer_A0,而TA0CCR1给出了非常一致的预期结果。  我再次修改了代码以使用Timer_A1,TA1CCR1再次返回一致的预期结果。  然后,我修改了代码以同时启用所有三个计时器,每个计时器都具有各自的中断处理程序,以便在捕获中断触发时记录TAxCCR1的值。  我发现TA0CCR1和TA1CCR1一致,但TA2CCR1仍返回随机值。  我已经查找了有关此问题的勘误表,但未能找到任何勘误表。

下面是如何设置计时器:

 TA0CTL = tassel_2 + MC_1;                // SMCLK,upmode
 TA1CTL = tassel_2 + MC_1;                // SMCLK,upmode
 TA2CTL = tassel_2 + MC1;
 TA0CCR0 = 0xFFFF;
 TA1CCR0 = 0xFFFF;
 TA2CCR0 = 0xFFFF;
 TA0CCTL1 = CM_1+SCS+CAP+CCIS_1+CCIE;     //捕获上升边缘,启用中断
 TA1CCTL1 = CM_1+SCS+CAP+CCIS_1+CCIE;     //捕获上升边缘,启用中断
 TA2CCTL1 = CM_1+SCS+CAP+CCIS_1+CCIE;     //捕获上升边缘,启用中断

在各自的中断例程中,对于TAxIV ==2,我读取TAxCCR1值并保存它。  对于TA0和TA1,我分别获得984和951的一致值。  我认为时间上的微小差异与中断延迟和"重置"计数值有关。  对于TA2,TA2CCR1中返回的值完全是随机的。

有什么想法吗?  我可以修改我的原始应用程序,在使用TA1的情况下使用TA2,然后使用TA1作为比较器捕获函数,但如果可能,我更愿意在TA2上引入此新函数。

提前感谢您对此提供的任何见解。

此致,

Chris Ingraham

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

    糟糕。 提交帖子后,我注意到我的代码中出现了拼写错误。 我使用值"MC1"而不是"MC_1"来设置TA2CTL。 一旦我解决了这个问题,一切都很顺利。

    Chris。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨,Chris,感谢您快速返回并为您的问题提供答案!

    此致,
    Ryan