Forums: Help (Thread #9304)

SCIでオーバーランエラーが発生してしまいます (2005-11-12 04:12 by knuth #17807)

H8/3068アドバンスモードで16MHz動作させています。
HOSの搭載を終え、SCIの受信ルーチンを登録したのですが、9600BPSでも数十バイトの受信でオーバーランエラーが出てしまいます。
受信の割り込みルーチン内では受信用のリングバッファ(内蔵RAM)にRDRの値を格納後クリアしているだけの最小限の処理にとどめているつもりです。
hospac.h内のH83_IMSK_UI_BITとH83_IMSK_LEVEL?等をからめてchg_imskやfchg_imskを適所で発行することでこの問題は解決可能なのでしょうか?
それともchg_imskやfchg_imskは目的として見当違いなのでしょうか...
受信割込みをOSの割込ハンドラーの管理から外して直接ベクタ割込みを処理する方法も試してみようかと思案中です。

Reply to #17807×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: SCIでオーバーランエラーが発生してしまいます (2005-11-12 18:45 by hamayan #17811)

すいません、今忙しくて実験できないのですが、SCIで取りこぼしを防ぐには、少なくとも割り込みの優先度を上げて使う必要があると思います。
OSの管理外の割り込みとする場合でも、やはり優先度をOSの割り込みより上げる必要があります。

H8のSCIにはバッファが無いので、結構厳しいんですよね。
Reply to #17807

Reply to #17811×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: SCIでオーバーランエラーが発生してしまいます (2005-11-14 16:05 by knuth #17841)

アドバイスいただきありがとうございます。

試行錯誤の結果、下記の方法にてオーバーランエラーが発生しなくなりました
この方法であればSCIの割り込みをOSの管理外にしなくても済みそうです。
(1024バイトの一括受信で38400BPSまで確認した結果です)


(1)スタートアップルーチンにてSYSCRのUEを1にセット、
割り込み優先順位の制御を有効にしておく。

SYSCR .equ h'fee012
mov.b #h'01,r0l ;CCR-UIビットを割込マスクビットとして使用
mov.b r0l,@SYSCR

(2)SCI0,SCI1,SCI2の初期化ルーチンにてIRPBの対応ビットを1にセット、
SCI割り込みの優先順位を上げる。

 INTC.IPRB.BIT._SCI0 = 1; /* SCI0の割り込みは高優先 */
 INTC.IPRB.BIT._SCI1 = 1; /* SCI1の割り込みは高優先 */
 INTC.IPRB.BIT._SCI2 = 1; /* SCI2の割り込みは高優先 */

(3)OSタイマ用ITU0の割り込みハンドラの入り口で割り込みマスクの設定を変更、
fchg_imskの引数はH83_IMSK_LEVEL1とする。

void OsTimer_TimerHandler(VP_INT exinf)
{
fchg_imsk(H83_IMSK_LEVEL1);
ITU.TISRA.BIT.IMFA0 = 0; /* 割り込み要因クリア */
isig_tim(); /* タイムティック更新 */
}

以上です、多重割込制御の理解があやしいのであくまで実績なのですが...
xxx_imskの使用方法が間違っいるようでしたら御指摘のほどお願いします
尚、レジスタ名称はルネサス提供CPU別ヘッダ-ファイルでの定義名称です
Reply to #17807

Reply to #17841×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: SCIでオーバーランエラーが発生してしまいます (2005-11-14 17:27 by hamayan #17842)

御世話になっています。

h83.txtの「3. H8/300H 固有の関数」を読む限り、この使い方で大丈夫そうですね。
なんとなく、H8の多重割り込みの具体例が示されたのはこれが始めての様な気がします。
貴重な情報ありがとうございます。

きっとこの後、m-araiさんが何か良い事を言うに違いない。
Reply to #17841

Reply to #17842×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: SCIでオーバーランエラーが発生してしまいます (2005-11-14 18:57 by m-arai #17846)

良いことは言えませんが出てきました。

#フォローするなら実験してみてからと思っていたら、
#出遅れました。最近、週末は気力なく寝て過ごして
#しまう傾向がありまして(-_-;

SCIの割り込み優先度を上げての多重割り込みは効果が
あったようですね。

実は使ったことはありませんが、xxx_imskの使い方は
問題ないと思います。

とまぁ、これだけでは何なので、ふと思いついた
別解(になるかもしれない)を一つ。

それは、システムが許せばの話ですが、タイム
スケールを大きくすること、場合によってはタイム
テックの供給を必要に応じて一時的に止めてしまう
ことです。

かなり無理やり(かつ疑問含み)ですが。
Reply to #17842

Reply to #17846×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: SCIでオーバーランエラーが発生してしまいます (2005-11-14 23:36 by knuth #17856)

hamayan様
m-arai様
ありがとうございました!

おかげさまで安心できました。
引き続きオーバーランエラーをモニターしながら通信部の上位層を作り込んでみます。

またよろしくお願い致します<(_ _)>
Reply to #17846

Reply to #17856×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login