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なのを覚えておく必要がある。