Top Page [◀◀] 2 3 4 5 6 7 8 9 ... [▶▶] Last Page
のーしゃんです。
RX111でSCI5とSCI1の調歩同期通信で送信割込みをほぼ同時に開始させるように以下のコードを書きました。SCI5.SCR.BIT.TIE = 1;SCI1.SCR.BIT.TIE = 1;SCI5.SCR.BIT.TE = 1;SCI1.SCR.BIT.TE = 1;
SCI5に230,400bpsとSCI1に230,400bpsの同じ場合は、2μS程度のズレで送信されています。下の画像の黄色がSCI5で緑がSCI1の通信ドライバーICの出口の波形です。
次に両SCIが38,400bpsの場合は25μS程度のズレになります。
ところがSCI5に230,400bpsでSCI1に38,400bpsにすると大きくズレます。
240μS程度もズレます。割込みの優先順位を操作しても殆ど変化はありません。
基本的に同じBaudrate同士で使うので問題ないのですが、Baudrateが異なるとこのようになるのでしょうか?
SCIの動作が分周によって動作開始のスケジューリングが違うのかな?
のーしゃん
In reply to fujita nozomu:
In reply to リカルド:
リカルドさん、アドバイスありがとうございます。のーしゃんです。やってみました!
以下のI/Oをトリガーにしました。PORTB.PODR.BIT.B3 = 1;PORTB.PODR.BIT.B3 = 0;PORTB.PODR.BIT.B3 = 1;
送信割込みを有効するSCI5.SCR.BIT.TIE = 1;SCI5.SCR.BIT.TE = 1; の後と
送信割込みのExcep_SCI5_TXI5関数の最初にSCI5.TDRにライトする手前にトリガーコードを入れました。230,400bpsではTDRにライトしてから44μSくらいなので10bit時間かかっています。
38,400bpsの方は295μSくらいなので11bit時間です。
TDRからTSRまではビットシフトで転送している感じですね。
すっきりしました。
In reply to のーしゃん:
リカルドさん、ごめんなさい。
シングルポートで計測していました。2ポートで擬似同期のSCI5.SCR.BIT.TE = 1; SCI1.SCR.BIT.TE = 1;の前にトリガーコードを入れました。黄色が230,400bpsで緑色が38,400bpsで紫色がトリガー信号です。先ほどの38,400bpsの画像で右の方に太く出ているパルスがありますが、トリガー信号は他で使っている信号に加えているためです。今回はトリガー信号のみ出るように細工しました。
画像下のズーム部でトリガー位置から50μSくらいで230,400bpsの送信開始、320μSくらいで38,400bpsの送信開始ですね。
擬似同期送信でPORTB.PODR.BIT.B3 = 1;PORTB.PODR.BIT.B3 = 0;PORTB.PODR.BIT.B3 = 1;SCI5.SCR.BIT.TE = 1;SCI1.SCR.BIT.TE = 1;として、SCI5とSCI1の送信割込みのフレームデータの最初1バイトをTDRにライトする前でPORTB.PODR.BIT.B3 = 1;PORTB.PODR.BIT.B3 = 0;PORTB.PODR.BIT.B3 = 1;します。トリガー信号が2個用意できなかったので1個とします。
左下の赤丸の部分に3個のLowパルスがあります。最初が .TE=1 の部分で次の2個のパルスがSCI5とSCI1のTDRにライトする直前です。SCI5とSCI1の区別はつきませんが、5μSのズレなので、ほぼ同時で良いと思います。
この最初のTDRのライトからボーレイトに応じたシフトアウト時間がTSRの通過時間である1キャラクター時間に一致していると思います。TSRが空でもTDRからTSRへの転送時間は1キャラクター時間かかることが、今回のボーレイト違いによるズレということと思います。