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

ガレスタさんのDIY日記

電子回路、Web、組み込み、自作エフェクターを語るblog

LPC11u68でUART(2)

LPCXpresso LPC11u68

前回はリングバッファを用いたUARTのテストをやったが今回はUARTのサンプルプログラムの2つ目ROMAPIを用いたものを試していく

ROM内APIについて

LPC11u68にはROM内にUART,I2C,DMA,USBのAPIを持っており比較的簡単に各ペリフェラルを使用できる機能がある。

  • UART API:非同期モードで文字や文字列の送信/受信
  • I2C API :マスター/スレーブの送受信, ポーリング/割り込み
  • DMAセットアップ/チャネルコントロール/送信

のように細かいことをしない限りユーザーがレジスタ操作に惑わされることがないというわけである。

LPCOpenではそれについての構造体、ライブラリが用意されているのでこのようにしてさらに簡単に使うことができる。

LPC_UART0D_API->uart_put_char(uartHandle, recv_buf[indexIn]);

これはLPC11u68のUART0を使って1文字送信を行うAPI呼び出しである

実際に動かしてみる

今回はLPCOpenの配布サンプルのUART0 ROM API polling exampleというものを使うのでそれをプロジェクトにインポートする。
プロジェクト名ではperiph_uart_0_rom_pollingと成っている。
f:id:gsmcustomeffects:20160627064807p:plain

プログラム構造

このサンプルは簡単に説明すると以下のような感じ

  1. UARTのピン設定(P0_18->TX,P0_19->RX)
  2. エラー関数の登録
  3. セットアップ関数の登録
  4. main文内で初期処理を終えてあとはESCキーが押されるまでコールバック


こんな感じである
サンプル実行時はUSBシリアル変換基板などでTeratermと接続してやると良いと思う

ソースは以下の通り若干修正した

解説など

LPC_UART0D_API->uart_put_char(uartHandle, recv_buf[0]);

という処理が特殊なのでおさえておきたい
文字通りROM内APIを使用して一文字送信を行うものだ。
同じように受信APIもある

LPC_UART0D_API->uart_get_char(uartHandle);

その他文字列送信、文字列受信、メモリサイズ取得、initを行うもの、割り込みをするものもある。

f:id:gsmcustomeffects:20160627064335p:plain

感想など

今回APIを使用してみて思ったがコードサイズも小さくなったり記述が簡単になったりとメリットが多いように感じた。
今後最後のサンプルであるROMAPIの割り込みを使ったものをためしてみて最終的な感想を述べようと思う