Renesas Community
Search Community
User
Join or sign in
Site
Search Community
User
Renesas Engineering Community
FAQ
HELP
More
Cancel
Forums & Groups
English Community
中文社区(Chinese Community)
More
Cancel
かふぇルネ
forums-groups
Microcontrollers and Microprocessors
Other MCU/MPU Products
R8C/Tiny
More
Cancel
R8C/Tiny
106: R8C - Forum
R8C/M12Aのシリアルとポート出力のタイミング
Home
Forum
Tags
More
Cancel
New
Replies
8 replies
Subscribers
445 subscribers
Views
4307 views
Users
0 members are here
演算
TIビット
タイミング
ポート出力
外部クロック
Options
Share
More
Cancel
Related
R8C/M12Aのシリアルとポート出力のタイミング
THM
over 9 years ago
7バイトを外部クロック同期シリアルで出力し、最終ビットの送出終了時にポートから信号(ゲート)を制御したいのです。外部クロック1個以内の時間誤差は許容。
1バイトづつ7回、TIビットを見ながらU0TBに送信データを書き、7バイト目を書いた後に、NOPや空ループで調整して最終ビットのタイミングでポートから出力します。
一旦うまく行ったのですが、5バイト目を書く前に演算処理を入れたら、ポート出力のタイミングが狂ってしまいました。(演算時間は同期クロック2個分程度)
つまり、TIビットで示す、送信バッファ空になるタイミング(シリアル送信開始を基準)が、それ以前の演算などの内部処理の有無から影響を受けるのでしょうか?
シリアル回路は外部クロック動作だから、こんな事は無いと思うのですが。
ご意見や対策、よろしくお願いします。
Kirin
over 9 years ago
THMさん
感覚的な話ですけども、、、
演算処理の実行クロック数が一定ではないのかもしれませんね。
乗除算や分岐などアルゴリズムの影響を受けて、
演算のたびに実行クロック数が変わることはあると思います。
Cancel
Up
0
Down
Reply
Cancel
THM
over 9 years ago
Kirinさん、有難うございます。
質問者のTHMです。
演算(加算のみ・明文的分岐なし)が仮にクロック数変化したとしても、バッファリングが効いて、送信バッファ空に応じて最終バイトを書き込むタイミングは変わらないと思うんです。
そのタイミングから一定ウェイト後のポートもまた不変のはず。
でもオシロで変化してるのが見える。
どうしてだろう?
Cancel
Up
0
Down
Reply
Cancel
Kirin
over 9 years ago
THMさん
確かに!
バッファリングが効いていれば多少のクロックずれが発生してもズレは吸収されそうですよね。
演算によって送信データを書くタイミングが大幅に(1送信分以上)ズレていない限り大丈夫そうな気がしてきました。
Cancel
Up
0
Down
Reply
Cancel
Kon Nozomu(すと)
over 9 years ago
THMさん
送信完了(TI/TXEPT)割込み使用の想定でコメントします。
・TIを確認の後、送信バッファに書込む
・5バイト目を書く前に演算追加
・7バイト目書込み後、NOP等調整を経て信号出力
とあります。
TIビット基準であることから、以前は
TI確認 ┬ バッファ更新
◇ 7バイト目-調整-信号出力
であったのが、今回は
TI確認 ◇ 5バイト目-演算
├ バッファ更新
◇ 7バイト目-調整-信号出力
のようなイメージでよろしいでしょうか?システムクロックと外部クロックの関係は分かりませんが、5バイト目という判定が入ったことによって従来の処理に対して7バイト目のタイミングがずれることは有りうるのでは?と思いました。
信号出力は最終ビット送信後とあるので、割込み内でU0C1.U0IRS=1(TXEPTI=1):送信完了時のタイミングで行うというのはいかがでしょうか。
認識が間違っていたら申しわけありません。
by すと@kon
XKKhJHy7UlxwAY2R-0_A0405.jpg
Cancel
Up
0
Down
Reply
Cancel
THM
over 9 years ago
すと様
コメント有難うございます。
が、初めはお示しのようにループ構造でしたが動作確認してるうちに
while(ti_u0c1 != 1); u0tbl=data[n]; (nは0~6)
の7回繰り返しになりました。5回目の後に演算しますが。
whileでバッファ空待ちするか、演算してから空待ちするかの違いでバッファ空になるタイミングが変わる?しかも次の次の回での送信バッファ空タイミングが変わる?
txeptは動作例(16.3図)を見ると最終bit送出とは意味が違うようです。これも含めて、回路ハードのイメージでUART0同期モードの動作が判る資料が欲しいものです。
Cancel
Up
0
Down
Reply
Cancel
Kon Nozomu(すと)
over 9 years ago
THMさん
演算順序によって後のタイミングが変わる事については確かに解せませんね。
TXEPTビットについてですが、図16.3の送信タイミングを見ると、D7を送信(D7ラッチ->クロックアップで送信)し終わって1/f1のディレイ後にビットが立つことから、やはり最終ビットの送信完了とみていいと思います。送信例は内部クロックとなっていますが、外部クロックに置き換えれば動作は同じです。
by すと@kon
Cancel
Up
0
Down
Reply
Cancel
チョコ
over 9 years ago
スタッフのチョコです。
THM様のスレッドにコメントさせていただきます。
R8C/M12Aの動作クロックと,同期シリアル通信用の外部入力クロックとの関係(比率)やどのような処理を行っているかがわからないので,正確なことはコメントできません。
演算とデータ書き込みの順序で状態が変わると言うことは,通信時間に比べて処理時間のマージンが少ないと考えられます。
どちらにしましても,情報が乏しくて正確な判断ができません。詳しい情報を開示いただければ,より正確なコメントができる可能性がございます。
なお,TXEPTは転送の完了(相手側がデータの最終ビットを受け取った)タイミングを示しています。つまり,このタイミングを確認して次の処理行えばいいことになります。単純に転送完了を確認するなら,このビットを確認してください。
Cancel
Up
0
Down
Reply
Cancel
THM
over 9 years ago
皆様有難うございます。質問者のTHMです。
詳細を開示して相談したいのはヤマヤマですがCLK周波数など書けない事情があり、失礼します。
要は送信バッファ空(ti=1)となるタイミングの仕様・条件が知りたいのです。
マニュアルでは、送信レジスタに残データが有/無だけでti変化のタイミングが定まるようですが、その他に、例えば空き待ち時間中の演算の有無にも影響されるのでは?と言う疑問です。
なお、Txeptの件は「最終bit」の定義が違いました。私は全Byteの最終1bitのつもりでしたが、確かに各Byteの最終bitを示しますね。失礼しました。
動作目標はクリアできてるのですが、バッファ空タイミングが不思議だったので皆様のご意見うかがいました。
Cancel
Up
0
Down
Reply
Cancel