Atmel Studioで、AVRマイコンのUARTを使用する方法を説明していきます。
UARTのサンプル・コード
非常に簡単なサンプル・コードで、UARTの制御方法を説明していきたいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
//UART Sample Code //Target Device: ATmega328p //Author: easy labo //Date: 2014.11.02 #include <avr/io.h> void InitUart(void){ #if 0 //If U2X2n = 0, Asynchronous Normal mode //BAUD Rate = Fosc/[16*(UBRRn+1)] UBRR0 = 51; //9,600bps@8MHz #else //If U2Xn = 1, Asynchronous Double Speed Mode //BAUD Rate = Fosc/[8*(UBRRn+1)] UBRR0 = 25; //38,400bps@8MHz UCSR0A = _BV(U2X0); #endif //Receiver and Transmitter Enable //UCSR0B = _BV(RXEN0)|_BV(TXEN0); UCSR0B = 0b00011000; //Async, Non-parity, Stop Bit=1, Data Bit=8 //UCSR0C = _BV(UCSZ01)|_BV(UCSZ00); UCSR0C = 0b00000110; } void TransCharUart(unsigned char c){ while( !(UCSR0A & _BV(UDRE0)) ); UDR0 = c; } unsigned char RecieveCharUart(void){ while( !(UCSR0A & _BV(RXC0)) ); return UDR0; } |
9行-19行
UBRRnでBAUD Rateの設定を行います。なお、UCSRnAのU2X0で倍速モードを設定できます。マイコンのクロック周波数、Fosc(F_CPU)に依存しますので、ターゲット周波数に近い値になる様にします。
21行-23行
UARTのレシーバーとトランスミッターを有効化しています。
25行-28行
パリティ、ストップビット、データビットの指定を行っています。
30行-33行
一文字を発信する関数になります。UCSRnAのUDRE0が”1″になると発信する準備が出来ています。文字の発信は、UDRxに値を入力して行います。
35行-38行
一文字を受信する関数になります。UCSRnAのRXC0が”1″になると文字を受信した状態です。UDRnの値が、受信データです。
以上が、基本的なUART制御の手順ですが、ターゲットのAVRマイコンのデータシートで、レジスタ表などの詳細を確認してプログラミングします。
まとめ
実際の製品設計では、エラー処理や割り込みによる文字列の送受信などを実装し、上記の例より複雑なものになります。しかし、UART制御の基礎部分は、上記の例にあるレジスタを介して行う事に変わりありません。
Sponsored Link