ディープブルーデー

それでいーの

トランジスタ技術2014年2月号特集メモつづき...3章のシリアル通信

lpc800_driver_lib/src/lpc8xx_uart.cが提供されているので、それに定義されている変数および関数を使う。
このため、ユーザーは特に割り込みを意識することも無い(割り込みの禁止/許可はやる必要がある)。

3章のサンプルは、受信バッファに受信データがあることを確認して(ポーリング)、データがあれば、バッファの文字コードを整数に変換して、7セグLED関数に渡している。この処理中はUARTの割り込みを禁止。

LPC810からPCへ文字を送信したくなったので、lpc8xx_uart.cの中からUARTSend()関数を見つけたのでこれを使う。
関数の第1引数はUSART0,1の選択。USART0,1レジスタの先頭アドレスを渡すことで選択。
第2引数は送信するデータバッファ指定。
第3引数は送信する文字数。

第2引数は型がuint8_tとなっている。
とりあえず、1文字をint型で定義して送ることにした。

      uint8_t moji;

      moji = ‘a’;
      UARTSend(LPC_USART0,moji,1);

これで送ることができた。
今度は複数送る。
上のやり方を踏襲するなら、適当に配列を定義して、、、

     uint8_t moji[5];


     moji[0] = ‘a’;
     moji[1] = ‘b’;
     UARTSend(LPC_USART0,moji,2);

こんな感じだろうか。しかしこれだと効率が悪いのは明らかである。
無駄に時間を費やすのも何だし、ということですぐにギブアップして、NXPのサンプルソースを確認すると、、、

UARTSend(LPC_USART0, (uint8_t *)"Hello World!\r\n", 14);

なるほど、こんな感じで書けるのね。・・・文字列をuint8_t型のポインタにキャスト、ということでいいのかな・・・
でも文字数を数えるのが面倒だよ、変数で指定したいよ、ということで以下のようにしてみる。

     char    *mojiretsu = "dan mitsu\r\n";


     UARTSend(LPC_USART0, (uint8_t *)mojiretsu, strlen(mojiretsu));

strlen()はstring.hで定義されているので忘れずにインクルードする。