2010年5月9日日曜日

SH-2A基板でモノクロLCDを使う。



今年のGWも、CQ出版 Interface誌の付録基板と格闘していました。なんだか、年中行事化しているようです。3日も有れば出来ると思っていたモノクログラフィカルLCD(SG12864)の表示に、連休いっぱいかかってしまいました。
特に今年は、気持ちよい晴天が続き。部屋にこもりっきりで付属SH-2A基板をいじるのはどうかと思いながら....







付属SH-2A基板でLCDの表示に辿り着くまでにHEWで起きたエラーと対処を記します。

1.数値演算用関数(math.h)log10、pow等が使えない。
エラー: L2310 (E) Undefined external symbol "_log10" referenced in "C:\....
対処 : <HEW> [ビルド]/[SuperH RISC engine Standard Toolchain...]
          [標準ライブラリ]
            カテゴリで標準ライブラリを選択
              math.hにチェック
              string.hもついでに
ドキュメントを見ると、標準ライブラリ関数として、これらの数値演算関数は使えると書かれています。当然デフォルトの環境で使えると思っていたので最初は、開発環境が壊れたと思いました。しかし、調べていくうちに、”SuperH RISC engine Standard Toolchain...”での設定が必要と知りました。

2.セクションの設定エラー
エラー: L2321 (E) Section "B" overlaps section "P"
     L2321 (E) Seciton "R" overlaps section "P"
対処 : <HEW> [ビルド]/[SuperH RISC engine Standard Toolchain...]
          [最適化リンカ]
            カテゴリでセクションを選択

   セッションP~Dに384KB(0x60000)を確保することにして、セッションB,Rの設定 1C005000~ => 1C061000~に変更

(セッション情報 ビルド時に作成されたマップファイル(*.map)で確認した内容 )
セッション P~Dまでが 1C001000~1C008437 で サイズ 7436(29750)
セッション B,Rが   1C005000~1C005D33 で サイズ d34(3380) ※確かにかぶっている。
セッション Sが    1C0F0600~1C0FFFFF で サイズ fa00(64000)

I誌(2010.6)の第3章の記事(P107)で、セクションの設定例(表6)があり、その設定を鵜呑みにして、セクション設定を行ったことが原因、設定例では、プログラムサイズが16KB未満に限定されてしまいます。
HEWの無償版の制限サイズ256KBに合わせた設定であってほしかった。


次に、今年の基板で手こずった点を以下に述べます。

○マルチファンクションタイマパルスユニット2(MTU2)
 I誌の記事には、コンペアマッチタイマ(CMT)の使い方があったのですが、2Chしかないので、MTU2を使いたいと考え、MTU2を試すのですが、なかなか思うように使えません。特にタイマカウンタが16ビットで、他のマイコンの32ビットのタイマカウンタに慣れいた自分にとって結構不便を感じました。
また、CMTとMTU2の使い勝手が大きく異なることも....

○レジスタのサイズがまちまち。
 レジスタのサイズは、8,16,32ビットがあり、同じようなタイプのレジスタで異なるサイズがある場合があり、ケアレスミスで、サイズを誤ってアクセスし、それに気付くまで結構時間がかかったりしました。
また、レジストリ等のネーミングルールがいまいち整備されていないようで、これも意外と手こずる原因になりました。
 SH系のソースのヘッダーファイル”iodefine.h”を工夫すれば、ほとんどのレジストリを32ビットで扱えるのではないと思うのですが、なにせこのヘッダーファイル、9000行を超える巨大ファイル、手が出せずにいます。

○割り込み
intprg.c、vecttbl.c、vect.h等を編集する必要あり、
・vect.hのエントリに(resbank)を付加、
  割り込み時にレジスタバンクを使うと言う意味か?
・vectbl.cはそのまま
・intprg.cに#pragma文と、割り込みでCallする関数を記述する。
いまいち、しっくりこない。


○汎用入出力ポート(GPIO)
・ポートEはオープンドレイン出力
 Vcc+抵抗で電圧を印加する。”1”出力はハイインピーダンスで電圧を保持し(High電圧)、”0”出力でこのポートを通しGNDに電荷を流し、Low電圧となる。
・ポートHは入力専用
GPIOの各ポートは、GPIOとしての機能と端子数を揃えてもらいたいものです。ポートHにLCDの端子を繋げてしまい、ハンダをやり直すはめになりました。I誌(2010.6)のP76-77を見ながら拡張ボードを作成したので、ビルドエラーで初めて、ポートの選択を誤ったことに気付きました。

0 件のコメント:

コメントを投稿