RL78/L13を使用して設計を行っています。
消費電流を抑えるために待機時はSTOPモードにしています。
STOPから復帰後約1mseウエイトを入れたのち周辺機能を動作させていますが、
UARTの送信がどうも正常にできていない状態です。
UARTはUART2を使用しており送受信とも動作許可しています。
受信は正常に割り込みが入りデータの読み出しもできているのですが、
送信はレジスタにデータを書き込んでも端子から出力されない状態です。
少し他の処理を進めた後だと問題なく送信もできているのですが、
なぜかSTOP復帰直後の送信だけがうまく動かない状態です。
解決策等をご存じの方がおりましたらご教授いただけますでしょうか?
チョコです。
通信を行う際には、STOPモードは注意する必要があります。少なくとも、私はこのような使い方はしません。
具体的な設定がどうなっているかが全く不明なので、きちんとしたことは答えられません。
例えば、STOPモードにするときにはUARTの設定は完全に動作を禁止状態にしていますか。
また、受信ができて、送信ができないことから想像すると、シリアル・スタンバイ・コントロール・レジスタのSWC1ビットが1になっていて、「SNOOZEモード機能」が有効になっているような気がします。この場合には、受信だけが動作し、送信はできません。
>STOPから復帰後約1mseウエイトを入れたのち周辺機能を動作させていますが
具体的なUART2のレジスタの設定を明確にしてください。
以上
ご返答ありがとうございます。
レジスタの設定値は以下にしています。
初期設定
SMR10=0x0022
SCR10=0x8097
SDR10=0x4400
SMR11=0x0122
SCR11=0x4497
SDR11=0x4400
STOP遷移直前に設定
ST1=0x0003
SOE=0x0000
STOPから復帰後に設定
SO1=0x0001
SOE=0x0001
SS1=0x0003
初期設定は自動生成されたR_UART2_Create()を使用しており設定を見落としていたので、
初期設定時にSSC1に0x0000を入れるようにしてみましたが特に変わりなかったです。
さらに今回の現象としては、
STOP復帰して少し時間が経過したのちに再度送信処理を行うと送信が正常に出力されるのが、自分としてはよくわからない状態です。
STOPから復帰後に「SO1=0x0001」とされていますが、STOPに入る前のSO1はどうなっているのでしょうか。
(どのような状態でSTOPに入れようとしているか)
TxD2がLowの状態(SO10=0)でUART2を停止すると、UARTの信号としてはブレーク状態となってしまうので、STOPする前にはSO10を1にしておく必要があります。ここらあたりを確認してください。
ハードウェア マニュアルを眺めていたら、以下のようなフローが記述されていました。
STOPモードにする場合(SNOOZEモードにしない場合)にはこの処理を行って、STOP解除後は初期設定からやり直したらどうでしょうか。
L13で単純にSTOP解除後どのぐらい待つと送信データが出力されるか見てみたのですが、
community-ja.renesas.com/.../r_5F00_cg_5F00_main_5F00_c.txt
端末には
-----
bootSTOP0123456789
と出力されたので、添付のコードで試した限りでは、STOP解除直後のデータも、TXD2から出て来ています。こちらで試した限りでは、一定時間送信データが出ないという現象は再現させられませんました。(クロックは、内蔵クロックとXTALの両方試しました。)
(起動後、タイマで10秒経過するとSTOPモードに入れる。INTP0(P137)=LでSTOPから復帰させています。)
なお、
while((SSR10 & 0x0040) != 0) __nop(); //送信完了を確認
上記を入れないでSTOPモードに入れると、TXD2=LでSTOPモードに入り(STOPモードの間はTXD2=L)、出力データは文字化けしました。(が、STOP解除後も直ぐにデータは出ていました)
一度この方法を試してみます。
添付のコード参考にさせていただき、現在のコードと比較してみます。