PICでC30コンパイラを使用したプログラムサンプルを見ると、以下のdefineをしている場合があります。
#define USE_AND_OR |
このdefineは、ライブラリの下位互換のために使用されています。
PIC24Fのperipheral libraryでI/Oレジスタのフラグ設定方法が、v3.00から変わった事に伴う対応です。
ver3.00までは、複数のフラグを設定する時ORで結合していました。
ConfigIntUART2(UART_RX_INT_EN | UART_RX_INT_PR6 | UART_TX_INT_EN | UART_TX_INT_PR6); |
これが、ver3.01以降ではANDに変わりました。
ConfigIntUART2(UART_RX_INT_EN & UART_RX_INT_PR6 & UART_TX_INT_EN & UART_TX_INT_PR6); |
ver3.01以降でver3.00のプログラムを流用する場合は、USE_AND_ORをdefineしておくと、今までどおりorで結合させる事が出来る様になります。
このdefineが、どの様に使われているかuart.hを見ると、以下の様な定義がされています。
#ifndef USE_AND_OR /* Format for AND_OR based bit setting */ /* defines for UxMODE register */ #define UART_EN 0xFFFF/* Module enable */ #define UART_DIS 0x7FFF/* Module disable */ ... #else /* Format for backward compatibility (AND based bit setting). */ /* defines for UxMODE register */ #define UART_EN 0x8000 /* Module enable */ #define UART_DIS 0x0000 /* Module disable */ ... #endif |
ヘッダを見ても、USE_AND_ORがdefineされていると該当のビットだけが立っており(例えばUART_ENが0x8000でdefineされている)、orで結合できることが確認できます。
関連記事
コメントを残す