こんにちは。
現在秋月のRX621マイコンの勉強をしております。表題の通り、AD変換のMCP3208をマイコンの機能を使用して、通信させたいと思っております。
この場合、全二重通信で、24ビット長での通信をさせればよいのでしょうか?送信データが半端なため、何バイトなのか、よくわからず、色々なサイトを参考にしているのですが、IOやメモリなど、1バイトずつ区切れるものが多く、実際どうなのかな?と思い、質問させて頂きます。よろしくお願いいたします。(モノは近日中にてに入れるつもりです)
えるん さん、こんにちは。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回だけはクロックが出ていたが見落としていた、ということはないか今思い浮かぶのは、こういったところ、です、、、
えるんさん、こんばんわ。 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接続コネクタが無いのでのちほど。
ポーリング版のサンプルができました。(添付ファイル)
送受信ができます。(割り込み版は不要との事なので、様子見する事にしました)
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となりました。