-
最近の投稿
- 最近のコメント
- CNCオーバーホール に より
- 部内対抗ラインとレーサー大会2 に より
- CNCオーバーホール に より
- CNCオーバーホール に より
- ロボカップジュニア2013 京滋奈ブロックの結果 に より
- カテゴリー
- 52期サッカー班
- 52期レスキュー班
- 55,56期サッカー班(Glam)
- 55期サッカー班
- 55期レスキュー班
- 56期サッカー班
- 56期レスキュー班
- 56期レスキュー班(Iris)
- 58,59レスキュー班
- 58,59期サッカー班(CORE)
- 58期サッカー班(BenzyI)
- 60期レスキュー班(現the Reticle 旧Scorpion)
- 61st soccer(Perseus(仮))
- 62期レスキュー班
- Android
- AndroidStudio
- Aquila
- ATxmega関連
- CNC
- DD-Project
- H.K.T.T
- HARP
- ROOT
- SH-2A
- STM32
- TEPIA
- TTT
- Windows
- Windows10
- お知らせ
- クラブ全般
- パケットキャプチャ
- ブログ
- 小ネタ
- 文化祭
- 未分類
- 証明書
- アーカイブ
- オフィシャル
- 他のクラブ
- 会社
- サイト情報
- Amazonサーチ
« 二年連続採択されました! |
ATxmegaのUART通信について。
どうもこんにちは。Shunです。
今回はxmegaのUART通信のソースを公開していきたいと思います。
UART通信って何?っていうひとはggrks Google大先生に聞いてください。
テスト環境はUSARTE1でATxmega128a1uの内部発振子32MHzでボーレート9600bpsです。
ではではコード説明に移りましょう。
void init_usart(void){
PORTE.DIRSET=PIN7_bm;//PORTE7をOUT設定
PORTE.DIRCLR=PIN6_bm;//PORTE6をIN設定
USARTE1_BAUDCTRLA =207 ;//USARTE1のボーレート設定
USARTE1_BAUDCTRLB =0x00 ;//USARTE1のボーレート設定
USARTE1.CTRLC = (USARTE1.CTRLC & ~USART_CHSIZE_gm) | USART_CHSIZE_8BIT_gc;//データbit数設定
USARTE1.CTRLB = (USART_RXEN_bm | USART_TXEN_bm);//TXD,RXD許可
}
以上がUSARTのイニシャライジングです。
特に何もいうところはありませんね。
ボーレート設定はデータシートを読んでください。
以下、データ送信です。
void usart_send(char c)
{
while( !(USARTE1_STATUS & USART_DREIF_bm) ); //Wait until DATA buffer is empty
USARTE1_DATA = c;
}
void usart_string(char *text)//文字データ送信
{
while(*text)
{
usart_send(*text++);
}
}
void usart_putdec(uint16_t data){//4桁数列送信
usart_send(data/1000 + ‘0’);
data %= 1000;
usart_send(data/100 + ‘0’);
data %= 100;
usart_send(data/10 + ‘0’);
data %= 10;
usart_send(data + ‘0’);
}
特にいうことなしですね。
まあ。こんな感じでしょう。
送信完了割り込み等はしておりません。
将来的にできるようになりたいなと。。。
今回は以上ですね。
今はI2CとSPIに苦戦中です。
最後にソースをまとめたものを。
void init_usart(void){
PORTE.DIRSET=PIN7_bm;//PORTE7をOUT設定
PORTE.DIRCLR=PIN6_bm;//PORTE6をIN設定
USARTE1_BAUDCTRLA =207 ;//USARTE1のボーレート設定
USARTE1_BAUDCTRLB =0x00 ;//USARTE1のボーレート設定
USARTE1.CTRLC = (USARTE1.CTRLC & ~USART_CHSIZE_gm) | USART_CHSIZE_8BIT_gc;//データbit数設定
USARTE1.CTRLB = (USART_RXEN_bm | USART_TXEN_bm);//TXD,RXD許可
}
void usart_send(char c)
{
while( !(USARTE1_STATUS & USART_DREIF_bm) ); //Wait until DATA buffer is empty
USARTE1_DATA = c;
}
void usart_string(char *text)//文字データ送信
{
while(*text)
{
usart_send(*text++);
}
}
void usart_putdec(uint16_t data){//4桁数列送信
usart_send(data/1000 + ‘0’);
data %= 1000;
usart_send(data/100 + ‘0’);
data %= 100;
usart_send(data/10 + ‘0’);
data %= 10;
usart_send(data + ‘0’);
}
コメントはありません »
コメントお待ちしております!
RSS feed for comments on this post. TrackBack URL