簡易SPI通信におけるポーリングの仕方について

お世話になります。

RX65NマイコンでシリアルROM(マイクロチップ製SST26VF080A)との間で簡易SPI通信にてデータの読み書きをしようとしています。なおROMについては複数のマルチスレーブとなります。

開発環境はe2studioのスマートコンフィギュレータを用いてコード生成したものから改変しながら作成しようとしております。

以前はRL78/G14の簡易SPI通信を用いて機能検証をしておりましたが,当時CS+コード生成していた際は受信割込みと送信割込みで共通の割り込み関数であったため,シリアルROMに対してコマンドを送信する→受信完了までダミーデータを送る(と同時に送信完了までは受信データをダミーリードする)ということが同一割込み関数内で処理されることからやりやすくうまく機能が実現できていました。

しかし,今回は送信と受信で割込みが分かれているため,この割込みタイミングの関係が常に一定であれば同様のことができると思いつつ,そもそも同時に送受信するようなコード生成になっているため,迷子になってきました。

そこで質問です。

①今回の場合,受信割込みと送信割込みでRL78と同じことをしようと思った場合,どちらかが先に割込みがかかると言い切ってしまってよいのでしょうか?

 (優先順位が下位の物であっても一部記載したコードが実行されてしまうということはないと考えてよいのでしょうか?)

②一般論としてRL78のコード生成のほうが送信→受信と順番になっており一般的のように思っていますが,RX65Nでは送受信が同時になっている理由は何が考えられますでしょうか?

③①②の中で重複するかもしれませんが,そもそも論としてより良い考え方があればご教示ください。

Parents
  • RSPIですよね?スマートコンフィギュレータの「データ処理方法」を「割り込みサブルーチンで処理する」にすると送信と受信の双方に送受信データの次弾装填用の処理コードが割り込みハンドラに自動生成されます。その送信ハンドラなら受信ハンドラより先に呼び出されるタイミングが取得できると思います(未確認ですが送信イベントは送信バッファが空になったタイミングだと思います)。ユーザーが処理完了の通知を受けるためにはコールバック機能設定で該当完了を有効化することで処理完了後通知を受けるためのハンドラが生成されます。送信に関しては送信完了割り込みハンドラから直接コールバック関数が呼び出されない作りになっています。グループ割り込みでアイドル状態に入ったときに送信完了コールバック関数が呼ばれる作りになっています。この生成コードのせいで思っているタイミングが違うんだと思います。生成コードのデータ処理を行っている送信割り込みハンドラに直接コードを挿入すればやりたいことができるかもしれませんが、再コード生成で編集内容が消えるという禁じ手なのでコールバック関数だけで済む実装にするのが良いのではないかと思います。なお、多重割り込みをしたくて生成コードに直接変更を加えているのは私だけではないはず。

    ※個人的には受信コールバックだけ使えれば済むように思えます。

  • Yamamotoさんこんにちは

    このフォーラムの使い方いまいちわかっていなくて回答いただいておりますが,私自身にリプライかけたとおり自己解決しました。

    なお,RSPIではありません。関係者の都合でマイコンが過剰スペックなものを選んでおり,RL78に戻る可能性があるためRSPIの使用を避け,なおかつ過去のソースにとらわれてしまった結果,めんどくさいことになった次第でした。

Reply
  • Yamamotoさんこんにちは

    このフォーラムの使い方いまいちわかっていなくて回答いただいておりますが,私自身にリプライかけたとおり自己解決しました。

    なお,RSPIではありません。関係者の都合でマイコンが過剰スペックなものを選んでおり,RL78に戻る可能性があるためRSPIの使用を避け,なおかつ過去のソースにとらわれてしまった結果,めんどくさいことになった次第でした。

Children
No Data