UART用ライブラリ


【概要】

UART用ライブラリでは下記がサポートされています。
(1) バイトまたはワード単位の送受信
   (ワードは9ビットモードの場合に使用する)
(2) バイト列またはワード列の送受信
   (ワードは9ビットモードの場合に使用する)
(3) 割り込み制御用のマクロ

【関数詳細】

用意されているライブラリ関数は下表となります。

関数名 機 能 と 書 式
BusyUART1
BusyUART2
UARTの送信ステータスを返す
1:ビシー  0:レディー  (UxSTA<TRMT>ビットの内容)
【書式】  char BusyUART1(void);
       char BusyUART2(void);
CloseUART1
CloseUART2
UARTをオフとする 割り込みフラグもクリアする
【書式】  char BusyUART1(void);
       char BusyUART2(void);
ConfigIntUART1
ConfigIntUART2
UARTの割り込みを設定する
【書式】  void ConfigIntUART1(unsigned int config);
       void ConfigIntUART2(unsigned int config);

configは下記の組み合わせとする
 @受信割り込み  UART_RX_INT_EN  UART_RX_INT_DIS
 A受信割り込み優先レベル
   UART_RX_INT_PR0  UART_RX_INT_RP1  UART_RX_INT_RP2
   UART_RX_INT_PR3  UART_RX_INT_RP4  UART_RX_INT_RP5
   UART_RX_INT_PR6  UART_RX_INT_RP7
 B送信割り込み  UART_TX_INT_EN  UART_TX_INT_DIS
 C送信割り込み優先レベル
   UART_TX_INT_PR0  UART_TX_INT_RP1  UART_TX_INT_RP2
   UART_TX_INT_PR3  UART_TX_INT_RP4  UART_TX_INT_RP5
   UART_TX_INT_PR6  UART_TX_INT_RP7

【例】
   ConfigIntUART1(UART_RX_INT_EN & UART_RX_PR4
           & UART_TX_INT_DIS); 
DataRdyUART1
DataRdyUART2
UARTの受信ステータスを返す
 1:受信バッファにデータあり  0:受信データなし
【書式】 char DataRdyUART1(void);
OpenUART1
OpenUART2
UARTの送受信モードの設定
【書式】 
 void OpenUART1(unsigned int config1, unsigned int config2,
          unsigned int ubrg);

 void OpenUART2(unsigned int config1, unsigned int config2,
          unsigned int ubrg);


config.1は下記の組み合わせとする(UxMODEレジスタ)
 @UARTのオンオフ UART_EN    UART_DIS
 Aアイドル時動作 UART_IDLE_CON UART_IDLE_STOP
 BIrDAの指定   UART_IrDA_ENABLE UART_IrDA_DISABLE
 Cモード指定   UART_MODE_SIMPLEX UART_MODE_FLOW
 D代替ピン指定  UART_ATTRX_ALTTX  UART_RX_TX
          (データシート参照)
 ECTS/RTS指定   UART_UEN_11  UART_UEN_10
          UART_UEN_01  UART_UEN_00
 Fウェイクアップ UART_EN_WAKE UART_DIS_WAKE
 Gループバック  UART_EN_LOOPBACK  UART_DIS_LOOPBACK
 H自動ボーレート UART_EN_ABAUD    UART_DIS_ABAUD
 I受信極性    UARTUXRX_IDLE_ZERO UART_UXRX_IDLE_ONE
 JBRGH指定    UART_BRGH_FOUR   UART_BRGH_SIXTEEN
 Kパリティとビット数設定
   UART_NO_PAR_9BIT  UART_ODD_PAR_8BIT
   UART_EVEN_PAR_8BIT UART_NO_PAR_8BIT
 Lストップビット UART_2STOPBIT UART1_STOPBIT

config2
は下記の組合せとする(UxSTAレジスタ)
 @送信割り込みモード
   UART_INT_TX_BUF_EMPTY UART_INT_TX_LAST_CH
   UART_INT_TX
 AIrDA極性
   UART_IrDA_POL_INV_ONE UART_IrDA_POL_INV_ZERO
 Bブレーク送信
   UART_SYNC_BREAK_ENABLED UART_SYNC_BREAK_DISABLED
 C送信許可禁止 UART_TX_ENABLE  UART_TX_DISABLE
 D受信割り込みモード選択
   UART_INT_RX_BUF_FUL  UART_INT_RX_3_4_FUL
   UART_INT_RX_CHAR
 Eアドレス検出有効化
   UART_ADR_DETECT_EN   UART_ADR_DETECT_DIS
 Fオーバーランビットクリア UART_RX_OVERRUN_CLEAR

ubrgはボーレートにを決めるUxBRGレジスタの16ビット設定値

【例】
  /// UART設定用パラメータ
  unsigned int U1MODEvalue = UART_EN &
  UART_IDLE_CON & UART_MODE_SIMPLEX
  & UART_DIS_WAKE & UART_UEN_00 &
  UART_DIS_LOOPBACK & UART_DIS_ABAUD
  & UART_UXRX_IDLE_ONE & UART_BRGH_SIXTEEN
  & UART_NO_PAR_8BIT & UART_1STOPBIT;
  unsigned int U1STAvalue = UART_INT_TX
  & UART_SYNC_BREAK_DISABLED
  & UART_TX_ENABLE & UART_INT_RX_CHAR
  & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
  unsigned int Baud = 103; // 9600bps@16MHz
  OpenUART1(U1MODEvalue, U1STAvalue, Baud
);
ReadUART1
ReadUART2
getcUART1
getcUART2
受信データをバッファから取り出して返す。9ビットモードの
ときは9ビット目も上位バイトに返す
【書式】 unsigned int ReadUART1(void);
     unsigned int ReadUART2(void);
WriteUART1
WriteUART2
putcUART1
putcUART2
送信データを書き込む。9ビット目が使うときは上位バイトに
セットする
【書式】 void WriteUART1(unsigned int data);
     void WriteUART2(unsigned int data);

data
は8ビットまたは9ビットの送信データ
getsUART1
getsUART2
指定したバイト数のデータを受信し指定バッファに格納する
【書式】
 unsigned int getsUART1(unsigned int length,
 unsigned int *buffer, unsigned int uart_data_wait);

lengthは受信するバイト数
bufferは格納バッファのポインタ
_data_waitは関数がリターンするまでの時間(19N-1サイクル)
戻り値 0:指定バイト数受信完了 0以外;受信未完了
putsUART1
putsUART2
文字列を送信する
【書式】  void putsUART1(unsigned int *buffer);
       void putsUART2(unsigned int *buffer);

bufferは文字列へのポインタ

割り込みの制御用には下記のマクロ命令が用意されています。
マクロ名 機 能 と 書 式
EnableIntU1RX
EnableIntU2RX
DisableIntU1RX
DisableIntU1RX
受信割り込みの許可、禁止
EnableIntU1TX
EnableIntU1TX
DisableIntU1TX
DisableIntU1TX
送信割り込みの許可、禁止
SetPriorityIntU1RX
SetPriorityIntU2RX
受信割り込み優先レベル指定
【書式】 SetPriorityIntU1RX(priority);

priority
は下記のいずれか
  UART_RX_INT_PR0 UART_RX_INT_PR1 UART_RX_INT_PR2
  UART_RX_INT_PR3 UART_RX_INT_PR4 UART_RX_INT_PR5
  UART_RX_INT_PR6 UART_RX_INT_PR7 
SetPriorityIntU1TX
SetPriorityIntU2TX
送信割り込み優先レベル指定
【書式】 SetPriorityIntU1TX(priority);

priority
は下記のいずれか
  UART_TX_INT_PR0 UART_TX_INT_PR1 UART_TX_INT_PR2
  UART_TX_INT_PR3 UART_TX_INT_PR4 UART_TX_INT_PR5
  UART_TX_INT_PR6 UART_TX_INT_PR7

【基本的な使い方】

UARTライブラリを使うためには下記作業が必要です。

(1) 下記ヘッダファイルをインクルードする
  
  #include  <uart.h>

(2) プロジェクトにPIC24Fのライブラリを追加登録する



【使用例1】

実際にUARTのライブラリを使った例は下記のようになります。
この例では、9600bpsの速度でパソコン等と通信し、文字aかAを受信
したときは英文字26文字を返送し、nかNを受信したときには数字を返送
します。
UARTの場合にはパラメータが非常に多いので、ライブラリを使うより直接
レジスタ操作で作成した方が簡単です。
また下記例では、文字列はchar型でしか定義できず、putsUART1関数
ではunsigned int型で扱っているためコンパイルでwarningメッセージが
出力されますが、上位バイトは無視されるので動作は正常に行われます。
また本来は受信後に受信誤りチェックをしなければならないのですが
わかりやすくするために省略しました。








   目次ページへ