RX621マイコンで、割り込みを使用して、MCP3208とspi通信をさせたい

こんにちは。

現在秋月のRX621マイコンの勉強をしております。表題の通り、AD変換のMCP3208をマイコンの機能を使用して、通信させたいと思っております。

この場合、全二重通信で、24ビット長での通信をさせればよいのでしょうか?送信データが半端なため、何バイトなのか、よくわからず、色々なサイトを参考にしているのですが、IOやメモリなど、1バイトずつ区切れるものが多く、実際どうなのかな?と思い、質問させて頂きます。よろしくお願いいたします。(モノは近日中にてに入れるつもりです)

Parents
  • えるん さん、こんにちは。NoMaYです。

    クロック出てますねぇ。まだ、えるんさんがやりたかったことの半分にも届いてませんけど、大きな前進ですね。今、えるんさんの2つのソースを比較したり、Higetakaさんのソースを読んだり、しているのですが、次のステップとして、受信周りを一旦削除して(つまりRSPIの設定として全2重通信ではなく送信のみの設定にして)Nバイト送信が出来るようにソースを簡略化/デバッグしてみる、というのはどうでしょうか?

    今の状況は以下のような感じですかね、、、

    (A) 他のRSPI設定は同じまま、割り込み駆動にしない(以下の画面コピー参照)だけで、クロックが出る
    (B) (推測) 以前と同様に、割り込み駆動では、送信割り込みにも来るし、SPDRにもライトしている、であろう

    それで、割り込み駆動の送信のみのソースにして、Higetakaさんのソースと比較しつつ、アドバイスに従ってRX63Nのハードウェアマニュアルも読みながら(RSPIモジュールのバージョン(回路)はRX62N/621とRX63N/631では同じ)、SPDRにライトしてもクロックが出ない原因を突き止める、という時に気になるのは、以下の点かな、と思いました。

    (1) SPDRにライトした時に(RX63Nのハードウェアマニュアルに記載があるかも知れない)禁則事項に触れてないか
    (2) SPDRにライトした時にエラーは起きていないか
    (3) SPDRにライトした時にSPE=0になっていないか(SPE=0にするのはスレーブ番号を間違えた時のみであるが)
    (4) 実は、1回だけはクロックが出ていたが見落としていた、ということはないか

    今思い浮かぶのは、こういったところ、です、、、

  • Higetakaさん、NoMaYさん
    こんばんわ、お世話になっています。
    本日、SPDRの受信バッファをLCDに表示させてみたのですが、「01279」と固定の数字が出てきました。
    意味があるのか!?と思い、可変抵抗に繋いだのですが、動きませんでした。
    実を言いますと、題名とは乖離してしまいますが、割り込みでの使用は必須ではなく、「必須だと思い込んでいた」のです。お手本にしたサイトの方や、割り込みハンドラにその場所があったので「使わなきゃSPIは出来ないのか?」と思っていました。
    Higetakaさんが仰った通り、63Nのマニュアルを今参照しています。
  • えるんさん、こんばんわ。
    DriveMonitor011.zipの中身をみて、GREPで全ファイル検索してみましたが、PORTCが見つかりませんでした。
    接続は、PORTCを使われているとの事でしたので、入出力の設定を確認されると良いとおもいます。
    周辺モジュールも、PORTC.ICR.BITnの設定が必要なので、もしかすると入力されていないかもしれません。

    ICR レジスタは、ポートの入力バッファを制御するレジスタです。 PORTn.ICR レジスタ(n = 0 ~ 9、A ~ G)の各ビットは、それぞれポート n の端子 1 本ずつに対応してお り、1 ビット単位で指定できます。 周辺モジュールの入力端子および入力ポート端子として使用する場合は、あらかじめ対応する端子の入力 バッファを有効にするために PORTn.ICR を “1” にする必要があります。PORTn.ICR を “0” にした状態のまま 周辺モジュールの入力端子として使用した場合は、周辺モジュールへの入力信号は High に固定されます。

    との事です。1279は16進数で0x04FFなので、微妙なところですが、下位8ビットだけ反映されているのでしょうか。


    ちなみに、AKI-RX621ボードは手元にあるので試してみようと思ったのですが、E1接続コネクタが無いのでのちほど。

  • HiRoSanさん
    こんばんわ、お世話になります。
    おお!確かにないです;; ご指摘ありがとうございます!
    PORT4使用なので、
    PORTC.ICR.BIT.B7 = 1; /*MISOA-A端子(PC7)のバッファコントロール
    として、初期化の中に加えました。
  • ポーリング版のサンプルができました。(添付ファイル)

    送受信ができます。(割り込み版は不要との事なので、様子見する事にしました)

    SampleSPI1.zip

  • えるん さん、HiRoSanさん、こんにちは。NoMaYです。

    > PORTCが見つかりませんでした。

    > おお!確かにないです;; ご指摘ありがとうございます!

    あっ、そうでした。これは私が原因ですね。記憶を辿ってみれば、えるんさんのInit_RSPI0()の中から先日の投稿のmain()にコピペした時に、以下(赤文字箇所)はどうしようかな、出力確認用だから外しておくかな、としたのですが、ほどなくしてそのことはすっかり忘れ、SPDR読み出し(カラ読み出し)をしている箇所のコメントに/* 受信データ読み出し */とか書いてしまいました、、、

    ここは、外さずに残して/* 以下は一応残しておく */とか、外して/* 受信データ読み出し(端子未設定なので0x00?) */とか、しておけば良かったですね。(HiRoSanさんの指摘からすると、端子未設定だと0xffが読める、ということですね、、、)

        /* RSPI0のポート設定 */
        IOPORT.PFGSPI.BYTE = 0x1e;    /*ポートファンクションレジスタ PC4~7を使用*/
        PORTC.DDR.BIT.B7 = 0;
        PORTC.ICR.BIT.B7 = 1; /* PC7(MISOA)の入力バッファ有効 */
        PORTC.PCR.BIT.B7 = 1; /* PC7(MISOA)のプルアップ抵抗有効 */

    それから、Dinの件は分かりました。そういうことなのですね。それで、もう1つ気になっていますが、今回のオシロの写真ではHighが2Vちょっとしかないのには何かわけがあるのでしょうか?(以前の写真を見返すと3V以上はあったのですが、、、)

  • えるん さん、HiRoSanさん、こんにちは。NoMaYです。

    えるんさん、その後、どうでしょうか? Higetakaさんのソースを参考にして通信出来るようになったでしょうか?

    HiRoSanさん、お手持ちのAKI-RX62で試してみるかも、というリプライをされていましたが、どうにも私は気になって、RX631のGR-CITRUSですが、試してみることを始めました。現時点では、ポート周りの設定ミスという線は消え、割り込み周りの処理の不具合(+予感/推測ですがオシロでの測定ミス?)のように思われますので、RSPIモジュールがRX62N/621と同じであるRX63N/631でも何かしら掴めるのではないだろうか、という気がするからです。ただ、両者でICUモジュールが異なっていますので、それによる差異があるかも知れない、という点には気を付けるつもりです。(もし何か掴めたら投稿します。)

  • NoMaYさん、こんにちは。
    E1を接続して動作確認を行おうと思いましたが、CS+とRX-CCを使っていますので、単純に開いただけだと、エラーが多発しており、ビルドできていない状態です。.rcpcがあれば変換出来るようですが、良くわかっていないので申し訳ありません。e2Stuidoで試してみましたが、こちらもエラーが出てビルドできませんでした。フィールド'ADDR0'が解決できません。との内容で、iodefine.hで定義されているレジスタが使えていない状況です。
    Higetaka さんのサンプルなら、正常動作しております。PC7をVDDまたはオープンで、rxbufがすべて0xff、GNDに繋ぐとすべて0x00、PC7とPC6を接続すると0x01,0x02,0x03となりました。

Reply
  • NoMaYさん、こんにちは。
    E1を接続して動作確認を行おうと思いましたが、CS+とRX-CCを使っていますので、単純に開いただけだと、エラーが多発しており、ビルドできていない状態です。.rcpcがあれば変換出来るようですが、良くわかっていないので申し訳ありません。e2Stuidoで試してみましたが、こちらもエラーが出てビルドできませんでした。フィールド'ADDR0'が解決できません。との内容で、iodefine.hで定義されているレジスタが使えていない状況です。
    Higetaka さんのサンプルなら、正常動作しております。PC7をVDDまたはオープンで、rxbufがすべて0xff、GNDに繋ぐとすべて0x00、PC7とPC6を接続すると0x01,0x02,0x03となりました。

Children
  • HiRoSanさん、Higetakaさん、NoMaYさん
    こんばんわ、お世話になります。
    本日まで出張で、返信が遅くなり申し訳ありません、しかし、日曜からまた出張なので、来週半ば以降に、教えて頂いたソースを試せそうです。
    早くやりたいのですが・・・。すみません。