CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

USARTのエラー処理

近所の住宅街を歩いてきたデータをトレースした例です。
データインポートしたあとそのままだとWGS84測地系でトレースされ実際より数百mずれるので
データ属性をTokyo測地系にしてやります。
背景の地図は許認可の関係で消していますが、ずれはほぼ道幅以内であり
精度は数m程度でしょうか。
ただ建物の傍とか、樹木の下など空が眺望できないところではとたんに測位不可能になります。
イメージ 1



ところでUSARTのエラー時の処理ですがマニュアルにはほとんど記載がありません。
そこでアプリケーションノートAN774をよく見てみると、確かに

Once an overrun error occurs, no new data will be received until the receive logic has been
RESET by clearing the receive enable bit, CREN, and enabling it again.

と書かれています。
そこで受信ルーチンの直前で以下のようにエラーを払うことでいつでも受信の再開ができるようになりました。

if(RCSTA1bits.OERR){ //オーバランエラー検出
  RCSTA1bits.CREN=0; //エラークリア
  RCSTA1bits.CREN=1;
}

8251みたいなFIFOがないデバイスでは気にしてませんでしたが。
まあ本来なら受信割込みでハンドリングするのが正解でしょうね