いつもお世話になっております。
RX65NのSPIを使用して、ペリフェラルデバイスを制御を検討しておりますが、
RSPIレジスタに値を設定しても、設定した値が反映されていないように見えます。
添付画像は、実機でのステップ実行を行った際の結果画面になります。
IO Registers上のアドレスやRW属性は正しく表示されておりますが、
値は、常に0になります。また、IO Registers上でも値は変更できませんでした。
対象のレジスタのデフォルト値は、0以外のもののありますので、
ソースコード上の問題になりますでしょうか? ご確認ください。
以上、よろしくお願いいたします。
こんにちは hira です
「消費電力低減機能」で、RSPIを有効にしているでしょうか?
もしかして書き込みプロテクト対象レジスタではないですか?
その場合はPRCRレジスタを使ってプロテクトを一時的に解除する必要があります。
両方(低消費電力&書き込みプロテクト)かな?とも思います。
SYSTEM.PRCR.WORD = 0xA502; MSTP(RSPI1) = 0U; SYSTEM.PRCR.WORD = 0xA500;
RSPI1のレジスタ書き換え前に、上記3行を実行してみてください。
ご回答ありがとうございました。
低消費電力&書き込みプロテクトの対処で、レジスタへ設定されることを
確認して、先に進めることができました。
現在は、SPI関連の全ての端子への出力がLowから変わらない状況です。
MCPは下記の設定を実施しております。
// SPI端子機能切り替え MPC.PWPR.BIT.B0WI = 0; MPC.PWPR.BIT.PFSWE = 1; MPC.P26PFS.BYTE = 0x0D; MPC.P27PFS.BYTE = 0x0D; MPC.P30PFS.BYTE = 0x0D; MPC.P31PFS.BYTE = 0x0D;
ただ、上記設定後も、下記の制御で、対象端子の出力が切替わるので、
上記又は、上記のみでは適切でない印象です。
PORT3.PODR.BIT.B1 = ON; → P31出力High
PORT3.PODR.BIT.B1 = OFF; → P31出力Low
コードの雰囲気でスマートコンフィギュレータは使っていないようですね。RSPI部分だけでもスマートコンフィギュータでテストしてみて生成コードを移植してみてはいかがでしょうか?SPI接続のステッピングモータドライバのレジスタアクセスで使ったことがありますが、問題なく動作するコードを生成してくれますよ。
PxxPFS で選択した端子機能を有効化するには PORTx.PMR の設定が必要です。抜けていませんか? ちなみに、機能出力ピンの電源投入時の初期化順序は
1. PODR にて回路上の非アクティブ値を設定
2. PxxPFS で単純ポート Pxx を選択(リセット解除直後は常に Pxx なので省略可)
3. PDR にて出力を選択
4-a. MSTPCRx の省電力モード解除(もっと前でも可)
4-b. 機能回路の初期化 (RSPI とか MTU とか)
5. PxxPFS にて使いたい機能を選択 (RSPCKA とか MOSI とか)
6. PMR=1 にして機能を有効化
です。
※1 機能初期化の前に単純ポートにて非アクティブ論理を出力しておかないと、機能初期化中に誤った信号が出たりして危険。
※2 機能初期化前 PODR → PDR の順を守らないとアクティブ論理が数ナノ秒だけ出力されてインバータアーム短絡とかしますので危険。
ご回答ありがとうございます。
PORTx.PMRの設定が抜けておりまして、
追加して、SPIの動作を確認することができました。
スマートコンフィギュレータに関しましては、使用経験がありませんでしたので、
今回の評価向けのTPでは、ベースコードにレジスタ制御を追加することで
対応させていただきましたが、製品向けのファーム開発では使用予定になります。
いろいろとご教示いただきまして、ありがとうございました。