はじめに
ここではdsPIC33Fの特有なハードウェアの設定方法について説明します。
※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。
※以下の情報は2007年12月現在のものです。ご注意ください。
※このページではC言語の基本的な部分を理解している方向けに書いてあります。また、何回かMPLABの操作を行った方を対象にしています。それ以外の方はまず基本編を読んで下さい。
ハードウェアの設定
マイコンチップは、ハードウェアに依存する部分を設定する必要があります。一般的には「ヒューズ」と呼ばれることが多いのですが、dsPICの場合はコンフィグレーションビット(以下コンフィグビット)と呼びます。
ハードウェアの設定には大きく次のものがあります。
1)クロック源の選択
2)コードプロテクトの設定
3)ウォッチドックタイマの設定
コンフィグビットについてはdsPIC33Fデータシートの「23章特別な機能」に詳しく書かれています。以下ではよく使われる部分だけを説明します。
クロック源の設定
マイコンは一定のパルス単位で動きます。これをクロックといいます。dsPIC33Fは内部に7.37MHzの高速RCクロックを持っています。また、外部にクロック発生回路をつけてそこからクロック供給を受けることもできます。クロックを外部から受けるか内部のものを使うかの設定はプログラムではできないのでコンフィグビットで設定します。
コードプロテクトの設定
各プログラム領域のコード上書き保護などの設定を行います。ホビーで個人で開発している場合はコードプロテクトは不要だと思いますので、特に設定がわからなかったら設定しなくてもよいでしょう。
ウォッチドックタイマの設定
プログラムが暴走していないか定期的に監視する機能です。これが有効になっていると、プログラム次第では逆に上手く動かなかったりする(定期的に割り込みが発生するので調整が必要)ので、マイコン開発に詳しい方以外はウォッチドックタイマを無効にした方がよいと思います。
コンフィグビットの設定方法
コンフィグビットは「Configure」->「Configuration bits」でも確認、変更できますが、通常はプログラム内で明記します。
簡単な方法として、ヘッダファイルp33FJ256GP710.h内で宣言しているマクロ(ある処理を一括してやるものをマクロという。関数に似ている)を使うというのがあります。このヘッダファイルの中を開くと、最後の方でコンフィグビットを設定するためのマクロの記述があります。C言語マイコン開発経験のある方はこの部分と、データシートを読めば設定方法はわかるかと思います。
A33Fでは内部のクロック(7.37MHz)を使うように回路が組まれています。また、個人でホビーで開発する場合はコードプロテクトもウォッチドックタイマも無効にした方がよいでしょう。この場合はプログラム中に次のように入れます。
_FOSCEL... のFの前にあるのはアンダーバー(半角でシフトを押しながら「ろ」キー)です。
dsPIC33Fのクロック
一般的なマイコンは、クロックを与えると1クロックで1命令を実行します。1命令はC言語の1命令文ではなく、機械語の1命令になりますので注意して下さい。1秒間に何回命令を実行できるかをMIPS(Million
Instructions Par Second)という単位で表して、コンピュータの速度の目安にします。通常のマイコンは1命令1クロックなので1MHzで動くマイコンは大体1MIPSとなります。
しかし、dsPICを含む、Microchip社のマイコンのほとんどが少しややこしいクロックの使い方をしているのでクロック=MIPSとはなりませんので注意して下さい。PICという低機能のマイコンのほとんどは4クロックで1命令が動きます。dsPICは、クロック源を数倍してから数分の一に下げてマイコン内部のクロックを生成し、さらにそのクロックが2回で1個の命令が実行されます。
クロック源は内部の高速RCクロックを使っているので7.37MHzで固定です。
あとはそのクロックをSFRの設定で数倍にしたり数分の一にしたりします。非常にわかりづらいのですが、この部分はdsPIC33Fデータシートの8章に書かれています。
さらにややこしいことに、dsPIC33FはMIPS換算で40MIPS以上の設定はできないようになっています。実際、40MIPS以上で動かしたことがありますが、動いたり動かなかったりで不安定な動作をしました。
これらを考慮して、7.37MHzで一番早く動かす為の設定が次のようになりますので、一番早く動かしたい方はこの設定をmain関数の内部で行ってください。
この設定だと、MIPS換算で36.85MIPSになります。
なぜ7.37MHzか?と思うかも知れませんが、これは後で説明する通信機能などを使う場合にこの数値の方がスムーズに他と通信できるからです。例えば、PCとシリアル通信をしようとした場合、源クロックが10MHzなどのキリのいい値だと、逆に高速に通信できなくなります。
Fcy
このようにdsPIC33Fのクロックシステムは少々複雑で、データシートの記載もいろいろな記号が出てきますので、データシートでは何を基準にクロックとしたらよいかわかりづらいです。特にFOSCとFcyというのがよく出てきます。FOSCはクロック生成部分で出力される周波数で、実際にはCPU内で1/2にされます。FOSCを1/2にしたものをFcyという記号で表しています。ということで、特殊機能などを使う場合の基準となるクロックはFcyを参照してください。A33Fの場合、上記の設定だとFcy=36.85MHzになります。つまりこれが実際のクロックだと考えても良いでしょう。
おわりに
今回の説明はプログラム的なことではありませんでしたが、上手く動かないときに知っていた方が良いことがらです。次のページのプログラム分割もプログラムと直接関係ありませんが、開発スピードを上げるために重要なことです。
2007年12月1日
|