はじめまして、こんにちは。
RenesasのマイコンH8/3687Fを使用して、温度測定をするC言語のプログラムをコーディングしています。
その温度測定でIIC2通信を使用するのですが、その通信がどうにもうまくいきません。
途中MOV命令を使いI2Cバスコントロールレジスタ2(ICCR2)のBBSYとSCPを書き換えるのですが、ICCR2には書き込もうと思っているデータとは異なるデータが格納されています。
MOV命令につかう汎用レジスタ(今回使用するのはR4L)には正しい値が格納されているため、MOV命令がおかしいと踏んでいるのですが、どう対処すればよいのかわかりません。
そのため、どのように修正すればよいか教えてください。
宜しくお願い致します。
以下、プログラムのIIC2通信部分の関数です。
void reception_t(void)
{
unsigned int dmy;
IIC2.ICCR1.BYTE = 0x81; // ICE=1,CKS3~0 IIC2.ICMR.BIT.MLS = 0; // MLS IIC2.ICMR.BIT.WAIT = 0; // WAIT IIC2.SAR.BYTE = 0xF8; //スレーブアドレス:(1111100)+ I2C: (0) while(IIC2.ICCR2.BIT.BBSY == 1){ ; } IIC2.ICCR1.BIT.MST = 1; //マスタ IIC2.ICCR1.BIT.TRS = 1; //送信モード #pragma asm //MOV開始条件発行 MOV #H'BD,R4L MOV R4L,@H'F749 #pragma endasm while(IIC2.ICSR.BIT.TDRE == 0){} //TDRE=1まで待機 //3 IIC2.ICDRT = 0xF8; //スレーブアドレス(1111100)とR/W(0)を指定 while(IIC2.ICSR.BIT.TEND == 0){} // TEND=1 while(IIC2.ICIER.BIT.ACKBR == 1){ IO.PDR6.BIT.B7 = 1; } IIC2.ICCR1.BIT.MST = 1; //マスタ IIC2.ICCR1.BIT.TRS = 0; //受信モード //***************************************************************// IIC2.ICSR.BIT.TEND = 0; /* TENDクリア */ IIC2.ICCR1.BIT.MST = 0; /* マスタ受信モード切替, 500kHz */ IIC2.ICSR.BIT.TDRE = 0; /* TDREクリア */ IIC2.ICIER.BIT.ACKBT = 0; /* ACKBT=0を設定 */ dmy = IIC2.ICDRR; /* ダミーリード 受信開始 */ while(IIC2.ICSR.BIT.RDRF == 0){ /* データの受信完了待ち(受信データ転送時、RDRF=1) */ IO.PDR6.BIT.B6 = 1; } IIC2.ICIER.BIT.ACKBT = 1; /* 次の受信動作を禁止 */ IIC2.ICCR1.BIT.RCVD = 1; temp_1 = IIC2.ICDRR; /* データリード(上位ビット、整数値) */ while(IIC2.ICSR.BIT.RDRF == 0){ /* データの受信完了待ち */ } IIC2.ICSR.BIT.STOP = 0; /* STOPフラグクリア */ #pragma asm //MOV停止条件発行 MOV #H'3D,R4L MOV R4L,@H'F749 #pragma endasm while(IIC2.ICSR.BIT.STOP == 0){ /* 停止条件生成待ち */ } temp_2 = IIC2.ICDRR; /* データリード(下位ビット、小数値) */ IIC2.ICCR1.BIT.RCVD = 0; /* RCVDクリア */ IIC2.ICCR1.BYTE = 0xC1; /* スレーブ受信モード切替, 500kHz */
}
追記1
使用しているマイコンのマニュアルと学習用I/Oボードの説明書は以下のURL先です。
マイコン:http://japan.renesas.com/products/mpumcu/h8/h8300h_tiny/h83687_h83687n/Documentation.jsp
学習キット:http://www.hokutodenshi.co.jp/80/TinyEVA_s.pdf
追記2
問題だと思われていたBBSY、SCPビットへの命令は無事解決したのですが、3ビットのSCLO(SCL出力レベル)が動作しておらず以降の動作が行えませんでした。わかる方がいらっしゃれば対処方法をご教授お願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/30 09:53 編集
2016/03/30 11:48
2016/03/30 11:54
2016/03/31 00:27
2016/03/31 00:43
2016/03/31 01:06
2016/03/31 02:45
2016/03/31 06:36
2016/03/31 13:05
2016/04/01 08:28 編集
2016/04/01 12:39
2016/04/04 04:47