スパイス  組み込み制御装置の受注製作

ライブラリの導入
平成27年 5月 29日

 割り込み関連のフラグを共通化する  えっ、割り込みフラグの配置がファミリーによって違う?

 次にDMAを使用した高速通信の準備をしていたのですが、ここで思わぬ落とし穴が見つかりました。
PIC32はデバイスの規模によって割り込み関連のIFやIEといったフラグのアドレスとビット配置が異なります。今まで、このようなデバイスに出会ったことが無かったのでビックリです。

 確認のためにデータシートから割り込み関連のフラグ一覧表を一部を引用します。最初はPIC32MX5xx/6xx/7xxデバイスです。
(PIC32MX5xx/6xx/7xxデータシートより引用)
  名前                   IRQ番号  ベクタ番号

 次はPIC32MX1xx/2xxデバイスです。
(PIC32MX1xx/2xxデータシートより引用)


テーブルは左から名前・IRQ番号・ベクタ番号・IF・IE・IPCの順に並んでいます。同じDMA0でも全てが再配置されていることが分かります。
このように再配置されているのは割り込み関連のフラグだけのようで、個々のSFRレジスタのアドレス等は両デバイスで一致しています。
 このため以前書いたUARTライブラリ(USARTの番号を変更できる)のように、割り込み関連フラグのアドレスと配置が固定と仮定していたプログラムは、異なるPIC32ファミリーではそのまま動作しません。従って書き直しです。やれやれ。
 デバイスファミリーの変更によって再コンパイルするのはいいので、ソースレベルで互換性を維持します。
上記の表を良く見ると、全ての割り込み関連のフラグで下記が成立しています。  IRQ番号, ベクタ番号はXC32コンパイラによって各デバイスごとにマクロ定義されています。
これを使って再度、周辺機能のライブラリを作り直してみます。


目次へ  前へ  次へ