ラズパイ3でベアメタル - その4:シリアル通信(UART)でエコーバック(割り込みなし)
今回は、前回のプログラムに文字受信を追加して、
PCからラズパイ3へ送信した文字をそのまま送り返す(エコーバック)
を作ってみます。
なお、Raspberry Pi 3で64bitベアメタル(bare metal)プログラミングを試してみる
本シリーズの目次はコチラです。
1. 新たに使用するレジスタ
PCから送信されたデータをRaspberry Pi 3で受信する必要があるので、
今回新たにUARTの受信の機能を使用します。
UARTで受信したデータを取得するまでの流れは以下のとおりです。
1. 受信FIFOのチェック
2. 受信FIFOからデータを取り出す
今回登場するレジスタは以下の記事で書いたものと同じです。(LSRとIO)
2. ソースコード(エコーバックプログラム)
#define MU_IO (*(volatile unsigned int *)0x3f215040) #define MU_LSR (*(volatile unsigned int *)0x3f215054) #define MU_LSR_TX_IDLE (1U << 6) #define MU_LSR_TX_EMPTY (1U << 5) #define MU_LSR_RX_RDY (1U << 0) int main(void) { volatile char ch; while (1) { while (!(MU_LSR & MU_LSR_RX_RDY)); ch = (char)MU_IO; while (!(MU_LSR & MU_LSR_TX_IDLE) && !(MU_LSR & MU_LSR_TX_EMPTY)); MU_IO = (unsigned int)ch; } return 0; }