お世話になります。sei10です。
RX210のSCIのTENDフラグについて質問させてください。
RX210のハードウェアマニュアル内、SCI(シリアルコミュニケーションインターフェース)にて、
TENDフラグ(トランスミットエンドフラグ)送信が終了したことを表示します。[“1”になる条件]•SCR.TEビットが“0”(シリアル送信動作を禁止)のときSCR.TEビットを“0”から“1”にするときは、TENDフラグは影響を受けず“1”の状態を保持します。•送信キャラクタの最後尾ビットの送信時、TDRレジスタが更新されていないとき[“0”になる条件]•SCR.TEビットが“1”の状態でTDRレジスタへ送信データを書き込んだときTDRレジスタへの送信データの書き込みによりTENDフラグをクリアしたときは、以下の順序でSSRレジスタをダミーリードしてください。(1)TDRレジスタに送信データを書く(2)SSRレジスタを汎用レジスタに読み出す(3)読み出した値を使って何らかの演算を実行する
との記載があります。
[“0”になる条件]で2つ気になることがあります。
①TEビットが1のままでTDRレジスタに間欠的に送信データを書き込んだ際は、送信完了後にTENDレジスタを使う使わないに関わらず、SSRレジスタをダミーリードしなければならないということなのでしょうか?
②恥ずかしながらこの一文を見落としていたため、TENDをif文で直に比較しているプログラムがあります。if( 1 == SCI4.SSR.BIT.TEND ){ 処理}アセンブラで見ると、 MOV.L #0008A083H, R1 SCI4を汎用レジスタR1に読み出し MOVU.B 01H[R1], R1 構造体オフセットを取ってR1に読み出し SHLR #02H, R1 汎用レジスタR1を2ビット分論理右シフト AND #01H, R1 数値1と汎用レジスタR1の論理積を取りR1へ格納 CMP #01H, R1 数値1と汎用レジスタR1を比較し、結果をR1へ格納 BNE L204 異なっている場合はL204へ分岐のような処理となっていました。たまたまコンパイラが汎用レジスタにリードしてくれているため動いているという認識で良いでしょうか?(コンパイラに依存するプログラムになってしまっている?)
よろしくお願いします。