こつこつ



RX561にASM330LHHを接続して
SPIの設定をRX スマート・コンフィグレータで自動生成して使いこなす。
SPIの設定は上の画像の通りで、関数の使い方は、
データの準備、送信用の配列と受信用のuint8_t 型の配列を準備します
送信用の配列:
配列の1番目には、アクセスするアドレスを格納します。
配列の2番目には、データ書き込みの場合に送信するデータを格納します。3番目以降の要素は空で構いません。
受信用の配列: 受信データは、配列の2番目以降に格納されます。
1バイト受信する場合、データは配列の2番目に格納されます。
2バイト受信する場合、データは配列の2番目と3番目に格納されます。
配列の1番目の要素には何も格納されません。

データの転送
1バイト送信/1バイト受信: アドレスを含めて合計2バイトを転送します。
送信: アドレス+1バイト
受信: 1バイト

1バイト送信/2バイト受信: アドレスを含めて合計3バイトを転送します。
送信: アドレス+2バイト
受信: 2バイト
自分用に1から書くほうが関数の使い勝手は良いけれど、自動生成によって簡単に設定を変えれることや他のマイコンへの移植を考えると積極的に使っていきたい。

uint8_t command_request[3];
uint8_t response_reply[3];

R_Config_RSPI0_Start();//RSPI0モジュールの開始

//1バイト書き込み
command_request[0]=0x12; //12h CTRL3_C
command_request[1]=0x01; //01 ソフトウェアリセット
R_Config_RSPI0_Send_Receive(command_request,2,response_reply);
wait_ms(1);//通信完了までややまつ

//1バイト読み込み
command_request[0]=(0x0F|0x80);//0Fh :who am I Reg(Hex) *読み取り時は最上位bitに1がつく
command_request[1]=0x00;//2バイト目は空データ
R_Config_RSPI0_Send_Receive(command_request,2,response_reply);//1バイト読み込む場合には2バイト送信する
wait_ms(1);//通信完了までややまつ
if(response_reply[1]==0x6B){SCI_printf("OK");}else{SCI_printf("NG");}
SCI_printf("\r\n");

command_request[0]=0x10;//加速度センサと温度計ON 10h
command_request[1]=0xA8;//2バイト目は書き込むデータ
R_Config_RSPI0_Send_Receive(command_request,2,response_reply);
wait_ms(1);

//2バイト読み込み
command_request[0]=(0x20|0x80);//読み取り:温度 //Reg(Hex) 20h *読み取り時は最上位bitに1がつく
command_request[1]=0x00;//2バイト目は空データ
command_request[2]=0x00;//3バイト目は空データ
R_Config_RSPI0_Send_Receive(command_request,3,response_reply);
wait_ms(1);
tmp_short=(response_reply[2]<<8|response_reply[1])/256+25;//2バイト目と3バイト目を使用する SCI_printf("tmp=%d\n\r",tmp_short);

参考
RX651 RSPI1での受信不具合について

コメントする