MCU

H8-3694のSCIの初期化


以下のように設定する。

void init_sci3(void)
{
    IO.PMR1.BIT.TXD = 1;       /* TXD を出力にセット(PMR2 ではない) */
    SCI3.SMR.BYTE   = 0x00;    /* 調歩、8Bits、NoParity、1Stop、Clk=φ */
    SCI3.BRR        = 0x0f;    /* 20000000Hz÷(32×38400)- 1 */
    SCI3.SCR3.BYTE  = 0x30;    /* TX Enable、RX Enable、内部ボーレートGEN */
    {
        ubyte dmy;
        dmy = SCI3.SSR.BYTE;   /* Dummy Read */
        SCI3.SSR.BYTE = 0x80;  /* TDRE ビットをセット */
    }
}


注意すべきは、1行目のTXDを出力にしているところ。
TXD出力は、PORT2にあるので、普通に考えるとPMR2で設定するように思えるが、
PMR1の中に、TXDとして使用するための設定ビットがあるという、ちょっとした罠が潜んでいる。


ちなみに、ボーレート設定値は、以下の式で求めることができる。

BRR設定値 = φ ÷ (ボーレート × 32) - 1

少数以下の値を切り捨てるか、切り上げるかは、本来のボーレートとの誤差を計算して、誤差の少ないほうを選ぶ。
誤差が大きいと、高速通信では致命的になってくるので、必要以上に高速通信を行いたい場合は、クリスタルをちょうど良い値のものに変更するか、同期通信にするのが良い。

最終更新のRSS
Last-modified: 2010-03-26 (金) 14:35:47 2948日前
HTML convert time: 0.026 sec.