我正在使用 MC9S08LH64 微控制器的定时器模块来生成用于同步的内部定时器。总线时钟为 4.3 MHz,模数设置为 4309(TPM1MODH 和 TPM1MODL),我期望每 1.25 毫秒脉冲一次,但结果大约是每 3.75 毫秒。我在这里缺少任何设置吗?非常感谢
/*
* TPM1SC: pg 358
bit
7 TOF need to check for this flag
6 not used since no interrupt being used
5 1 not used
4 0 selecting bus clock
3 1
2 0 not dividing clock down
1 0
0 0
*/
TPM1SC = 0x08;
*更新:我刚刚意识到更改 TPM1MOD 对结果脉冲宽度没有影响。TPM1SC 是我用来设置模块的唯一寄存器。我需要为此设置任何其他寄存器吗?
下面是设置定时器的源代码:
//to set up the modulo register:
void set_base_pulse(float time_ms){
int modulo_value;
modulo_value = (int) time_ms*1000/233;
TPM1MODH = modulo_value >>8;
TPM1MODL = modulo_value;
}
为了生成脉冲,我检查了 TOF 标志,每 40 次标志熄灭,我切换输出:
for(counter = 0; counter<40; counter++
{
while(!TPM1SC_TOF){}
if(counter ==40) output~=output;
}