[H8-ML(5743)] H8S/2398同期シリアルについて
From: "Koji Takeuchi" <ktakeuchi@xxxxxxxxxxxxxxxxx>
Date: 2005年11月16日(水)19時27分51秒
リストの皆さん、いつもお世話になっております。

件名の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ファースト(デフォルト)でも同様の結果でした。)


以上、何卒宜しくお願い致します。


スレッド概略
[表示中](起点)
 └[5744(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]