リストの皆さん、いつもお世話になっております。
自力で解決しました。
以下ソースを訂正して対処済み
誤
SCI0.SCR.BIT.TE = 1; // 送信許可
SCI0.SCR.BIT.RE = 1; // 受信許可
正
SCI0.SCR.BYTE = SCI0.SCR.BYTE | 0x30; // 送受信同時に許可!
上の対策で同期クロック送受信のビットズレ解消しました。
5MHzでも問題ありません。
有難う御座いました。
たけうち
----- Original Message -----
From: "Koji Takeuchi" <ktakeuchi@xxxxxxxxxxxxxxxxx>
To: <h8@xxxxxxx>
Sent: Wednesday, November 16, 2005 7:27 PM
Subject: [H8-ML(5743)] H8S/2398同期シリアルについて
> リストの皆さん、いつもお世話になっております。
>
> 件名のCPUについて教えて下さい。
>
> シリアルポート0(ゼロ)を同期クロック付送受信させています。
>
> 同期クロックはCPU(SCK0)から出力しています。
>
> スレーブはこのクロックに同期してCPUにデータを返信します。
>
> で問題ですが。
>
> 同期クロックを1Mbpsより早くすると受信するデータが1bitズレマス。
>
> 例えば、スレーブの送信が0xaaであれば、CPUの受信データは0x55となってしまいます。
>
> スレーブからの送信データのクロックエッジ(立ち上がり)に対してのタイミングは
>
> セットアップ時間=60nS、ホールド時間=120nSで一見してノイズもなく問題ない波形です。
>
> (測定個所はCPU端子付近)
>
> まとめますと
>
> OK 1Mbps=(XTAL20Mhz駆動でCKS=00、BRR=4)
>
> NG 2.5Mbps=(XTAL20Mhz駆動でCKS=00、BRR=1)
>
> 以下ソースです。
>
> /* シリアルポート初期化部分抜粋 */
>
> MSTPCR.BIT.B5 = 0; /* MODULE SCI0 ENABLE........... */
> Nop();
> /*SCI0.BRR = 4;*/ /* 1Mbps for 20MHz........... */
> /*SCI0.BRR = 1;*/ /* 2.5Mbps for 20MHz.......... */
> SCI0.BRR = 0; /* 5Mbps for 20MHz.......... */
> SCI0.SMR.BIT.CA = 1; /* SERIAL CLK ENABLE............. */
> SCI0.SCMR.BIT.SDIR = 1; /* MSB FIRST MODE!............ */
> Nop();
> SCI0.SCR.BIT.TE = 1;
> SCI0.SCR.BIT.RE = 1;
>
> /* 送受信関数 */
> unsigned char SendAndReceive0(unsigned char send_data)
> {
> while(!SCI0.SSR.BIT.TDRE){} /* WAIT TO COMPLETE SENDING DATA */
> SCI0.TDR = send_data; /* SEND DATA SET... */
> SCI0.SSR.BIT.TDRE = 0; /* SEND START... */
> while(!SCI0.SSR.BIT.RDRF){} /* WAIT TO COMPLETE TO RECEIVE DATA */
> SCI0.SSR.BIT.RDRF = 0;
> return(SCI0.RDR);
> }
>
> P.S. 送受信ビット方向はMSBファーストです。
>
> (LSBファースト(デフォルト)でも同様の結果でした。)
>
>
> 以上、何卒宜しくお願い致します。
>
>
>