• 締切済み

SH3 SH7706LAN 組込みで入力ポートの読み込みがうまくいきません。

SH3 SH7706LAN 組込みで入力ポートの読み込みがうまくいきません。 ボードの コネクタCN2 ピン 31 から 38 を入力ポートA として利用したいのでPACRを全て入力プルアップとして初期化しているつもりです。 下記プログラムを動かすと 31pin を GND に落とすと 'FD' 32pin を GND に落とすと 'F7' 31 と 32pin 同時に GND に落とすと 'F5'が PADR から入力できますがその他の pin は反応が無く'FF'です。 wait の for ループはコンパイラーの最適化のせいか待ってはくれないみたいですがスタンダードアウトの RS232 がウエイト代わりになっているみたいなのでPADR へのアクセスは 100ms 周期程度です。 終了判定の "SW入力" FWEスイッチは問題なく入力できます。 何が悪いのでしょうか?先に進めずとても困っています。 どうかよろしくお願いします。 CPU ボード T-SH7706LAN rev3.0 http://web.kyoto-inet.or.jp/people/takagaki/T-SH7706/T-SH7706LAN3.pdf sh7706 ハードウェアマニュアル http://documentation.renesas.com/jpn/products/mpumcu/rjj09b0163_sh7706.pdf OS MES Ver2.5 http://mes.sourceforge.jp/mes2/index-j.html 開発ツール gcc25r12.exe (User for SH3 : COFF) ///////////////////////////////////////////////// #include <mes2.h> #include <h8/reg770x.h> int main() { int i, d; PACR = 0xaaaa; //全て入力プルアップ do { for(i = 1; i < 30000; i++) // wait d = i, d * 5; printf("PACR %04X ", PACR); d = PADR; for(i = 0x80; i; i = i >> 1) { if(d & i) printf("1"); else printf("0"); } printf("\r"); } while(SCPDR & 0x20); //SW入力 } ////////////////////////////////////////////////

みんなの回答

回答No.3

>shortとcharなのでアクセスサイズは問題ないと思います。 変数dはint宣言しているので、   d = PADR; の所で32bitアクセスに変換されてしまってませんか? いったんchar型の変数で受けてから処理してはいかがでしょうか?

bj42vlx
質問者

お礼

実験の時間が取れず遅くなりました。 「d」をunsind charにして実行しましたが結果は同じでした。 いろいろありがとうございます。

回答No.2

あ、PADRは明示的に8bitアクセスにしないと正常に読めないかも。 (sh7706 ハードウェアマニュアル23-4ページ参照) これでダメだと、もっと根底からの確認となるでしょう。 ・基板は「T-SH7706LAN rev3.0」で合ってる? ・「reg770x.h」の記述はPACR=H'A400_0100、PADR=H'A400_0120になってる? など。

bj42vlx
質問者

お礼

「reg770x.h」の内容は下記になります。shortとcharなのでアクセスサイズは問題ないと思います。ポート読んだとき反応があるビットもあるので少なくともPADRのアドレスは合っているかなと思います。 基板には「SH7706LAN Board」とあります。買った時期がrev3が完売になるちょっと前なので間違いないと思います。 私としては趣味の物を作って実践勉強のつもりだったのですが、逆に壊れている見込みが立てば再度買ってチャレンジしたいのですが、なんだか使いこなせないようなので、凹んで再度買うには足踏みぎみです。 壊れている証拠でもあれば別ですが。 なんだか心の内まで書いてしまった。解答ありがとうございます。 #define PACR (*(volatile unsigned short *)0xa4000100) #define PADR (*(volatile unsigned char *)0xa4000120)

回答No.1

>31pin を GND に落とすと 'FD' >32pin を GND に落とすと 'F7' >31 と 32pin 同時に GND に落とすと 'F5' ちょっと分かりにくいので書き出してみます。   CN2-31:D23/PTA7   CN2-32:D22/PTA6   CN2-33:D21/PTA5   CN2-34:D20/PTA4   CN2-35:D19/PTA3   CN2-36:D18/PTA2   CN2-37:D17/PTA1   CN2-38:D16/PTA0 PTA7がLowだとPADRレジスタ値はb"0111_1111"=0x7F PTA6がLowだとPADRレジスタ値はb"1011_1111"=0xBF となるはずでは? CN2-31の代わりにCN2-37(PTA1)が、CN2-32の代わりにCN2-35(PTA3)が操作されているように見えます。 なんかソフトはビット列が逆みたいですが、逆だとしても PTA7がLowだとPADRレジスタ値はb"1111_1110"=0xFE PTA6がLowだとPADRレジスタ値はb"1111_1101"=0xFD となるのが正解だと思うのですが。 操作しているピンが違ってそうですので、一度配線を見直されてはいかがでしょうか?

bj42vlx
質問者

お礼

そうなのです。PINとPADRが飛んでいて思ったビットに反映しません。 もともとユニバーサル基板にコネクタのみ付いていた状態での結果ですが、ビットが飛んだり無反応なので基板からコネクタをはずして誤半田を確認して再度テストしましたが結果同じです。初期化の間違だとありがたかったのですが、やはりマイコンボードが壊れているんでしょうか? 回答ありがとうございます。