主题中讨论的其他部件: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