UART オーバーランエラー - Community Translated (JA)

Community Translated by  MoTa_728816          Version : **

 

質問:

UART
における オーバーランエラーとはどういったものですか?
また、どのような対策が必要ですか?


回答:
オーバーランエラーは直前の1バイトが UART の受信バッファから読み出される前に次の1バイトが受信された時に発生します。これは主に 割込み処理において CPU が受信バッファから文字を取り出すまでに必要とされる時間によって、引き起こされます。もし CPU のサービスが遅く次のバイトが受信される前に割込み処理を行えなかった場合、受信バッファがいっぱいになり、オーバーランエラーが発生します。 以下にこの問題を回避するためのいくつかの手法を紹介します。


1. CPU
を可能な最大速度で動かしてください。
 UART 割込み処理(その他の割込みも含まれます。)の速度が上がります。
2. UART
の割込み処理(ISR) を可能な限り効率的かつ短くしてください。
 例えば ISR UART の受信バッファを読んで RAM バッファに移し、フラグだけをセットします。受信したデータの処理は通常処理(foreground)で行えます。 ISR の処理時間は、次のデータバイトを受信するために必要な時間より短くしてください。
3. C
言語で ISR を記述した場合、すべての仮想レジスタ、ページレジスタ、AおよびXレジスタの退避と復帰が発生します。これは ISR の実行時間を増加させます。UART の割込み処理 (ISR) をアセンブラで記述することにより、ISRをより効率的に処理できます。
4.
プログラム内の他の割込みは、その割込みによる遅延を発生し、結果的にオーバーランエラーに結び付くことがあります。 そのような状況では、UART のボーレートを低くすることによって、オーバーランエラーを回避できます