外付けの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が出力されて通信が開始されるはずです。