Microchip AVR8 用のライブラリを自作する。(USART)

とりあえず非同期通信のみ実装してみた。送受信とも割込み処理とポーリング処理のどちらかを選択できるようになっているので最大通信速度とコードサイズの兼ね合いによりどちらか適切なほうで動作させることができる。

それと1本の信号線で送受信を行うモード(オープンドレイン&ループバックモード)にも対応してみた。但し、テストしてないので動くかどうかはわからないが...(-_-;)

AVR0/1シリーズでのボードレート周波数誤差補償は出来なくなるがUSART_ASYNC_BAUDRATE()マクロを使って通信速度を指定したほうがコードサイズは小さくなる。もし、通信エラーが出るようならマクロは使わないこと。

割込み処理の有効化はCONFIG_USART_ISRに1を設定する。
[avr8_config.h] #define CONFIG_USART_ISR 1

ポーリング処理の有効化はCONFIG_USART_ISRに0を設定する。但し、Usart::poll()を実行する必要あり。
[avr8_config.h] #define CONFIG_USART_ISR 0

受信バッファリングを有効化するにはCONFIG_USART_RXBUF_SIZEに1以上を設定。
[avr8_config.h] #define CONFIG_USART_RXBUF_SIZE 8

送信バッファリングを有効化するにはCONFIG_USART_TXBUF_SIZEに1以上を設定。
[avr8_config.h] #define CONFIG_USART_TXBUF_SIZE 8

【サンプルコード (Microchip Studio)】

【修正履歴】
2026-07-26
USART1以降が誤動作するのを修正&送受信割込み処理のタイミングバグ修正とエラーステータスの確認用にerror()を追加。

・タイミングバグあり
_txbuffer[txpos(_txwrpos++)] = c;

・正しい例
_txbuffer[txpos(_txwrpos)] = c;
++_txwrpos;

2026-07-22
単線動作のループバック受信データ処理を改良。

2026-07-18
単線動作(ループバック&オープンドレインモード)の正式な対応。送信ピンに1KΩ程度の抵抗を経由して受信線と接続する汎用的な単線接続回路と同じ動作ができる。接続距離が長い場合は送信ピンに1KΩ程度のプルアップ抵抗が必要となるが短距離であれば内部プルアップされるため外付け抵抗は不要となる。送信ピンのみで動作し受信ピンは別の用途に使えるのが便利かも。ちなみに送信時のループバック受信データは送信処理時にコンフリクト判定&破棄するためアプリ側で受信データを破棄する必要はない。
それと受信時のタイムアウト処理を追加。タイムアウト処理を行うにはtimeout()メソッドによりタイムアウト時間を設定すること。タイムアウトの規定値はゼロなので設定しない場合は即時にタイムアウトする。

2025-12-23
複数タスクから同時に文字列出力を行なえるようlock()/unlock()メソッドを追加。

2025-12-12
コンストラクタにTXD/RXDピン指定を追加。

【ライブラリ】

【関連投稿】
Microchip AVR8 用のライブラリを自作する。(GPIO)
Microchip AVR8 用のライブラリを自作する。(FUSE)
Microchip AVR8 用のライブラリを自作する。(CLOCK)
Microchip AVR8 用のライブラリを自作する。(RESET)
Microchip AVR8 用のライブラリを自作する。(PORTMUX)
Microchip AVR8 用のライブラリを自作する。(USART)
Microchip AVR8 用のライブラリを自作する。(RTC)
Microchip AVR8 用のライブラリを自作する。(TCA)
Microchip AVR8 用のライブラリを自作する。(TCB)
Microchip AVR8 用のライブラリを自作する。(VREF)
Microchip AVR8 用のライブラリを自作する。(DAC)
Microchip AVR8 用のライブラリを自作する。(AC)
Microchip AVR8 用のライブラリを自作する。(ADC)
Microchip AVR8 用のライブラリを自作する。(ZCD)
Microchip AVR8 用のライブラリを自作する。(SPI)
Microchip AVR8 用のライブラリを自作する。(TWI)
Microchip AVR8 用のライブラリを自作する。(MAIN)
Microchip AVR8 用のライブラリを自作する。(CONFIG)
Microchip AVR8 用のライブラリを自作する。(ALARM)
Microchip AVR8 用のライブラリを自作する。(TASK)
Microchip AVR8 用のライブラリを自作する。(CCL)
Microchip AVR8 用のライブラリを自作する。(TCD)
Microchip AVR8 用のライブラリを自作する。(TCE)
Microchip AVR8 用のライブラリを自作する。(WEX)
Microchip AVR8 用のライブラリを自作する。(TCF)
Microchip AVR8 用のライブラリを自作する。(CPUINT)
Microchip AVR8 用のライブラリを自作する。(DOWNLOAD)