AVR Libc Home Page | AVR Libc Development Pages | ||||
Main Page | User Manual | Library Reference | FAQ | Alphabetical Index | Example Projects |
定義 | |
#define | BAUD_TOL 2 |
#define | UBRR_VALUE |
#define | UBRRL_VALUE |
#define | UBRRH_VALUE |
#define | USE_2X 0 |
#define F_CPU 11059200 #define BAUD 38400 #include <util/setbaud.h>
このヘッダファイルは、F_CPUとBAUDが定義済みで値が入っていることを必要とします。その上、BOAD_TOLマクロは、計算において許容できるボーレートの許容誤差を(パーセントで)定めます。BAUD_TOLの値は、標準で2%です。
このヘッダファイルは、AVRのUARTボーレートのプリスケーラレジスタ用のマクロを定義します。全ての計算は、Cプリプロセッサを使用しています。このヘッダファイルを読み込むことは、他のいかなる副作用も引き起こさないため、(たぶん、BOADパラメータの値が異なっていても)複数回このファイルを読み込むことができ、同じ関数内においても可能です。
要求されたBAUDが与えられたF_CPUで有効と仮定すると、UBRR_VALUEマクロは必要なプリスケーラの値をセットします。さらに2つのマクロは、プリスケーラの下位と上位バイトに対してそれぞれ用意されており、UBRRL_VALUEはUBRR_VALUEの下位バイトに設定され、UBRRH_VALUEは上位バイトに設定されます。さらに、USE_2Xマクロを設定できます。もし、指定された許容誤差内において、希望するBAUDレートが、UART設定においてU2Xビットを設定することで提供できるならば、この値が1に設定されます。U2Xが必要ないならば、その値は0と定義されます。
使用例:
#include <avr/io.h> #define F_CPU 4000000 static void uart_9600(void) { #define BAUD 9600 #include <util/setbaud.h> UBRRH = UBRRH_VALUE; UBRRL = UBRRL_VALUE; #if USE_2X UCSRA |= (1 << U2X); #else UCSRA &= ~(1 << U2X); #endif } static void uart_38400(void) { #undef BAUD // avoid compiler warning #define BAUD 38400 #include <util/setbaud.h> UBRRH = UBRRH_VALUE; UBRRL = UBRRL_VALUE; #if USE_2X UCSRA |= (1 << U2X); #else UCSRA &= ~(1 << U2X); #endif }
この例では、それぞれ9600ボーと38400ボーで動くUARTを設定した2つの関数を定義しています。4MHzのCPUクロックを使うと、9600ボーは、U2Xの設定を使わずに許容誤差を満足に達成(プリスケーラ25)でき、一方で38400ボーはU2Xを設定することを必要(プリスケーラ12)とします。
#define BAUD_TOL 2 |
<util/setbaud.h>のための入出力マクロ
ボーレート許容誤差をパーセントで定義。設定されてなければ、標準値の2に設定されます。
#define UBRR_VALUE |
<util/setbaud.h>からの出力マクロ
UBRRレジスタ用の計算されたボーレートのプリスケーラー値を含みます。
#define UBRRH_VALUE |
<util/setbaud.h>からの出力マクロ
計算されたプリスケーラ値(UBRR_VALUE)の上位バイトを含みます。
#define UBRRL_VALUE |
<util/setbaud.h>からの出力マクロ
計算されたプリスケーラ値(UBRR_VALUE)の下位バイトを含みます。
#define USE_2X 0 |
<util/setbaud.h>からの出力マクロ
UART設定においてU2Xビットを設定することで希望するボーレート許容誤差を実現できるなら、1の値を含みます。そうでなければ0を含みます。