Armadilloフォーラム

SCIFBのRX FIFO のタイムアウト機構について

t-takeuchi

2016年4月4日 21時09分

お世話になります。
竹内と申します。

SCIFB0(CON16) のシリアルドライバを独自で作成しようとしている者です。

割り込みモードで、SCIFB0 のRX FIFOにたまったデータを処理しようとしています。

FIFO が FULL になれば、Receive FIFO Data Fullの割り込みの通知でデータ処理可能ですが、これだけではなく、
FIFO が FULL にならなくとも、ある程度受信データがたまったら、割り込みでそのことをドライバに通知させたいです。

SCIFであれば、タイムアウトの割り込み(TO)を有効にすることで、この要求を実現できますが、
SCIFBは、私が調べる限り、タイムアウト割り込みは未サポートです。

SCIFBに備わる機能を利用して、SCIFのタイムアウト割り込みに相当することをSCIFBで
実装しようとしたのですが、うまくいきません。

割り込みモードで、SCIFBでこの要求を実現するためのうまい方法があれば、お知恵をおかりできませんか?
なお、ポーリングによるデータ処理は現在のところ考慮に入れていません。

以上、よろしくお願いします。

コメント

at_yuma.arakawa

2016年4月5日 12時48分

> SCIFであれば、タイムアウトの割り込み(TO)を有効にすることで、この要求を実現できますが、
> SCIFBは、私が調べる限り、タイムアウト割り込みは未サポートです。

SCBSSRは確認しましたでしょうか。
ビット0のReceive Data Readyでタイムアウトを実現できるかと思われます。

詳しくは、RZ/G Series User's Manual: Hardware[1]の
53.3.8 Serial Status Register Bn (SCBSSRn)
bit0:Receive Data Ready
を確認してみてください。

[1]: http://japan.renesas.com/products/mpumcu/rz/rzg/rzg1m/Documentation.jsp

kes-konishi

2016年4月5日 15時49分

KES)小西です。

勘違いだったらごめんなさい。

タイマを張るとCPU負荷が上がります。
なので、ドライバ内でHSRTRGRのRTRGで1BYTE設定にすると、
FIFO-Fullの割り込みが1BYTEで発生すると思いますが、
勘違いでしょうか。。。
レジスタの初期値が1なので、128とかに書き換えていればですが。。。

t-takeuchi

2016年4月6日 11時12分

小西さま

おせわになります。
竹内です。

> KES)小西です。
>
> 勘違いだったらごめんなさい。
>
> タイマを張るとCPU負荷が上がります。
> なので、ドライバ内でHSRTRGRのRTRGで1BYTE設定にすると、
> FIFO-Fullの割り込みが1BYTEで発生すると思いますが、
> 勘違いでしょうか。。。
> レジスタの初期値が1なので、128とかに書き換えていればですが。。。

コメントありがとうございます。
荒川様のアドバイスで本件解決しました。

> なので、ドライバ内でHSRTRGRのRTRGで1BYTE設定にすると、
> FIFO-Fullの割り込みが1BYTEで発生すると思いますが、
> 勘違いでしょうか。。。

Yesです。

アドバイスいただいた通り、FIFOの閾値を 1 byte にセットすることで要求を実現できますが、

大量データを受信した場合、処理しきれずにオーバーフローが発生するため、
FIFOの閾値を16byte以上に設定する必要がある、という前提条件がございました。

# 前提条件の提示が漏れており、申し訳ありませんでした。

以上、よろしくお願いいたします。

t-takeuchi

2016年4月6日 11時08分

あらかわさま

お世話になります。
竹内です。

> > SCIFであれば、タイムアウトの割り込み(TO)を有効にすることで、この要求を実現できますが、
> > SCIFBは、私が調べる限り、タイムアウト割り込みは未サポートです。
>
> SCBSSRは確認しましたでしょうか。
> ビット0のReceive Data Readyでタイムアウトを実現できるかと思われます。
>
> 詳しくは、RZ/G Series User's Manual: Hardware[1]の
> 53.3.8 Serial Status Register Bn (SCBSSRn)
> bit0:Receive Data Ready
> を確認してみてください。
>
> [1]: http://japan.renesas.com/products/mpumcu/rz/rzg/rzg1m/Documentation.jsp

ご教授ありがとうございます。

> ビット0のReceive Data Readyでタイムアウトを実現できるかと思われます。

SCBSSR の ビットDR (=ビット0のReceive Data Ready)を制御することで、
要求どおり、FIFO FULLにならなくとも受信データをさばけるようになりました。

解決しました。

「Receive Data Ready」の技術仕様をちゃんと読み込んでいなったのが原因です^^;

初歩的なミスで、お手数をおかけしてしまい、申し訳ありませんでした。
また、手厚いサポート、ありがとうございました。

以上です。