トランジスタ技術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で定義されているので忘れずにインクルードする。