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.

[参考译文] MSP430F2272:定时器捕捉最大频率

Guru**** 2905440 points

Other Parts Discussed in Thread: MSP430F2272

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/849953/msp430f2272-timer-capture-maximum-frequency

器件型号:MSP430F2272

大家好。

我正在尝试测量连接到  MSP430F2272器件的 P4.4 (TB1)端口的方波的频率。 频率应接近2MHz。

我的时钟配置为:

MCLK  - 8MHz
SMCLK - 8MHz
ACLK  - 1MHz

Timer B 配置:

TBCTL =(CNTL_0 | TBSSEL_2 | ID_0 | MC_0 | TBIE);
TBCCTL1 =(CM_1 | CCIS_1 | CAP | CCIE | SCS);
TBCCTL1 &=~COV; 

定时器 B ISR:

#pragma vector=TIMER0_B1_VECTOR
__INTERRUPT void Timer_B1 (void)
{
switch (__even_in_range (tBIV、14))
{
情况0:中断; //无中断
案例2:
TB_Pulse0 = TB_Pulse1;
TB_Pulse1 = TBCCR1;
DayData[HourAD][HourQuarter][4]=(TB_Pulse1 - TB_Pulse0);
TBCCTL1 &=~CCIFG;
中断;
案例4:中断; // CCR1未使用
案例6:中断; //未使用 CCR3
案例8:中断; // CCR4未使用
案例10:中断; //未使用 CCR5
案例12:中断; // CCR6未使用
案例14:
TBCCTL1 &=~COV;
中断;
默认值:break;
}
返回;
} 

所有其他中断均已禁用!

我的问题:我可以正确测量的最大频率为~70KHz。

有人对什么问题提出建议?

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

    2MHz 输入信号和 MCLK = 8MHz 时、每周期只有4个 CPU 时钟。 您不会成功。 即使在 MCLK=16MHz (轮询)时、您也不会成功、因为8个 CPU 时钟少于2个(平均值)指令。

    您可以使用轮询(无中断)管理较高的速率、并使用预计算的指针(无索引)存储结果。  

    您可以通过将信号连接到 TBCLK (P4.7)并使用 TBSSEL=0来进行频率计数。 然后使用另一个计时器来测量某个固定周期并进行算术运算。

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

    Bruce、

    没错、我必须使用另一种方法来管理输入信号。

    但是、为什么我的频率限制已经是70KHz?

    谢谢。

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

    我将把它转过来:8MHz/70kHz =~114、因此需要114个 CPU 时钟来处理一个周期(边缘)。

    估计进入/退出 ISR 的时钟约为30个、处理 IV 的时钟约为10个、从而在分配中留下大约70个时钟执行三索引。  

    创建.lst 文件("编译设置->编译器->汇编器选项")以查看在3-5个时钟/指令下实际执行的指令数可能非常有用。 如果下标不经常更改,则可以生成指向您希望在下一步更新的元素的指针,并且只需“*ptr = new - prev”即可。