お世話になっております。
RSPI通信のソフトウェアを組んでいたのですが、どうもうまく動かず、根本に立ち返って検証を試みております。
MPUは、RX113
SPIのベースビットレートは、5Mbit/s。
クロック同期式(3線式)としております。
1バイトのコマンドデータを富士通のFRAMに送出するコードを次のように記述して試してみました。
※ 上記「1バイトのコマンドデータ」は、FRAMのライトイネーブルコマンドです。
R_RSPI0_Start(); PORTC.PODR.BIT.B4 = 0; // チップセレクト -> FRAM while(RSPI0.SPSR.BIT.SPTEF == 0); RSPI0.SPDR.WORD.H = 0x0006; // データの送信 RSPI0.SPCR.BIT.SPTIE = 0; // 送信バッファエンプティ割り込み許可ビット -> 0 RSPI0.SPCR2.BIT.SPIIE = 1; // RSPIアイドル割り込み許可ビット -> 1 while(RSPI0.SPSR.BIT.IDLNF == 1); // 送信完了待ち PORTC.PODR.BIT.B4 = 1; // チップセレクト 解除
R_RSPI0_Stop(); // SPIの終了処理(割り込み禁止)
おそらく何処かに誤りがあると思うのですが、ロジアナで観測するところ、MOSIの端子からデータが出力されません。
ビットレートを落としても状況は変わりませんでした。
ハードウェアマニュアルを読みますと、「SPDRへ送信データをライト」は、フレーム数分アクセスするようにと書かれていましたが、今回の使い方では転送フレーム数は1フレームなので、書き込みのアクセスは1回でよいのだろうと考えました。
大変お手数をおかけしますが、データが出力されない原因など、ご教示お願いします。
わわい様 お世話になっております。ご回答ありがとうございます。 SPI通信の前処理(割り込み無し)を作成してみました。 コードは次の通りです。 これで試したところ、RSPCKAは出てきました。 しかし、肝心のデータ(MOSI)は出てきません。 void Y_RSPI0_Start(void) { // ポーリング用のSPI通信前処理( 割り込み無し ) volatile uint8_t dummy; /* Clear error sources */ dummy = RSPI0.SPSR.BYTE; // 読み込んでから書くための処理 RSPI0.SPSR.BYTE = 0xA0U; /* Disable idle interrupt */ RSPI0.SPCR2.BIT.SPIIE = 0U; /* SPEビットの許可 */ RSPI0.SPCR.BIT.SPE = 1; } データ送信のコードは次の通りです。 // // FRAM WRENコマンドの送信 // Y_RSPI0_Start(); PORTC.PODR.BIT.B4 = 0; // チップセレクト -> FRAM while(RSPI0.SPSR.BIT.SPTEF == 0); RSPI0.SPDR.WORD.H = 0x0600; // データの送信 RSPI0.SPCR.BIT.SPTIE = 0; // 送信バッファエンプティ割り込み許可ビット -> 0 RSPI0.SPCR2.BIT.SPIIE = 1; // RSPIアイドル割り込み許可ビット -> 1 while(RSPI0.SPSR.BIT.IDLNF == 1); // 送信完了待ち PORTC.PODR.BIT.B4 = 1; // チップセレクト 解除 Y_RSPI0_Stop(); // SPIの終了処理
ロジアナの画像:MOSIの信号が出ていません。