MPLAB X IDE v5.10
XC32 v2.15
MCC v3.75
この記事の内容は、MCCの不具合による問題のようなので、MCCのバージョンが上がれば解決されると思う。
そもそもデータシートをちゃんと読む人には全く関係の無い話。
PIC32MM0064GPL028でMCCPのPWMで音を鳴らしたりして遊んでいた。
「PIC32MM0064GPL028にスピーカーをつないで音声を鳴らす。」
「PIC32MM0064GPL028で左右ウインカー、ハザード、点滅音を実装してみる。」
「PIC32MM0064GPL028で音と電飾シリーズ – ホーンの音も追加 –」
だんだん手が込んできて、SCCPでもPWMを使って音を鳴らそうとしたら全く何も出力されない。
MCCPと同じように設定しているのにだ。
SCCP2の例で先に解決策を書く。
MCCがOCAENをDisabledにしてしまっているのでそこを変更する。
方法1:sccp2_compare.c の void SCCP2_COMPARE_Initialize (void){} の最後に
CCP2CON2bits.OCAEN = 1;
を追加する。
方法2:MCCのRegistersで直接変更する。
方法2の方が楽だ。
MCCP1とSCCP2を両方動かすとMCCP1だけ信号が出る。
SCCP2もタイマー割り込みにしてコールバックの中でLチカするとちゃんとLチカする。
散々捜し歩いても解決策が見つからなかった。
データシートを丹念に読むばもしかしたら気づいたかも知れないが、MCCどっぷりなのでそこまでちゃんと読む気が無くなっている。
結局、MicrochipのForumで質問したらすぐに教えてくれた。
あわてて、渋々データシートを読むと以下のようになっている。
MCCP1の場合はCCP1CON2のOCAEN~OCFENが出力ピンのOCM1A~OCM1Fに対応して出力するかどうかを決めている。
SCCP2の場合はCCP2CON2のOCAENが出力ピンのOCM2に出力するかどうかを決めている。
SCCPではOCBEN~OCFENは使わない。
なのに、MCCの吐き出すコードではSCCPに関してこのレジスタがDisabledに設定されてしまっている。
そのためピンに信号が出力されなかった。