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;
}