Atmel Studio入門:UART

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制御の基礎部分は、上記の例にあるレジスタを介して行う事に変わりありません。

→その他のAtmelマイコン関連情報

Sponsored Link