工具/软件:Code Composer Studio
我正在尝试使用 SMCLK 通过 timerA 测量 SPI 从器件的运行时间。
但 timerA 的结果是怪异的。
它的工作频率为400Hz。 我测量了它、但精度非常高。
我只需要200个数据、因此它只需0.5秒即可工作。
SMCLK (=MCLK)为16MHz、输入分频器为8、所以...
预期结果为1M。
16M/8/2=1,000,000
但实际结果是930、000 ~ 950、000。
我没有更改 LPM 模式。
SPI 从器件运行时、使用中断和 SPI 通信。
FLL 被使能。 如果禁用、结果约为77、000。
为什么会发生这种情况?
此代码是我的 timerA 设置。
void init_timerA()
{
//启动计时器。 用户指南第370页
// TAIE - Timer_A 中断使能。 该位启用 TAIFG 中断请求
// Timer_A 时钟源选择10b = SMCLK
// InputDivider。 0xC0 =/8
// ID。 输入分压器。 00b =/1、11b =/8。
// ID_3 (3*0x40u)// Timer A 输入分频器:3-/8 */
// TASSEL1 = 10b = SMCLK\
// TASSEL0 = 01b = ACLK。
TA0CTL |= TASSEL1 + ID_3 + TAIE;//+ 0xC0;
//CM0 = 0x4000、10b =下降沿上的捕捉
//CCIS_3 (3*0x1000u)/*捕获输入选择:3- Vcc */
//cap (0x0100)//捕获模式:1 /比较模式:0 */
TA0CCTL0 = CM0 + CCIS_3;//
// 1. 向 TACLR 位写入1 (TACLR = 1)来清零 TAxR、时钟分频器状态和计数器方向。
TA0CTL |= TACLR;//+ TAIE;// Timer_A 清零。 将该位置位将复位 TAxR、定时器时钟分频器逻辑(分频器设置保持不变)和计数方向。
// 2. 如有必要、将初始计数器值写入 TAxR。
TA0R = 0;
// 3. 初始化 TAxCCRn。
TA0CCR0 = 50000;
// 16M / 8 (div)/ 400 (Hz)= 5000。
// 4. 对 TAxIV、TAIDEX 和 TAxCCTLn 应用所需的配置。
// 5. 对 TAxCTL 应用所需的配置、包括对 MC 位。
//模式控制
//00b =停止模式:定时器暂停
//01b = MC0 =向上计数模式:定时器向上计数到 TAxCCR0
//10b = MC1 =连续模式:定时器计数到0FFFFh
//11b =向上/向下计数模式:定时器向上计数至 TAxCCR0、然后向下计数至0000h
TA0CTL |= MC0;
}