Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

PIC32MM0064GPL028のSCCPで16bitのタイマーを2つ使う。

PIC32MM0064GPL028のSCCPやMCCPは使い方がほとんど分かっていない。
今回はSCCPのタイマーを16bit×2つのモードにして使ってみた。

ぴったりにはできないのだが、8kHzと2Hzを作ってみたい。
これは、最近やっている音の再生用の8KHzと模型のウインカーの点滅用の2Hzだ。


SYSCLKは16MHzにしてある。
(1)Timer Modeを16bitにする。
 2つ別々に同時カウントする16bitのタイマーとして使える。
(2)Prescalerを1:16とした。
 これは普通のタイマーと同じ。
(3)Secondary Timer Periodを0x7D(125)とした。
 このタイマーは単純にこの数を数えるという用途でしか使えない。
 16000000 ÷ 16 ÷ 125 = 8000
 となって8kHzの割り込みを発生させることになる。
(4)Primary Timer Periodを0xFFFFとした。
 このタイマーには下の欄のOutput Propertiesに設定する機能を付加できる。
 もちろん、単純なカウント用にも使える。
 実はこの付加機能の設定がまだよくわかっていないのだ。
(5)Event Durationを7th Time Base Period Matchとする。
 こうすると、
 16000000 ÷ 16 ÷ 65535 ÷ 7 = 2.18
 となり、割り込みの発生周期を指定周期分さらに遅くすることができる。
 このEvent Durationは1~16倍まで選択できる。
 これで、計算上少し端数が出るにしても、ほぼ2Hzを作ることができた。

ちなみに、タイマー割り込みで実行させたい処理を書く場所はsccp2_tmr.cの以下の赤線の部分だ。

PrimaryかSecondaryかをよく見て間違えないように書く。
なお、青線は、タイマー割り込みの許可・禁止のフラグを区別するために引いた。
PrimaryがCCT2で、SecondaryがCCP2なのを覚えておく必要がある。

このエントリーをはてなブックマークに追加

Posted under: PIC32MM0064GPL028


コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.