RSPI通信による1バイトデータの送信について

お世話になっております。

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回でよいのだろうと考えました。

大変お手数をおかけしますが、データが出力されない原因など、ご教示お願いします。

 

Parents
  • 追伸です。(少々気になったこと)
    現在のところ、送受信の処理に割り込みを使うことは考えていないのですが、この場合初期設定は、
     ・転送データ処理 -> 「割り込みサービスルーチンで処理する」を選択せず、「DTCで処理する」を選択するものなのか。
    このあたりがよくわからないまま、現在の設定は「割り込みサービスルーチンで処理する」を選択した状態になっています。
  • コード生成を使っているなら、R_SPI0_Send()を使ってみてはどうでしょうか。
  • ご返信ありがとうございます。
    R_SPi0_Send() のコードは見てはいたのですが、まずは確実に動作をつかみたいと考えて、1バイトのコマンドを送信することにしました。
    基本的な部分がわかっていないと、よく解っていないままに動くであろうコードを使用して、不具合が発生した時に手が付けられなくなってしまうという危険性があります。

    さきに書きましたコードは、おそらくRSPIの肝要な部分のみで構成したソースだとは思うのですが、これすら動かない原因がわからないのでは後に進めないと考えております。
    もしかしましたら、とんでもない間違いをしているかもしれません。そのような部分を潰しておきたいのです。
Reply
  • ご返信ありがとうございます。
    R_SPi0_Send() のコードは見てはいたのですが、まずは確実に動作をつかみたいと考えて、1バイトのコマンドを送信することにしました。
    基本的な部分がわかっていないと、よく解っていないままに動くであろうコードを使用して、不具合が発生した時に手が付けられなくなってしまうという危険性があります。

    さきに書きましたコードは、おそらくRSPIの肝要な部分のみで構成したソースだとは思うのですが、これすら動かない原因がわからないのでは後に進めないと考えております。
    もしかしましたら、とんでもない間違いをしているかもしれません。そのような部分を潰しておきたいのです。
Children