RX621でSPIで使用するメモ
使用したジャイロセンサはこれ
L3G4200D
Amazonで購入しました.秋月にデータシートと詳しい説明書がありました.
http://akizukidenshi.com/catalog/g/gM-06433/
今回はピンの関係からRSPI1のポートBを使用.
配線は以下のとおり
PE5(RSPCKB) -> SCL
PE6(MOSIB) -> SDA
PE7(MISOB) -> SDO
PE4(SSL0B) -> CS
説明書によると,クロックはデフォルトでHIGH奇数エッジでデータ変化
偶数エッジでデータサンプルです.(データシート24ページ目)
16ビットで通信し,上位8ビットでデータレジスタ送信,下位8ビットでデータ受信します.
以下イニシャライズと16ビット送受信のサンプル
//SPI設定
SYSTEM.MSTPCRB.BIT.MSTPB16 = 0; //SPIストップ解除
RSPI1.SPCR.BIT.SPE = 0; //SPI機能停止
RSPI1.SPBR = 23; //100kHz
RSPI1.SPDCR.BIT.SLSEL = 0x01b; //SSL0,SSL1許可
RSPI1.SPDCR.BIT.SPLW = 0; //ワードアクセス
RSPI1.SPCMD0.BIT.CPHA = 1; //奇数エッジでデータ変化偶数でサンプル
RSPI1.SPCMD0.BIT.CPOL = 1; //アイドル時RSPCK=1
RSPI1.SPCMD0.BIT.SSLA = 0; //SSL0でアサート
RSPI1.SPCMD0.BIT.SSLKP = 1; //SSL信号を保持
RSPI1.SPCMD0.BIT.SPB = 15; //データ長16bit
PORTE.ICR.BIT.B7=1; //入力バッファ有効
IOPORT.PFHSPI.BIT.RSPIS = 1; //SPI端子portEに変更
IOPORT.PFHSPI.BIT.RSPCKE = 1; //RSPCKB有効
IOPORT.PFHSPI.BIT.MOSIE = 1; //MOSIB有効
IOPORT.PFHSPI.BIT.MISOE = 1; //MISOB有効
IOPORT.PFHSPI.BIT.SSL0E = 1; //SSL0B有効
RSPI1.SPCR.BIT.MSTR = 1; //マスタモード
RSPI1.SPSR.BYTE = 0xA0; //ステータスクリア
RSPI1.SPCR.BYTE; // SPCR空読み
//センサレジスタから1バイト読み出し
unsigned char rspi_read( unsigned char reg,unsigned char x ){
unsigned short recv;
RSPI1.SPCR.BIT.SPE = 1; // enable
RSPI1.SPDR.WORD.H = reg<<8+x; // 送信
while( 0 == RSPI1.SPSR.BIT.SPRF ); // 受信完了待ち
recv = RSPI1.SPDR.WORD.H; // 受信バッファ読出し
RSPI1.SPCR.BIT.SPE = 0; // disable
recv = recv&0x00ff; //マスク
return(recv);
}
とりあえずWho_am_iレジスタから読み取る.
具体的には0x8fを送り,0xd3(211)が帰ってくればOK.
RSPIの使い方で参考にさせていただいてます.
返信削除質問なんですが「RSPI1.SPCR.BYTE; 」でSPCRレジスタを空読みする理由は何ですか?