リストの皆さん、いつもお世話になっております。 件名の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ファースト(デフォルト)でも同様の結果でした。) 以上、何卒宜しくお願い致します。