エンベデッドシステムスペシャリスト 2014年 午前2 問15
問題文
表のインターバルタイマを用いて約20ミリ秒ごとにタイマ割込みを発生させたいとき、16ビットタイマコンペアレジスタに設定する値は10進数で幾つか。ここで、システムクロックは32MHzとする。

選択肢
ア:1
イ:19
ウ:1,999
エ:19,999(正解)
🔒 解説は解答すると表示されます
タイマ比較値の算出【午前2解説】
正解の理由
タイマクロックは、システムクロックを32分周したものです。
したがって、タイマカウンタは1秒間に100万回、つまり1マイクロ秒ごとに1ずつ増加します。20ミリ秒の間に必要なカウント数は次のとおりです。
カウンタは0から数え始めるため、20,000回のカウントに対応する比較値は、20,000から1を引いた19,999です。よって、タイマコンペアレジスタには エ の19,999を設定します。
解法ステップ
-
システムクロックを分周し、タイマクロックを求めます。
-
タイマクロックの周期を求めます。
の周期は です。 -
20ミリ秒の間に必要なカウント数を求めます。
回です。 -
カウンタが0から始まることを考慮し、比較値を1つ小さくします。
選択肢別の誤答解説
-
ア:1
タイマクロックが1MHzになることと、レジスタに設定する比較値を混同した値です。20ミリ秒分のカウント数を求める必要があります。 -
イ:19
20から1を引いていますが、ミリ秒単位の数値をそのまま使っています。1マイクロ秒ごとのカウント数に換算できていません。 -
ウ:1,999
必要なカウント数を実際より少なく見積もっています。タイマクロックは100kHzではなく、システムクロックの32分周である1MHzです。 -
エ:19,999
1MHzのタイマクロックで20ミリ秒間に必要な20,000回のカウントを、0始まりの比較値に換算した値です。
よくある誤解
-
分周を掛けてしまう
「32分周」は周波数を32で割ることです。32MHzに32を掛けるのではなく、32MHzを32で割って1MHzとします。 -
20ミリ秒をそのまま比較値にする
タイマの比較値は時間そのものではなく、カウンタの値です。タイマクロックの周期を使って、必要なカウント数に換算します。 -
0から数える場合の1を引き忘れる
必要なカウント数が20,000回でも、カウンタ値は0から始まります。そのため、比較値は20,000ではなく19,999です。
補足コラム
比較値が19,999の場合、カウンタは0から19,999までの値を取ります。これは合計20,000カウントに相当します。したがって、タイマクロックが1MHzなら、割込み間隔は約20ミリ秒になります。
FAQ
Q. 比較値を20,000にすると、どうなりますか?
A. 0から20,000まで数えるため、合計20,001カウントとなり、割込み間隔は約20ミリ秒より1マイクロ秒長くなります。
A. 0から20,000まで数えるため、合計20,001カウントとなり、割込み間隔は約20ミリ秒より1マイクロ秒長くなります。
Q. タイマコンペアレジスタは16ビットですが、19,999を設定できますか?
A. はい。16ビットで表せる値は0〜65,535なので、19,999は設定可能な範囲内です。
A. はい。16ビットで表せる値は0〜65,535なので、19,999は設定可能な範囲内です。
関連キーワード: タイマ割込み、タイマクロック、分周、タイマカウンタ、コンペアレジスタ、ゼロ始まりのカウント

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

