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.

[参考译文] CC2541:Timer3溢出 IRQ 所需的时间比预期的要长

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1107421/cc2541-timer3-overflow-irq-takes-longer-time-then-expected

器件型号:CC2541

我试图理解 cc2541时钟和 timer3、但出于某种原因、我得到的时间比预期的要长。

我的板使用32MHz 外部振荡器运行、我按如下方式配置时钟:

CLKCONCMD =(CLKCONCMD 和~(CLKCON_OSC | CLKCON_CLKSPD))| CLKCON_CLKSPD_32M;

和定时器3:

T3CTL = T3CTL_DIV_1 | T3CTL_MODE_FREERUN | T3CTL_OVFIM | T3CTL_CLR | T3CTL_START;

在 Time3 ISR 函数中、我切换输出并使用示波器对其进行监控。 示波器显示的是大约32kHz 的方波信号、或32uS 的周期。

如果我正确理解配置、Timer3应该递增32M/秒、ISR 应该 被调用32M/256/秒、从而产生大约8uS 的周期、比我实际得到的周期短大约4倍。

我缺少什么?

这是我的 ISR

#pragma vector = t3_vector
_interrupt void T3_ISR (void)

  静态 uint8 ON=0;
  //清除模块中断标志。
    T3OVFIF = 0;
    P1_0 =打开;//切换输出
    ON=!ON;
  //清除 CPU 中断标志。
   T3IF = 0;

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

    您好 Itamar、

    复位时 、CLKCONCMD.TICKSPD 的值为1、因此时间节拍速度为16MHz。  32kHz 方波意味着中断每隔15625ns (1/64kHz)振荡 P1_0引脚、这几乎相当于256除 以16MHz。  我希望这能够解释您为什么要观察所描述的中断速率。

    此致、
    Ryan

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

    您好、Ryan

    您恰好是 On Reset 值、但我将  CLKCONCMD 设置 为零:

    CLKCONCMD=0;

    T3CTL 设为0x18

    T3CTL=0x18;

    因此、时钟和 timer3都应以32MHz 运行

    由于8位 Timer3 每256次溢出、我应该得到32MHz/256=125kHz 的频率

    但我得到的只是31250 Hz、比它低4倍

    我应该怎么做才能获得更好(更高)的频率?

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

    您能否使用调试器来确认这些是初始化后和运行时的最终寄存器值?  您是否考虑使用另一种评估 T3CC0而不是依赖0xFF 溢出的控制模式?

    此致、
    Ryan

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

    是的、我可以验证这些是值。

    我想我发现了我缺少的东西:

    我在 ISR 内部递增两个32位数、这会在每个输出转换周期中增加大约8us、

    如果我不增加任何内容、只需切换输出、我就可以获得预期的转换周期。

    转换周期应为:1 /(32000000/256)= 0.000008。大约8us

    在退出 ISR 之前仅递增其中一个数字、总计10uS (而不是预期的8uS)增加2us

    感谢你的帮助