1.H8が機能しない
以前,C言語でH8プログラミングを行っているとき,AD変換などの機能が正常に動作しないことがありました.知識豊富なわけではないので,思考錯誤でなんとか原因を突き止めたという(…というか,適切に変更?)したという経緯をここに簡易記録します.
2.原因
C言語で開発する場合,機能割り当てされたアドレスにアクセスに容易にアクセスするために,ヘッダファイルが用意されています.ヘッダファイルを利用することで,直接アドレスを記述してアクセスするのではなく,PA.DDRというようなシンタックスで簡単にアクセスすることができます.
しかし,この問題は原因がヘッダファイルにあったために起こりました.ルネサスのHPで配布されているオフィシャル(?)なヘッダファイルを使っていたにもかかわらず, AD変換アドレスの定義がおかしくなっているため正しく機能しませんでした.
例えば,ADCSRのアドレスをマニュアルで調べるとFFFFE8なのに,実際に調べるとFFFFF0というアドレスに定義されてる・・・という感じで,マニュアルに表記されたAD変換用アドレスと実アドレスが違っていました.
3.解決策
実アドレスを調べて,それにマッチするようにヘッダファイルを書き換える!という作業をしました.
printf("%d",AD.CSR.BYTE);
上記ように書くと参照先の値が表示されますが,下記のように書くと
printf("%x",&AD.CSR.BYTE);
参照先のアドレスが帰ってきます.そこで,ヘッダファイルをマニュアルに記載されたとおりに書き換えます.(この例ではADCSRのアドレスのみ)
#define ADCSR (*(volatile union st_adcsr *)0xFFFFE8)
これで,アドレスをマニュアル通りに定義することができました.
これらを詳しく理解したい場合は,ヘッダファイルとC言語の教本をご覧ください….
[ b a c k ]