CSI通信の設定方法について

外付けのADCとCIS通信をしてデータを取得しようとし、マニュアルを読みながら進めているのですが、

クロックが動かず困っています。

使用しているCPUは78K0R/Lx3シリーズのものです。

各レジスタは以下のように設定いたしました。

PER0 = 0x27;

SMR10 = 0x8020;

SCR10 = 0xC007;

SDR10 = 0x0000;

SO1 |= 0x0002;

SOE1 |= BIT1;               // #define BIT1 (1 << 1)

PM1 &= ~(BIT3 | BIT5); // #define BIT3 (1 << 3)  #define BIT5 (1 << 5)

P1 |= (BIT3 | BIT5);

PM1 |= BIT4;               // #define BIT4 (1 << 4)

SS1 |= BIT0;

CSIMK10 = 0;

どこか設定ミスか漏れがあると思うのですが、どなたか教えていただけないでしょうか。

  • チョコです。

    78K0R/Lx3のハードウェアマニュアルがないので、確認はできませんが、78K0R/Lx3のSAUはRL78のSAUと同じだったと思います。

    RL78/G13辺りでコード生成を行って、その結果を参照してください。(兼用端子等は異なっているはずです。)

    提示された設定を眺めた範囲だと、プリスケーラーの設定がないようです。

    どのようなモードで使っているかの情報がないと、設定が正しいかは判断できません。

    また、初期設定しかないよう用ですが、通信の起動処理はどうしていますか。

    以上

  • チョコです。

    78K0R/Lx3のハードウェアマニュアルを見つけてダウンロードしてみました。

    >提示された設定を眺めた範囲だと、プリスケーラーの設定がないようです。

    電気的特性(以下に示す)を見ると、SCKサイクル・タイム(通信速度)はfCLKは200ns以上でfCLKを4分周以上にする必要があります。つまり、SPS0(プリスケーラ)とSDRでこの条件を満足するように設定する必要があります。

    兼用ポートでP13~P15を使用していることから、CSI10を使用していると判断されますが、これは、ユニット0のチャネル2を使用することになります。つまり、設定するレジスタはSMR10やSCR10およびSDR10等の名称ではなく、SMR02やSCR02およびSDR02となります(レジスタ名称はユニット番号+チャネル番号で表されます)。

    SCRレジスタの設定値からデータとクロックの位相はタイプ1となります。これが正しいとすると、そのためにはSCKに対応したSOレジスタの初期値は1にする必要があります。下にSOレジスタの構成を示しますが、ユニット0のチャネル2であれば、SO0レジスタのビット10(CKO02)を1にする必要があります(SO1のビット1のセットは全く関係ありません)。

    SOEレジスタについても、ユニット0チャネル2なので、SOE1レジスタではなく、SOE0レジスタでビット2をセットすべきです。

    SSレジスタについても、SS1レジスタのビット0ではなく、SS0レジスタのビット2をセットする必要があります。

    初期設定はこんなところです。

    実際の通信ですが、CSI10に送信するデータか、受信の場合にはダミーデータを書き込むとSCK10が出力されて通信が開始されるはずです。

    以上