Atmel Studioで、AVRマイコンのUARTを使用する方法を説明していきます。
UARTのサンプル・コード
非常に簡単なサンプル・コードで、UARTの制御方法を説明していきたいと思います。
//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