R8C/M36シリーズで、UART0を使用して、RS232C通信を行っていますが、たまにオーバーランエラーが発生します。
メインクロックは20MHzで、ボーレートは115200bpsです。
受信データの取込は、以下の割込み関数内で行っています
割り込みを処理を行う前、またはデータ読み込み前に何か設定することはあるのでしょうか?
また、通信速度が速いとオーバーランエラーは、まれに発生することはあるのでしょうか?
だれか教えてください。
//割り込みは常に許可
#pragma interrupt _uart0_receive(vect=18)void _uart0_receive(void){
bRecvData.word = u0rb; //受信データ読み込み
if( bRecvData.byte.high & 0xF0){
//エラー判定 エラー状態の場合は、必ずオーバーランエラーのフラグが立っている。
}
bosssaさん
受信割り込み以外の別の処理を割り込みで行っている場合、 そっちの処理が1バイトを受信する間隔よりも長いとオーバーランします。 そのため、通信速度によってオーバーランの頻度が変わるようでしたらば、受信割り込み以外の割り込みを見直すと良いかもしれません。
対策としては、 受信割り込みのプライオリティを最高位にあげて(受信割り込み内では多重割り込み禁止設定)、 受信割り込み以外の他の割り込みは多重割り込みを許可しておくことで 素早く受信割り込み処理を行うことができるのでオーバーランが発生しなくなります。