読者です 読者をやめる 読者になる 読者になる

UARTを使う方法

R8C

今日はUART通信が出来るようになりました
というわけで以下のように設定する方法をメモ

U0MR UART送受信モードレジスタ

PRYE PRY STPS CKDIR SMD2 SMD1 SMD0
変更するビット : SMDx
  • smd0=1
  • smd2=1
      • 8ビットモードにします

U0C0 UART送受信制御レジスタ0

UFORM CKPOL NCH - TXEPT - CLK1 CLK0
変更するビット : CLKx
  • clk0=0
  • clk1=0
      • BRGカウントソースをf1に設定

U0C1 UART送受信制御レジスタ1

TE TI RE RI UiRS UiRM - -
変更するビット : TE,RE
  • te=1
  • re=1
      • TE:送信許可 RE:受信許可

U0BRG UARTビットレートレジスタ

UiBRG
変更するビット : UiBRG
//****UART0の初期設定*************************************

// U0MRの設定
smd0_u0mr = 1;			// UART0 8bit Mode
smd2_u0mr = 1;
	
// U0C0の設定
clk0_u0c0 = 0;
clk1_u0c0 = 0;			// BRGカウントソースをf1に設定
	
// U0C1の設定
te_u0c1 = 1;			// 送信許可
re_u0c1 = 1;			// 受信許可
	
// U0BRG ビットレートの設定
u0brg = 0x40;			// 約19200bps

送信する方法

  • ti_u0c1 : 送信バッファ空フラグ
  • u0tb : 送信バッファ(16bit)
while(ti_u0c1 == 0);		// 送信バッファ空き待ち
u0tb = tx_data;			// 送信バッファに書き込み→後は自動で送信

受信する方法

  • ri_u0c1 : 受信完了フラグ
  • u0rb : 受信バッファ(16bit)

※u0rbは必ず16ビットで読み出さないと受信完了フラグがクリアされない(手動クリアも不可)

if(ri_u0c1 == 1){		// 受信バッファにデータ有か?
	rx_data = u0rb;		// 受信データをメモリに保存
}