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.
我是用来测量频率的,所以在计数器上连接一个高精度的温补晶振来作为标准,计算其他慢速信号的周期。
所以这个晶振的频率应该越高越好,那么计数器允许的最大输入频率是多少呢?是不是与单片机允许的最大时钟有关系呢(msp430F149为8M,G2553为16M,F5529为25M)?是不是不应该大于单片机允许的最大时钟呢?
另外做过实验:我在F5529上,MCLK用的是DCODIV(8M左右),SMCLK为25M(外接的晶振TX2),计数器timer1采用的是内部SMCLK(25M),被检测的6K外部信号连接到timer2上,测量过程没有任何问题,没有出现错误。这是不是说明计数器采用的信号与当时的MCLK没有必然关系?那么我计数器可不可以采用一个外部的信号大于25M?
用timer计时时首先要选定timer的时钟,和分频设置、计数方式等。msp430的timer是16位的,计数1次的时间为 1 / 时钟频率。
timer的时钟源最好选取外部的时钟源,DCO不太准确。计数器采用的信号与当时的MCLK是没有必然关系,但是设计的时候需要考虑中断等因素对系统运行速度的要求。如果MCLK太慢的话可能影响对timer计数的采集与计算,因为一般运算部分放在主程序中运行。
外部晶振选择需要参考手册,不建议高于最大允许频率运行。
另外对于慢速脉冲信号的周期计算,采用Timer的捕获方式更合理些,实现上更简单些。可参考430相关定时器捕获的例程
感谢大家的回复
这个确实应该查询数据手册,下面是F5529:
timer的最大输入频率与该单片机的最大系统时钟相等。不过好像与单片机当时的F_system没有关系(图中,对比下面的USCI的描述可见)。至于系统时钟与采集精度的关系,感谢大家的提醒。中断的相应时间确实与当时系统的时钟有很大的关系。当然,65535次的timer_count才产生一次中断,只要不采用非常低的系统时钟,一般是可以处理过来的。
wszqq朋友说的正确,确实应该采用捕获,避免中断相应延时现象的发生。
现在看来是这样:timer使用较高(遵循手册上的限制)、较准确的外部时钟信号,系统时钟不是特别低的时候,不用太在意当时的系统时钟的快慢。尽量使用捕获方式,而不是其他途径来实现频率测定。
用主频输入去捕获主频的频率,我不认为可以做到准确,C语言更难做到准确,这事CPU的工作特性决定了的,理论随可以输入同样高的频率,但不见得能捕获到。还要看处理速度。就像51单片,输入12M的频率,但是处理能力只有1M,测频率,主频还是要好好考虑的。
Shi JianHua,您好,谢谢您,不过我倒是这样理解的:
===============================================
msp430的timer捕获不是基于硬件的吗?也就是说,使用捕获功能的时候,当捕获引脚的电平边沿到来的时候,硬件会立即锁存timer的数值到捕获寄存器中,然后置位中断标志。锁存过程与当时的系统主频、当时程序运行到哪里没有任何关系,等到系统主程序响应到这个中断后,只需要读取捕获寄存器中的那个数值就行了。
也就是说应当适当提高timer输入源的频率与精确程度,而与系统主频没有太大关系的吧(只需要在第二个捕获到来之前,处理完第一个捕获中断即可)?
我可以使用timer输入时钟(在TACLK引脚上提供cmos电平的方波)25M,去捕获一个10K左右的被测信号(CCIA1捕获引脚)。而使用1M的主频去运行程序。这样应该是没有问题的吧。
===============================================
我这样理解对吗?您看一下。
wszqq,您好,是的,您说的对,timer时钟太高确实会造成timer溢出。
过去我还曾遇到中断冲突的问题。不过过去不是采用捕获的方式。现在采用捕获的方式,仍然会出现这样的情况:
为了提高采样的精度,经常是捕获N个沿信号,比如100个,计算被测信号100个周期的总时间。这样timer计数器肯定会发生多次溢出的情况,采用“continue”模式,timer溢出中断记录timer溢出中断的次数M。这样100个被测信号周期内的timer为:(65536-第一次捕获值) + (M - 1) *65536 + 最后一次捕获值。
会出现这样的情况:如果捕获完成后,置位捕获中断,但是在响应这个捕获中断之前,timer中断也到来了,理论上两个中断同时置位的话,先响应优先级高的中断,这也是值得考虑的问题。
wszqq 说:差不多就是这个意思。如果要捕获的信号频率快的话,频繁进入捕获中断,主频低的话影响系统运行。timer时钟太高的话,要充分考虑计数器溢出情况
定时器溢出不要紧,开溢出中断进行计数就可以的。
另外你提到的2个中断同时出现的情况概率非常低的。要想在处理某一中断的同时,再按照优先级响应后来中断,在430中就得用中断嵌套,但是430的中断嵌套个人感觉不是非常好用,呵呵。中断嵌套具体涉及的情况,由于有段时间不用了,记得不是非常清楚。