リストの皆さん、いつもお世話になっております。 自力で解決しました。 以下ソースを訂正して対処済み 誤 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ファースト(デフォルト)でも同様の結果でした。) > > > 以上、何卒宜しくお願い致します。 > > >