2010年6月30日水曜日

SH-2A(SH72620) 開発用 GNU GCC 環境整備中

今回は、GNU GCCによる環境整備の途中経過をメモ的に記述します。
7/1追記

 付属SH-2A基板(CQ出版Interface誌)で、SHマイコンデビューを果たしたと思いきや、HEWのライセンス切れ(試供)で、約半数のテストプログラムのビルドが不可となりました。
 ◎ビルド不可となったプログラム 
  ・ビデオディスプレイコントローラを使ったプログラム、特にフォントを組み込んだプログラム
  ・ファイルシステム(FAT)を組み込んだプログラム
 ◎HEWの制限(256KB)内でビルド可能なプログラム。
  ・簡易オシロスコープほか、V850、ARM7、Cortex-M3で組んだプログラムをSH用に修正したプログラム。
 結局、SH72620の特色を十分に活かそうとしたプログラムが制限にかかってしまったと言う感じでしょうか。

 以前、「GCC対応シリアル・ダウンローダ(TinyMON)」でGNU GCCによるビルドを行っているので、ビルド不可となったプログラムをGCCでビルドしてみました。
 なお、GNU GCCの環境は、KPITから入手したものと、Interface誌Webサイトから入手したものを試しました。特に、大きな違いは無いようです。(組み込まれているパッケージの数はKPITの方が多いようです、現時点で、ビルドエラーの発生状況は同じです。)

1.開発環境について(ビルド時のエラー)
  CMT割り込みのハンドリングが比較的理解しやすいと思い、I誌7月号3章「メモリ・カードとFATファイル・システムの実装」のサンプルコードcq_sh7262_gccを雛形に、HEWの制限に引っ掛かったプログラムプロジェクトをGCC対応をおこないました。
 ◎発生したビルドエラー その1
  ・asmfunc.s: Assembler messages:
   asmfunc.s:425: Error: misaligned data
   asmfunc.s:412: Error: offset to unaligned destination
   make: *** [asmfunc.o] Error 1
    asmfunc.sのSet interrupt mask level のコードを削除(もう少し検証)
 ◎発生したビルドエラー その2(その1での修正後)
  ・undefined reference to `end'
    過去に、このエラーで悩んだ記憶があるような。。。
    リンクスクリプトファイル Tsh72620_ram.ld を修正。
  ・undefined reference to `__fpscr_values'
  ・undefined reference to `log10'
  ・undefined reference to `pow'
    GNU GCCの開発環境に、mpfr、gmpパッケージを追加する必要があると思われる。
   ==>mpfr、gmpパッケージのインストール成功後も解決できず。7/1現在

2.開発環境について(mpfr、gmpパッケージの追加)
 I誌7月号6章「SH-2A対応GCCによるクロス開発環境の構築と使い方」のMPFRライブラリ、GMPライブラリのインストールを参考に、同パッケージのインストールを行いました。
 しかし、mpfrパッケージのインストールは失敗しました。
 (昨年はARMで成功していたが今回失敗)
 ●対処  7/1追記
  ・両パッケージのインストール先を /usr/local/sh-tools にする。
    Interface誌提供のGNU GCC環境は /usr/local/sh-tools
  ・gmpパッケージを先にインストールする。
    ①./configure --prefix=/usr/local/sh-tools
    ②make / make check / make install
  ・mpfrパッケージをgmpライブラリ、インクルードファイル指定でインストールする。
    ①/configure --prefix=/usr/local/sh-tools --with-gmp-include=/usr/local/sh-tools/include --with-gmp-lib=/usr/local/sh-tools/lib
    ②make / make check / make install


3.GNU GCCにより作成したプログラムについて。
 前述のプログラムについて、数値演算関数、浮動小数点関連のコードを削除し、とりあえずビルドを通しました。
 そのプログラムの動作は以下の通りでした。
 1)割り込みは不調
   CMTおよびMTU2による割り込み処理を試しましたが、いづれも不調でした。ただし、一部のプログラムについては、割り込みによるLEDの数回の点滅を確認できましたが、割り込みを使いこなすにはほど遠い状況です。
 2)空のforループの回りが遅い。
   Wait用に使用した、空のforループ HEWで1秒であったものがGCCでは4秒弱かかりました。結構気になります。
 3)割り込み処理なし、main()内のwhile(1)ループで処理をこなすプログラムは安定動作。
   (高機能のマイコンを使う意味がなさそう。)

以下に今後の課題をまとめます。
○GNU GCCの開発環境に、mpfr、gmpパッケージを追加
 =>成功 7/1
○割り込み処理の安定動作
○処理速度の改善、オプティマイズの検討

2010年6月19日土曜日

SH-2A SDカード(SPIモード)を試す。


CQ出版 Interface誌 2010/7号でFATファイルシステムの実装記事があり、同誌Webサイトでソースコード等が公開されました。記事を斜読しながら、SDカードの読み込みを試しました。


(モノクロLCD表示 左半分は表示不全)








概要
  [SDカード][SPIモード]==(SPI)==[付属SH-2A基板][モノクロLCD表示]

 ソースファイル
  (mmc.c/cc932.c)(ff.c)(main.c)
    mmc.c   SDカード制御(SPIモードコマンド送信、SPI設定)
    cc932.c  Unicode/SJIS変換
    ff.c    FATファイルシステム
    main.c   プログラムメイン
    他

 改造点
  ・SCIF(UART)による出力を液晶表示に(機能検証が出来る程度)
  ・SPIチャネルをCh0からCh1に(SPI1使用)
  ・MMC_CD/MMC_WPのポートアサインを変更 (PC6、PC7)使用


1.SDカード・ドータボードの作成
 ・シリアルフラッシュROM(M25P40)
   ブート用 SPI0接続・・・このため、SDカードはSPI1接続に変更
 ・SDカードコネクタ
   I誌 記事を参考に配線 付属SH-2A基板 CN3のピンアサインは以下の通り。

  [SDカード]   [付属SH-2A基板 CN3]    
   9       (100KΩ)--- 3.3V
   1 CD/DAT3   22 SSL10(CS) PG18(GPOIOのHi/Low出力でCS信号を代替)
   2 CMD     21 MOSI1(DI)         ---(100KΩ)--- 3.3V
   3 Vss      GND
   4 Vcc      3.3V              ---(0.1uF)--- GND
   5 CLK     23 RSPCK1(SCK)
   6 Vss      GND
   7 DAT0     33 MISO1(DO)        ---(100KΩ)--- 3.3V   
   8 DAT1    (100KΩ)--- 3.3V
   CD       28 PC7             ---(100KΩ)--- 3.3V
   WP       27 PC6             ---(100KΩ)--- 3.3V
   ※SDカード 1ピンのプルアップ(100KΩ---3.3V)は無し。
  最初、SDカード 1ピン(CS)信号はSPIのSSL信号を使うものだと思っていました。ソースコードにCS_HIGH/CL_LOWの操作があるのを、SH7262のSPI機能で賄えないかと思い色々調べるのですが不明、結局、ソースコードどおりにGPIOのHi/Low出力で行いました。

2.ソースの改造
 1)mmc.c
   ・使用する、SPIチャネル0をチャネル1に  (RSPI0=>RSPI1)
   ・CS、CD、WP のポートアサインを変更
 2)cc932.c  そのまま使用
 3)ff.c    そのまま使用
 4)main.c
   main()のfor(;;)ループ内のSDカード操作機能を切り出し、ディレクトリのファイルリスト表示、選択ファイルのテキスト表示を行う。
  ・di ディスク初期化(SPI、GPIOの初期設定) ディスクのフォーマットは行わないようです。
     disk_initialize()
  ・fi 論理ドライブ初期化 f_mount()
  ・fl ディレクトリ情報取得 f_opnedir(), f_readdir()
  ・fo ファイルOpen f_open()
  ・fr ファイルRead f_read()
  ・fc ファイルClose f_close()
  
 ※セクションの設定の試行錯誤に合せ #pragma section文の追加・削除を行っています。
 ※dhisk_initialize()の前にf_chdrive(0)を実行(メモ)


3.不具合対応(試行錯誤)
 1)モノクロLCD表示不全
  現象 モノクロLCD(SG12864)の左半分の表示が不能、プログラムの表示領域のデータも不全
  対処 FATファイルシステム(SDカード関連含め)、LCD表示を 個別のセクションに配置
  結果 プログラムの表示領域のデータは正常に設定されるようになるが、依然表示は不全

以前、V850 で SDカードの読み書きに挑戦したのですが、挫折、今回、ある程度の動作が確認できたことで、なんとか、SDカードの利用に目処がついたと思っています。後は、もう少し、公開されたソースを解析し、安定動作を実現したいと思います。

2010年6月12日土曜日

SH-2A ビデオディスプレイコントローラを試す。


(6/13 訂正)

CQ出版 Interface誌 付属SH-2A基板で、TFT-LCD の表示に挑戦しました。TFT-LCD は、OPTREX T-55343GD035...を使用しました。一部、前日、弊ブログで掲載した内容と重複している点もありますが、ご容赦願います。

1.準備
 1)コネクタ探し
  OPTREX 指定の以下の3種のFPC/FFCコネクタを秋葉原で探しました、ラジオデパートなどの数軒のコネクタ専門店を探すのですがいずれも、メーカーに発注になり、2000個単位でしか扱わないとの事、秋葉原ではどこも5個や10個程度は扱わないと言われました。そういわれながらも諦めきれず、秋葉原を放浪しました、すると、秋月電子通商近くの「鈴商」というパーツ屋で、メーカー不明ながらも0.5mmピッチ40極のFPCコネクタを1個50円で購入出来ました。また、17号線沿いの「スーパージャンク?」で0.5mmピッチ6極のFPCコネクタを1個16円で購入しました。
 ・表示側回路部FPC用コネクタ 0.5mmピッチ40極 (Kyocera Elco 6240)
   ==>前述の 0.5mmピッチ40極 コネクタを使用
 ・照明側回路部FPC用コネクタ 0.5mmピッチ3極 (Kyocera Elco 6298)
   ==>前述の 0.5mmピッチ6極 コネクタを使用 余り3極分のスペースを埋める。
 ・タッチパネルFPC用コネクタ 0.65mmピッチ4極(Kyocera Elco 6227)
   ==>自作コネクタ まだ試さず。
 2)FPC変換基板作成
  1)で入手した、FPC用コネクタ40極をサンハヤト SMTコネクタ変換基板CK-4にハンダ付けしました。配置を考え、11~50ピンを使用
 3)0.5mmピッチ6極FPC用コネクタの改造
  LCDバックライト白色LEDの電源として、1,3極を使用、リード線をハンダ付け、4~6極はプラスチックフィルム(0.2mm厚)を挿入固定
 4)拡張基板作成。
  付属SH-2A基板のCN3に接続し、シリアルフラッシュROM(M25P40)搭載、CN3のLCD_XXX..端子を、FPC用コネクタ40極に引き出す基板を作成。OPTREX T-55343GD035 にはSPIによる制御機能があるので、SPI0が使用できるように、M25P40と、T-55343GD035 の接続を切り替える回路を試しに搭載。(今だSPIは試していません。)

 5)カラーバー表示プログラムを試す。
  Interface誌のLCD表示サンプル(2010.6 6章)およびルネサスからダウンロードした、TFT-LCDパネル表示のサンプルコード(an_rjj06b1002_sh_lcd)を参考にして作成したプログラムを試す。
  T-55343GD035 は暗いまま、変化なし。
  (実は、かすかながら、左端、1cmに幅5mmの縦帯が見えた。後でこの縦帯が表示領域だったことを知りました。)
 6)LCDバックライト白色LEDの電源回路の作成
  今まで、使用のモノクログラフィックLCDを使った感覚で、OPTREX T-55343GD035 は3.3Vで全てまかなえると思っていたのですが、(OPTREXの仕様書 7.Electrical Specifications(電気特性)だけを見て判断し、T-55343GD035の購入を決めました。)
 OPTREXの仕様書の後ろの方、7.7.Lighting Specifications(照明仕様)に19.2Vの表記あり、さらに後日入手した T-55343GD035 アプリケーションノートよると、リニアテクノロジーのLEDコントローラLT3591が必要と知り、これを購入、ここからは以前、投稿した「ハンダ付けの。。。。」の内容どおりの試行錯誤をおこないました。
 とにもかくにも、T-55343GD035のバックライトの点灯に成功しました。ちなみに前述の5)を試すと、白地に縦の黒帯表示となりました。

2.TFT-LCDの表示
 1)SH-2AのLCD(T-55343GD035)コントロールの確認
  この時点で、LCDの表示は白地に黒帯(左端から1cmの位置に5mm幅)、T-55343GD035がかってに表示しているのか、SH-2Aが何らかの制御を行った結果なのか不明。
  そこで、SH-2Aのビデオディスプレイコントローラ3(VDC3)の表示領域外の色指定を試しました。
  グラフィックス画像外の色設定レジスタ(GROPBASERGB1)に赤、青、緑と順次設定し、これを試すと
LCDの表示は赤、青、緑と順次変化するのが確かめられました。
 ==>SH-2AのVDC3機能が稼動しているのを、初めて確認。

 2)表示調整
  この時点で、SH-2A側の設定は、マニュアルどおりの設定で、後は T-55343GD035 側の設定が必要と思われました。しかし、T-55343GD035 の初期設定は、SPI通信で行う必要があり、この設定法が今一つわかりません、CLKの周波数、各コマンド、各パラメータ等はドキュメントで確認できるのですが実際にどのようにすればよいのかわかりません、たとえば、コマンドとパラメータは繋げて送ればよいのか、一定の間隔を空けて送ればよいのか、はたまた、セパレータ等が必要なのか不明です。
   ・・・T-55343GD035のSPIによる設定はここで一旦諦める。
 そうこうしているうちに、DE の水平方向開始設定(DE_START_H)を適当にいじると、1)の表示の縦の黒帯が広がりました。さらにその黒帯の下半分に本来表示されるべきカラーバー画像の下部グレーのグラディエーション表示らしきものが見えるのに気付きました。そこで、カラーバー画像を横縞に変更すると(上掲の画像)、設定した全ての色表示が確認出来ました。
 後は、マニュアル無視のVDC3の設定を試すだけです。色々試すうちにDE の水平方向開始設定(DE_START_H)を320にすることで9割がたの表示になることがわかりました。(カラーバーの表示、上掲画像参照)
  *後は、SPIによる T-55343GD035 の設定で、SH-2A VDC3の設定を本来の値に戻すことが今後の課題となります。    (6/13訂正)

3.TFT-LCDの表示で遊ぶ。
 ここまでTFT-LCD(T-55343GD035)の表示が出来たら、何か、画像を表示したくなりました。
 1)RGB565形式の画像データファイル作成プログラム。
  以前、LUMINARY MICRO社 LM3S8962 の OLED(グラフィクディスプレイ128 x 96)の表示データを作成するために作成したアプリケーション(MakeRIT_Image)を修正し、画像ファイル(ビットマップ等)から、RGB565形式のデータを生成するアプリケーションを作成しました。
 最初はテキストファイル出力で、ヘッダーファイルで定義する画像データの配列の初期化データとして使用しました。プログラムサイズは256KBを超え、近い将来使えなくなるので、バイナリファイルを出力し、HEWのSH-2Aへのダウンロードファイルとして扱うようにしました。
 試しに、OPRTEX社のホームページをハードコピーしたビットマップファイルを320×240のRGB565形式の画像ファイルにして、T-55343GD035に表示しました。(上掲画像参照)

4.文字表示
 ここまでTFT-LCD(T-55343GD035)の表示が出来たら、何か、文字を表示したくなりました。
 1)自作フォント Font6×8
  いままでモノクロLCDで使用している自作フォントを使いました。ここで、SH-2AのVDC3の機能の便利さが実感されました。いままで、RAM上に個別にVideoRAMを組み、LCD内のVRAMと同期をとっていたのですが。今回の場合、直接LCD内のVRAMを操作する感覚で、表示が扱えます。
 2)STMicroのフォント
  以前、STMicroelectronics の STM32F のマイクロコントローラを試した際に使用したフォント 16×24 を組み込みました。
 フォントデータとしては、 "(SP)"以降でしたので、アスキーコードより、0x20(SP)を引く等工夫が必要でした。フォントデータだけ拝借、ライセンス的に多少の問題があるとは思いつつ、、
 3)IPA_FONTについて、
  ARMコンテスト優勝作品 「MP3プレーヤー。。。」2010.6掲載 を参考にIPAフォントを試したいと思いました。まずは、必要なサイズのフォントイメージを作成する必要があるようですが、今一つ不明、結構ハードルが高めかなと思います。ぼちぼちと試したいと思います。

※今回のTFT-LCD表示で気付いた点
 ・表示を試すカラーバーは、縦縞、横縞を準備するべき。
 ・表示を試すカラーバーは、左端、上端、下端、右端には、白、黒は避けるべき。
 ・まずは、表示外の色設定を行うこと。

※HEWのライセンス切れまであと、10日余り。256KBの壁がどの様なものか、GNU GCCに切り替えるべきか、、、、悩ましいことです。




2010年6月7日月曜日

付属SH-2A基板 2Chオシロスコープ


 CQ出版 Interface誌 付属SH-2A基板に 昨年NXP LPC2388基板 で作成した、簡易オシロスコープを移植しました。
 今回は、内蔵ADCを使いました。インターバルタイマ(MTU2使用)で最高で10uSの間隔でサンプリングします。(100KSPS)
 ハードウエア構成は、拡張基板を従来より、コンパクトにしました。

1.内蔵ADCについて、
 1)サンプリング周期の上限決定
   ルネサスSH7262ハードウエアマニュアルの「24.A/D変換器」 レジスタ:ADCSRのクロックセレクト:CKSの設定で変換時間 212~548tcycの記載が目に付き、ダメモトで10uSのサンプリング周期を試しました。多少の波形の乱れはあるものの一応サンプリングが成功しているようなので、この値を最高値としました。
 (tcycは Iφ:144MHzをさすのか、Pφ:24MHzをさすのかいまいち不明ながら、10uSのサンプリングが成功する可能性があると思い試しました。)

 2)ADCモードについて
  マルチモードと、スキャンモードを試しました。どちらもまだ深くマニュアルを読まず、とりあえずの設定でためしたら、それなりの動作をしたので、、、見直しの必要を感じています。

2.ハードウエア
 1)拡張基板
  昨年のARMマイコンコンテスト、「コイセ君」(小伊勢、井上 両氏 作成)の実機を拝見し、そのコンパクトさに魅力を感じ、今回それを見習い、95x72mmのユニバーサル基板に纏めました。
  上端にタクトスイッチを置くために、アクリル板で補強した事が工夫のポイントです。
 2)サブ(ドータ)基板
  現在、サブ基板上には、シリアルフラッシュROM(M25P40)を搭載し、アプリケーション毎に、サブ基板を使い分けることにしました、ファミコンのゲームカートリッジを交換するイメージです。
 現在 AN0、AN1の端子のみのもの(上記) と、 RS232Cドライバを搭載し、PCとのシリアル通信を行うものを組みました。
 将来、オシロスコープの電圧レンジ対応でリレー、オペアンプ、etcを搭載したものを作成したいと思っています。

2010年6月5日土曜日

ハンダ付けの限界に挑戦してみました。



今回は、SH-2A基板でカラーLCDの表示に挑戦したことから始まります。
使用した、カラーLCDは OPTREX T-55343GD035JU-LW-AEN で、少々手こずっています。

まず、Interface誌(2010/6)の液晶表示制御を参考に、プログラムを作成して実行しました。しかし、LCDは真っ暗のまま、砂嵐、ノイズぐらいは表示されると思っていたのですが、

OPTREX のドキュメントを調べ直すうちに、バックライトLEDの順電圧:19.2Vに気付きました、ここで初めて、LEDのコントローラ回路が必要であることがわかりました。

さらに、同LCDのアプリケーションノートが入手でき、そこには、LEDコントローラの動作例(回路例)が記載されています。LEDコントローラには LEDリニアテクノロジーのLT3591 が使われています。

 LT3591を購入し、実際に手にすると、3mm×2mmのパッケージ、各端子が0.5mmmピッチその小ささがかなりのハードルになったことを改めて実感しました。

 ハンダ付けに、四苦八苦した経緯を以下に述べます。

◎異常発熱。
 1個目のLT3591 出力の電圧(A-K間)は6.0V、普段使う3端子レギュレータ並みの発熱。LCDは依然真っ暗、6.0Vの出力では、、、
◎白煙が上がる。
 2個目のLT3591 CTRL端子をGND にすると、白煙が上がった、さらに、22uHのインダクタからも白煙が、、、
◎42.5Vの安定出力
 3個目のLT3591 CTRL端子を3.3Vに接続、出力の電圧(A-K間)は42.5Vで安定出力(無負荷)
 4個目のも同様に、42.5Vの安定出力

  ・・・42.5Vは危ないと思いながら、出力電圧が安定していたので、勇気を奮ってLCDに接続

◎LCDのバックライトLED点灯
 3、4個目のLT3591のコントロール回路をLCD(AK端子)に接続、ようやくバックライトLEDが点灯、この時の出力電圧は17.7Vで、発熱なし。
 

※ハンダ付け手順
 ①サンハヤトのエクステンション基板(0.5mmピッチ)を5mm(4線)切り分け、ハンダメッキする。
 ②LT3591の1~4端子に①の基板切片をつけ、裏面の接着状況を確かめて、5~8端子を着ける。
  *裏面の接着が、LT3591の裏面の中央のGNDに及ぶと、異常発熱、等の不具合に繋がる。
 ③SOP8ピン=>DIP変換基板を加工
   変換基板のハンダポイントを適宜に削り取る。(1~2mm程度残す程度)
 ④変換基板に、②を両面テープで固定する。 エナメル線のハンダ付けで、変換基板と②を繋げる。

2010年5月27日木曜日

付属SH-2A基板 開発メモ

一旦、これまでの付属SH-2A基板の開発手順および、注意点をまとめます。

履歴
 6/6変更                
 6/7変更、追記
 6/12、追記
6/23、追記
 8/1  追記


Ⅰプログラム開発
 1.HEW 新規プロジェクトワークスペースの作成
  1)「ようこそ」で「新規プロジェクトワークスペースの作成」を選択
   ・「ワークスペース名」を入力    "sh2a_wksp"
    (プロジェクト名はワークスペース名と同じ)
   ・「ディレクトリ」を入力(参照)
   ==> 参照で指定したディレクトリが "c:\sh2a_home" とすると "c:\sh2a_home\sh2a_wksp" となる。
   ・CPU種別 "SuperH RISC engine"  そのまま
   ・ツールチェイン "Renesas SuperH Standard"  そのまま
  2)CPU設定
   ・ツールチェインバージョン "9.3.2.0" そのまま
   ・CPUシリーズ "SH2A-FPU" を選択
   ・CPUタイプ "SH72620" を選択
  3)グローバルオプション設定
   ・浮動小数点演算モード "MIX" そのまま
   ・丸め方式 "Zero" そのまま     ・・・・ 要 検討
  4)自動生成 設定
   ・ヒープメモリ "使用" で サイズ H'400
   ・main()関数生成 "C source file"  そのまま  
   ・I/Oレジスタ定義ファイル "使用"
  5)ライブラリ設定
   ・ctype.h math.h を "使用"
   ・stdarg.h を 試しに 使用 ひょっとして printf() sprintf()で必要かも?
  6)スタック設定
   ・スタックポインタアドレス H'1C100000 に変更
   ・スタックサイズ H'FA00 に変更
  7)ベクタ設定
   ・ベクタテーブル定義 "使用"
    "PowerON_Reset_PC" "Manual_Reset_PC" のベクタハンドラがエントリされている。
  8)ターゲット設定
   ・ターゲット 
    "SH2A-FPU Cycle Base Simulator"
    "SH2A-FPU Functonal Simulator" 両方使わず。
   ・ターゲットタイプ/ターゲットCPU 1)CPU設定の通りの内容が表示 そのまま

    「完了」


 2.ユーザーライブラリ使用設定
  1)インクルードファイルディレクトリの指定
   「SuperH RISC engine Standard Toolchain」のコンパイラ/ソース/インクルードディレクトリで「追加」
   ・相対パスはCustom directoryを選択
   ・ブラウズでユーザーライブラリのインクルードディレクトリを選択
  2)ユーザーライブラリの設定
    「SuperH RISC engine Standard Toolchain」の最適化リンカ/入力/ライブラリファイルで「追加」
   ・相対パスはCustom directoryを選択
   ・ブラウズで ユーザーライブラリ.libを選択
         

 3.テストプログラムの作成
  1)main()の編集
   プロジェクト名.cのファイルにmain()がある。
   ・インクルードファイルの追加
    "iodefine.h","" に加え ユーザー定義インクルードファイルを追加。
   ・while(1)ループを追加
   ・プログラムコードを追加
  2)割り込み設定 intprg.c の編集
  インターバルタイマを MTU2 の TGInA で実現した 場合  
   ・179:MTU0_TGI0A (Timer0 で使用)
   ・186:MTU1_TGI1A (Timer1 で使用)
   ・190:MTU2_TGI2A (Timer2 で使用)
   ・194:MTU3_TGI3A (Timer3 で使用)
   ・199:MTU4_TGI4A (Timer4 で使用) で 割り込みでCallされるハンドラ関数を記述する。
    ※例
    // 179 MTU2 MTU0 TGI0A
    #pragma ifunc INT_MTU2_MTU0_TGI0A,int_mtu_tgi0a
    void INT_MTU2_MTU0_TGI0A(void){
      extern void int_mtu_tgi0a(void);
      int_mtu_tgi0a();
    }

  3)割り込みベクタの設定 vecttbl.cの編集
   HEWモニタプログラムでのプログラムの設定 
    #pragma section INTTBL
    void *INT_Vectors[] = {
    // 8 Reserved
     (void*) RESET_Vectors,// Dummy, Used by SPI-Flash boot

  4)割り込みベクタの設定 vecttbl.hの編集
    レジスタバンクの指定
    // 179 MTU2 MTU0 TGI0A
    #pragma interrupt INT_MTU2_MTU0_TGI0A
     を
    #pragma interrupt INT_MTU2_MTU0_TGI0A(resbank)
     に

 4.ROM化の設定
  1) resetprg.cの修正
    インクルードファイル "iodefine.h" を追加
    インクルードファイル "typedefine.h"の削除

    プログラムコード INTC.IBNR.WORD = 0x4000; を追加( _INITSCT();の前 )
  2)出力ファイル形式の設定
   「SuperH RISC engine Standard Toolchain」の最適化リンカ/出力
    の出力形式をバイナリへ変更

 5.セクションの設定
  ・DVECTTBL,DINTTBL: 0x1C000000
  ・PResetPRG,PinPRG: 0x1C000500
  ・P,C,C$BSCE,C$DSEC,D: 0x1C001000
  ・B,R: 0x1C061000
  ・S: 0x1C0F0600
 
 6.新規セッションの作成
  1)新規セッション
   ・セッション名 適宜
   ・ターゲット SH-2A Serial Monitor を選択
   ・使用するプロジェクトジェネレータ Renesas SH Project Generator そのまま
  2)CPU選択
   ・CPUシリーズ "SH2A-FPU" を選択
   ・CPUタイプ "SH72620" を選択
 
Ⅱ工夫
 1.割り込みハンドラ設定  例)MTU2 Ch0-a
   割り込みハンドラ関数の設定を関数ポインタで行うことで、割り込み時にCallされる関数をプログラムで切り替えるように修正(割り込み発生時に分岐(if文、 switch文)させるのではなく、割り込み発生前にすでに、割り込みハンドラ関数を切り替えられるように修正)

  1)割り込みプログラム"intprg.c"での割り込みハンドラ関数の設定を変更
    #pragma ifunc INT_MTU2_MTU0_TGI0A,int_mtu_tgi0a
    void INT_MTU2_MTU0_TGI0A(void){
      extern void (*int_mtu_tgi0a)(void);
      (*int_mtu_tgi0a)();
    }
  2)割り込みハンドラ関数の宣言 main.c
    void (*int_mtu_tgi0a)(void);
  3)割り込みハンドラ関数の宣言 その他のソース
    extern void (*int_mtu_tgi0a)(void);
  4)割り込みハンドラ関数の実装 ユーザーソース
   ①割り込みハンドラー関数 設定関数  ユーザーソース1
    void TIMER_Set_Intrrupt(TIMER_TypeDef* TIMERx,void *pfunc,int intpri)
    {
        switch(TIMERx->Timer_ID)
        {
        case TIMER_ID_0:
            INTC.IPR11.BIT._MTU00 = (u8)intpri;
            INTC.IPR11.BIT._MTU01 = (u8)intpri;
            int_mtu_tgi0a = pfunc;
           break;
        case TIMER_ID_1:
   ②割り込みハンドラー関数 設定 ユーザーソース2
    #define APP_INTRPT_PRIORITY 6
    extern void (*int_mtu_tgi0a)(void);

    void APP_TM2_IRQInterrupt(void) ・・この関数を割り込み時にCallされるように設定。
    {
      ・・・・・・・・・・
      TIMER_InterruptReset(&TIMER_2); ・タイマスタートレジスタ(TMSTSR)で割り込みフラグクリア、タイマインタラプトイネーブルレジスタ(TMIER)で割り込み許可を行う。
    }  

    void App_examplefunc()
    {
      ・・・・・・・・・・
      TIMER_Set_Intrrupt(&TIMER_2,APP_TM2_IRQInterrupt,APP_INTRPT_PRIORITY);
      ・・・・・・・・・・
      return;
    }

 2.大きな初期化データの扱い。 6/12追記
  画像データの表示に、ヘッダーファイルで定義された配列の初期化データを使った場合、プログラムファイルは、その分大きくなる。HEWのライセンス制限を考えると、画像データをバイナリファイルにし、HEWのダウンロードファイルとして扱う、プログラムでは、ダウンロード先のアドレス指定でデータを扱う。

 3.セクションの利用 (大きな初期化データの扱い。)6/23追記
  データ領域に設定したデータが、原因不明(たぶん私のバグが原因と思う)で潰れていた、その分析、対処で、そのデータ領域を任意のアドレスに配置するために セクションを利用しました。
  1)コーディング ソースファイル(*.c)
   ユーザー関数の前に #pragma section SECTION_NAME を記述    
  2)コーディング ヘッダーファイル(*.h)
   ヘッダー定義の先頭に #pragma section SECTION_NAME を記述    
   ヘッダー定義の末尾に #pragma section を記述・・・セクション指定を解除
  3)セクションの設定(作成)
   ①セクションアドレスの設定
    シンボル表示で空きアドレスを確認する。

   以降 [SuperH RISC engine Standard Toolchain] の作業
   ②セクション PSECTION_NAMEを設定 プログラム領域 
   ③セクション CSECTION_NAMEを設定 定数領域 
     const unsigned char CnstXxT[128] =
       {0,3,1,4,1,5,9,2,6,5,3,5,,,,,,,};
   ④セクション DSECTION_NAMEを設定 初期化データ領域 
     unsigned char XxT[128] =
       {0,3,1,4,1,5,9,2,6,5,3,5,,,,,,,};
   ⑤セクション BSECTION_NAMEを設定 未初期化データ領域 
     unsigned char WkXxT[128];
   ※設定(作成)したセクションに、メンバーとなる関数、定数、変数の定義が無い場合、ビルドでワーニングが出る。ワーニング表示されたセクションは削除します。

Ⅲビルドエラー対応
 1.HEW
  1)コンパイルエラー 8/1追記
   現象
    #pragma inline_asm set_sp
    static void set_sp(int a){MOV R4, R15} で
    Illegal Option for #pragma inline_asm エラー
   対処
    「ビルド」/「SuperH RISC engine standerd tool chain」の コンパイラ/カテゴリ:オブジェクトで出力ファイル形式 「アセンブリプログラム(*.src)」に変更

  2)コンパイルエラー 8/1追記
   現象
    #indef HEW でエラー発生
   対処
    「ビルド」/「SuperH RISC engine Standard Toolchain」の コンパイラ/カテゴリ:ソース/マクロ定義でHEW(値なし)を追加



Ⅳ不具合(問題点)対処
 1.HEW関連
  1)関数 sprintf() でハングする。    6/6追記
   現象:プログラムがsprintf()で止まる。
   原因:標準ヘッダー 指定忘れ #include 
   対処:このヘッダーを指定 で 正常に

  2)関数 pow() を使った演算結果不具合   6/6追記
   現象:pow()を使った計算結果が 4、8、16、で扱われるはずが、、3、7、15で扱われた計算結果になっている。
   原因: 例 pow(2.0,2.0)の演算結果は4.0となっているが、どうも 3.9999....で扱われているようで、整数値との計算で3への切り捨てが行われているようです。
   対処:「SuperH RISC engine Standard Toolchain」のCPU設定、標準ライブラリ設定 等のオプション設定などで対処すべきとは思いますが、自作のpow()関数で逃げました。
 自作pow()関数 ループで乗算を繰り返す簡単なものですが、昔、MSCの初期バージョンを使っていた頃にも同じようなことをしていたと思い出しました。

 2.付属SH-2A基板およびSH72620関連
  1)内蔵ADC               6/6追記
   現象:AN0入力の出力値がAN1入力の影響を受ける。
    AN0の出力値のノイズ値を調べると、AN1の入力のタイミングであることがわかりました。
   対処;未定

  2)内蔵ADC               6/7追記
   現象:AN0入力、シングルモード、でループでデータ収集すると、ハングする。
      ループ回数は不定で、数万回のADCのデータ変換でハングするようです。
   原因:ADCの終了フラグ待ちでハング、。。。終了フラグが立たないようです。
   対処:ADCをスキャンモード、マルチモードで使う。なんとか所定の動作が達成できました。

  3)ルネサスシリアルペリフェラルインターフェース(SPI) 6/23追記
   現象:コマンドレジスタ(SPCMD0-3)設定内容がメモリ表示で確認出来ない。SPCMD0の場合、アドレス0xFFFF8810に設定した値が表示されると思うが、00 00の表示、(インスタントウォッチでは設定値が確認できるのですが)、これが原因かどうかしれませんがSPCMD0-3の設定がコーディングの手法により上手くいかないことがあるようです。
 成功したコーディング RSPIn.SPCMDm.WORD = 0xXXXX;
   対処: 未

2010年5月23日日曜日

SH-2A基板 32KB超プログラムのROM化を試しました。



先日、Interface誌 付属SH-2A基板特設ページ でリリースされた 「シリアル・フラッシュROM用ブート・ローダのプロジェクト・ファイル一式をアップロードしました(SPIbootloader1)」を参考にし、ブートローダープログラムを改造し、また、以前使用した「ROM化ユーザ・プログラム書き込み用プログラム(SPIwreterUserDI)」再度改造して、32KBを超えるサイズのプログラムをシリアル・フラッシュROM(M25P40)に書き込み、その動作を確認しました。


概要

1.プログラムの改造
 1)ブートローダープログラム(SPIbootloader1)のシリアル・フラッシュROMからの読み出しサイズを
448KB に拡張した。
 2)ROM化ユーザ・プログラム書き込み用プログラム(SPIwreterUserDI)で
  ・ブートローダープログラム
  ・HEWモニタプログラム
  ・ユーザープログラム
    の3つのプログラムを個別に書き込むように改造した。
2.ROM化プログラムの動作確認
  ・プログラムサイズ 42,364バイト のプログラムを書き込む
  ・リセット、USBケーブル 抜き差し(電源) での 稼動を確認
  ・HEWモニタの動作を確認  NMIピン High (JPP2 Open)

以下に今回の作業を述べます。

1.ブートローダープログラム(SPIbootloader1)の改造
 1)入手したブートローダープロジェクトの解析
 以前 Renesas サイトから入手した「シリアルフラッシュ・シリアルフラッシュメモリからのブート例」サンプルコード を参考にしながら、ソースコードを解析しました。
 気付いた点
  ・ロードするプログラムのサイズが実質固定で32KBであった。
   本来、0x00002000にあるプログラム情報(APPINFO)を取得し、プログラム開始・終了アドレスの差分をプログラムのロードサイズとしているが、今まで作成したプログラムの開始アドレスが0x1C000000(0x1C000500)であることを考えると、32KB固定と考えられる。
  ・プログラム情報(APPINFO)のアドレスの扱いが、ユーザープログラムの場合、0x00008020、HEWもにたの場合 0x00002020 ・・・・この 0x20(32バイト)のズレが不明 (このズレを無視して、0x00008000、0x00002000 で ローダプログラムを組むと不調 )
      
      32バイトのズレは、RESET_Vector のポインタが格納されている位置、

      Renesasのサンプル(sh7264_sflash_loader_prog)は、ブート開始時に PowerON_Reset_PC [0x1C000500] に跳び、
      SPIbootloader1の場合、RESET_Vector [0x1C000000]に跳ぶ、この違いがよく解らない。
 
      RESET_Vectorの最初のエントリはPowerON_Reset_PC 
      直接PowerON_Reset_PCに跳ぶか、
      一旦RESET_Vectorに跳ぶが、実はPowerON_Reset_PCに跳んでいた、同じようで同じでない、、、、

      何か苦肉の策で リザーブ8に RESET_Vector のポインタをセットして、このようなスキームを実現したのか、、、、 よく解らない。  

 2)ソース main.c の修正
   個々の疑問には、目をつぶり、
     /* アプリケーションプログラムを内蔵RAMにロード */
     sf_byte_read_long(0x00002000, (unsigned long *)app_top, app_len);
   の直前に、app_len = 0x00070000; //(448KB)を置く

    (app_len の算出等で改造の余地あり。)
  
2.ROM化ユーザ・プログラム書き込み用プログラム(SPIwreterUserDI)の再改造
 1)ブートローダープログラムのROM書き込み
  1.で作成したブートローダープログラムを 0x1C080000 に置いて、シリアルフラッシュROMのセクタ0の消しこみ後、先頭8KBに書き込む。

     /* SPI-ROMの書き込み処理 for HEW Loader Program */
     if( write_prog_data( (unsigned char *)0x1C080000, 0x00000000, 0x00002000) < 0 ){
        error();
     }

 2)HEWモニタプログラムのROM書き込み
   以前使用した「SPIシリアル接続フラッシュROM アップデート・ファイル」(SPIROM.BIN)のHEWモニタプログラムの部分をシリアルフラッシュROMの 8KB~32KB に書き込む。
   (HEWでは、SPIROM.BIN は 0x1C092000 に置く)   6/4追記

     /* SPI-ROMの書き込み処理 for HEW Monitor */
     if( write_prog_data_user( (unsigned char *)0x1C092000, 0x00002000, 0x00006000) < 0 ){
        error();
     }

 3)ユーザープログラムのROM書き込み
   作成した、ユーザープログラムをシリアルフラッシュROMの 32KB以降 に書き込む。書き込みが次セクタに及ぶ場合、先に、次セクタの消しこみを行う。
   (HEWでは、USERROM.BIN は 0x1C0A0000 に置く)   6/4追記
     app_prog_size = SECTOR_SIZE * SECTOR_NUM - 0x00008000;

     /* SPI-ROMの書き込み処理 for UserProgram */
     if( write_prog_data_user( (unsigned char *)0x1C0A0000, 0x00008000, app_prog_size) < 0 ){
        error();
     }

3.ROM化プログラムの動作確認
 今回の検証用に32KBを超えるプログラムを作成した、半ば強引に、動作が不十分なグラフィックモジュールを組み込んだ。現時点で動作確認できているモジュールについては、正常の動作が確認できました。
 後は、1MBを超えるプログラムサイズをどうするか、、まあ、不要なことかも知れません。


*write_prog_data_userのコード
  int write_prog_data_user(unsigned char *program_data, unsigned long sflash_addr, unsigned long size)
  {
    unsigned long sector_no;
    unsigned long saddr;
    unsigned long sz;
    unsigned char read_data;
    unsigned char *w_p;

    /* ==== 引数から値をローカル変数にコピー ==== */
    saddr = sflash_addr;
    sz = size;
    w_p = program_data;

    /* ==== シリアルフラッシュメモリへの書き込み ==== */
    while( sz > 0){
      sector_no = saddr / SECTOR_SIZE;

      /*セクタ消去を調整 No.0 セクタの消去除外 */
      if(sector_no > 0)
      {
        if( Is_erased_sector(sector_no) == 0 ){ /* 未消去であれば */
          sf_sector_erase(sector_no);  /* 消去する */
          set_erase_flag(sector_no);  /* 消去したら、消去済みフラグを立てる */
        }
      }
      sf_byte_program(saddr, w_p, 1 );  /* 1バイトずつ書き込む */
      w_p++;
      saddr++;
      sz--;
    }
    /* ==== ベリファイ処理(書き込みの検証)==== */
    saddr = sflash_addr;
    sz = size;
    w_p = program_data;

    while( sz > 0){
      sf_byte_read(saddr,&read_data, 1);  /* 書き込みしたデータを読み出し */

      if( *w_p != read_data ){
        return -1;    /* データが一致しない場合エラーとする */
      }
      w_p++;
      saddr++;
      sz--;
    }
    return 0;
  }
※5/24 訂正 0x1C090000 ==> 0x1C0A0000 ユーザープログラムROM書き込み

2010年5月22日土曜日

SH-2A基板 「GCC対応シリアル・ダウンローダ(TinyMON)」を試す。



CQ出版 Interface誌 付属SH-2A基板特設ページ から「GCC対応シリアル・ダウンローダ(TinyMON)」を入手し、その動作を検証しました。

「GCC対応シリアル・ダウンローダ(TinyMON)」の検証では、GNU GCC 開発環境の検証、この環境で作成したプログラムのROM化の検証が併せて行えたようです。

[概要]
・TinyMONのシリアル通信チャネルをSCIF2からSCIF3に変更
・GNU GCCによる開発環境の検証 (TinyMONのビルド)
・TinyMONの動作確認

1.TinyMONの改造
 シリアル通信チャネルをSCIF2からSCIF3に変更するにあたり、以下の修正をTinyMONに行いました。
 1)cpu_uart.cの修正
  ・UARTコントローラの設定変更
    #define USE_UART_CH 2  => #define USE_UART_CH 3
  ・ポート設定
   付属SH-2A基板のCN3のNo.18(RxD3)No.24(TxD3)を使用するための設定。
    /* ポートコントローラ制御レジスタ */
    #define PGCR3 ((volatile unsigned short int *)(0xFFFE38C8))
    #define PGCR4 ((volatile unsigned short int *)(0xFFFE38C6))
     を追加

    /* ポート設定(RXD3(PG15))*/
    *PGCR3 = (*PGCR3&0x0FFF)|0x3000;
    /* ポート設定(TXD3(PG16))*/
    *PGCR4 = (*PGCR4&0xFFF0)|0x0003;
     を追加

    ※2010.7.18追加
    シリアル通信チャネル3 BaseAddress の設定
    /* FIFO付きシリアルコントローラSCIF(SCIF3) */
    #define BaseAddr (0xFFFE9800)
     を追加
 

    シリアル通信チャネル3 スタンバイ解除
    /* SCIF3スタンバイ解除 */
    *STBCR4 = (*STBCR4 & 0xEF); /* SCIF3動作 */
     を追加

2.TinyMONのビルド
 GNU GCCの開発環境は KPITカミンズ・インフォシステムズ・リミテッド より入手した環境で行いました。
 1)Makefileの修正
  ・各ツールの指定
    GCC = /usr/local/sh-tools/bin/sh-elf-gcc
    LD = /usr/local/sh-tools/bin/sh-elf-ld
    AS = /usr/local/sh-tools/bin/sh-elf-as
    OBJCOPY = /usr/local/sh-tools/bin/sh-elf-objcopy
    =>
    GCC = sh-elf-gcc
    LD = sh-elf-ld
    AS = sh-elf-as
    OBJCOPY = sh-elf-objcopy
    (/cygdrive/c/KPIT_Cummins/GNUSHv10.01-ELF/sh-elf/bin/sh-elf-gcc.exe ..)
    (環境設定で既にPATHが通っているので)
  ・ライブラリの参照指定を変更
    GCCLIB = /usr/local/sh-tools/lib/gcc/sh-elf/3.4.5/m2
    $(LD) -Map $(TARGET).map -T $(LDSCRIPT) $(OBJS) -L$(GCCLIB) -lgcc -o $(TARGET).elf
    =>
    LIBRARY_DIRS = -L ../../../../KPIT_Cummins/GNUSHv10.01-ELF/sh-elf/lib/gcc/sh-elf/4.4-GNUSH_v10.01/m2a -L ../../../../KPIT_Cummins/GNUSHv10.01-ELF/sh-elf/sh-elf/lib/m2a
     $(LD) -Map $(TARGET).map -T $(LDSCRIPT) $(OBJS) $(LIBRARY_DIRS) -lgcc -o $(TARGET).elf
    ※修正前のライブラリディレクトリ指定が m2 で 気休めに m2a に変更しました。

 2)ビルドの実行
   色々、試行錯誤(後述)の結果、無事成功。
 3)シリアルフラッシュROMへの書き込み。
   SPIwreterUserDI(改)により TinyMON を シリアルフラッシュROMに書き込みました。

3.TinyMONの動作検証
 幸か不幸か、HEWをインストールしたPCにシリアル(RS232c)のポートが残っていたので、付属SH-2A基板にRS232CドライバIC(ADM3202)を繋ぐだけでPCとのシリアル通信が実現できました。
 とりあえず、ハイバーターミナルでTinyMONの動作が検証できました。
 ・SH7262リセットで ハイバーターミナルに”Tiny Dump Monitor” が 表示
 ・ヘルプ表示
 ・メモリダンプ
   ためしに、SH7262レジスタ 周波数制御レジスタ(FRQCR)を確認しようと 
   DB FFFE0010 を 実行したが、0x1104 の設定は確認出来なかった。????
   (00 00 であった)
   ・・・課題点

※開発メモ
1.GNU GCCの開発環境(KPIT版)/(付属SH-2A基板特設ページ版)
 今回GNU GCCの開発環境はKPITでリリースされている環境を使用しました、付属SH-2A基板特設ページ(Interface誌)で提供される sh-tools20100424.tar.bz2 で GNU GCCの開発環境を整えた場合、上記のようなMakefileの修正の必要は無く容易にGNU GCCによる開発が出来るようです。

2.GNU GCCの開発環境(KPIT版)での注意点
 1)インストール先について。
 私の場合 WindowsVISTA 64bit版にインストールしました。すると、インストール先が Program Files(x86) になりました。これが Cygwin で結構、厄介なことになります。しかたなく、別ディレクトリ(C:\KPIT_Cummins)にインストールし直しました。

 2)Makeファイルのライブラリ設定。
 ・ビルドエラー ”cannot find -lgcc make: *** [all] Error 1 ”が発生。 最初、libgcc.a の所在を確認し、Makefileでのライブラリ設定に反映させました。しかし、エラーは解消されず、sh-elf-ld が libgcc.a を見つけられないのか不明でした。
 試しに、-lc や -lm 等でも ビルドを行うと、これも同様のエラー libc.a、libm.c が 有るのに見つけられないと言うエラーが起きました。いろいろもがくうちに、ライブラリフォルダの位置が問題と考えるようになりました。
 Windows上で C:\KPIT_Cummins\GNUSHv10.01-ELF配下のライブラリファイルは、Cygwinでは、/cygdrive/c/KPIT Cummins/GNUSHv10.01-ELF配下と表現します。
 Windows上で C:\Cygwin\usr\local\sh-tools等の配下のライブラリファイルは、Cygwinでは/usr/local/sh-tools等の配下と表現します。
 どうも、sh-elf-ld が /cygdrive/c/....の 表記を受け付けないようです。この推測を実証するために、次の対処を行ったところ、ようやくビルドが成功しました。

 (対処) 
  ライブラリ指定を
    LIBRARY_DIRS = -L /cygdrive/c/KPIT_Cummins/GNUSHv10.01-ELF/sh-elf/....
  から
    LIBRARY_DIRS = -L ../../../../KPIT_Cummins/GNUSHv10.01-ELF/sh-elf/....
  に修正

2010年5月16日日曜日

SH-2A基板 「ROM化ユーザ・プログラム書き込み用プログラム」を試しました。 (その2)

「ROM化ユーザ・プログラム書き込み用プログラム(以降 SPIwreterUserDI)」により、いままで作成した、付属SH-2A基板 自作テストプログラムの書き込みを行いました。

◎自作テストプログラムのROM化対応について。
 ○ SPIwreterUserDIのドキュメント(README.TXT)で指示されているROM化作業
  (「付属SH-2A基板特設ページ」
   /「付属SH-2A基板関連のダウンロード・データ」
    /「ROM化ユーザ・プログラム書き込み用プログラムをアップロードしました」
   から入手した SPIwriteUser.zip >> CQ Connect) 

  ・出力ファイルをバイナリに変更
   [ビルド]/[SuperH RISC engine Standard toolchain]
    [最適化リンカ]/[出力]で  「バイナリ」を選択
  ・vecttbl.cの修正
   割り込みベクタテーブル(INT_Vectors[])
    // 8 Reserved
   (void*) Dummy, を (void*) RESET_Vectors, に修正

 ○ Interface_Sample2のドキュメント(README.TXT)で指示されているROM化作業
  (「付属SH-2A基板特設ページ」
   /「付属SH-2A基板関連のダウンロード・データ」
    /「タイマ割り込みLED点滅制御サンプル・プログラムの改定版を用意しました」
   から入手した Interface_Sample2.zip) 

  ・resetprg.c で レジスタバンクの初期化処理を追加
    #include  "typedefine.h" を #include  "iodefine.h" に置き換える。

   INTC.IBNR.WORD = 0x4000; を set_fpscr(FPSCR_Init); と  _INITSCT();の間に追加する。


◎自作テストプログラムのROM化 結果
 ・GPIOテストプログラム(ほぼサンプルプログラム)
   動作:  4つのLEDを交互に点滅
   サイズ: 6912バイト
   ==> 成功
 ・モノクロLCDテストプログラム
   動作: LCD SG12864 の 表示 (自作フォント表示)
   サイズ: 33260バイト
   ==> 成功/失敗 (単純にROM書き込みを繰り返すのですが。成功したり、失敗したり。稼動までに異常に時間がかかったり。。。。)
 ・キー入力+モノクロLCD テストプログラム
   動作: LCD SG12864 の 表示 (自作フォント表示)
       キー入力により、表示文字を変化させる。
   サイズ: 33988バイト
   ==> ほとんど失敗 10回の試行中 成功2回、成功の場合も一旦USBケーブルを外すと動作せ
ず。


まだ、Interface誌の付属SH-2A基板関連の公開情報(本誌、およびダウンロードファイル)の読み落としがあるのでしょう。あとは、暇をみて、ぼちぼちと。。。。。


******************

最後に jujurouさんのコメントに感謝します。

2010年5月15日土曜日

SH-2A基板 「ROM化ユーザ・プログラム書き込み用プログラム」を試しました。



 先日、Interface誌 付属SH-2A基板特設ページ でリリースされた 「ROM化ユーザ・プログラム書き込み用プログラム(以降 SPIwreterUserDI)」を試しました。



 早速、”だめもと”で、外付けシリアルフラッシュROM(M25P40)搭載の付属SH-2A基板で試しました。結果は、当然のことですが失敗しました。SPIwreterUserDI実行後は、HEWモニタプログラム等が消去されたようで、リセット後、SH-2A基板は沈黙。。。



 以下に、SPIwreterUserDI の改造および、その際の顛末について述べます。


※改造後のプログラム概要
  ・M25P40 セクタ0 のクリア後、以前使った。「SPIシリアル接続フラッシュROM アップデート・ファイル」(SPIROM.BIN)の前半 32KB分 を書き込む。
  ・M25P40 セクタ0 の後半32KBから、ユーザープログラムを書き込む。
   (セクタの消去は、セクタ1以降に行う。)


1.SPIwreterUserDIを外付けシリアルフラッシュROM(M25P40)に使う上での問題点。
 ・付属基板上のM25P05-Aの場合、ユーザープログラムはセクタ1に書き込まれるが、M25P40では、HEWモニタプログラムと同じ、セクタ0に書き込まれる。この時、セクタ0の消去が行われ、HEWモニタプログラム等が消去されてしまいます。


2.SPIwreterUserDIの改造
 ①SPIwreterUserDIの改造 その1
   serial_flash.hのセクタサイズ、セクタ数を書き換える。(M25P40用に) 
   ※プログラム書き込みサイズはまだそのまま。
 ②ビルド
 ③書き込み実行 ==>失敗
   書き込み実行し、LEDの点滅までたどりつくが、付属基板リセットすると、HEWモニタ、およびLED点滅プログラムは作動しなくった。
 ④M25P40の復旧
   モニタプログラムを書き込み、MP25P40を復旧させる。
 ⑤SPIwreterUserDIの改造 その2
   a.SH-2Aマイコン基板実装SPIシリアル接続フラッシュROM アップデート・ファイル(2010年4月24日版)の 「SPIROM.BIN」をSPIwreterUserDIのフォルダに組み込み、Download modulesに追加する。
     USERROM.BINのオフセットを 1C090000に変更
     SPIROM.BINのオフセットを 1C080000で追加する。
   b.main.cを修正
    ・SPIROM.BINを シリアルフラッシュROMのアドレス0x00000000 サイズ0x00008000で write_prog_dataを使って書き込む。
    ・write_prog_data_userをwrite_prog_dataを元に作成する。(セクタNo.0の場合 セクタの消去は行わないように改造)
    ・USERROM.BINを シリアルフラッシュROMのアドレス0x00008000 サイズ0x00008000で write_prog_data_userを使って書き込む。
   c.ビルド/ダウンロード SPIwriterUser.abs、SPIROM.BIN、USERROM.BIN
   d.実行
   ==>成功
 ⑥SPIwreterUserDIの改造 その3
   ・write_prog_data_userでの書き込みプログラムサイズを セクタサイズ(SECTOR_SIZE)× セクタ数(SECTOR_NUM) - 0x00008000 に変更

3.今後、
 現時点で、SPIwreterUserDIでROM化するユーザープログラムの作成に失敗しています。付属SH-2A基板特設ページでダウンロードした、LED点滅プログラム(Interface_Sample/SH7262_LED)でも試すのですが、上手くいきません。SPIwreterUserDIに付随した LED点滅プログラム(USERROM.BIN)だけROM可できている状況です。

 その辺の所は、Intarface次号を期待して、。。。。

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を見ながら拡張ボードを作成したので、ビルドエラーで初めて、ポートの選択を誤ったことに気付きました。

2010年4月29日木曜日

SH-2A基板用HEWモニタプログラムを外付けシリアル・フラッシュROMに書き込む。



手持ちのシリアル・フラッシュROM(M25P40 512Kバイト)を SH-2A基板(Interface 2010.06付属)のブート用に使いたいと思い、HEWモニタプログラムの書き込みに挑戦しました。











概要

SH-2Aマイコン基板実装SPIシリアル接続フラッシュROM アップデート・ファイル
[アップデートプログラム(SPIwriterAll) ]==(SPI Ch0)==> [基板上のシリアル・フラッシュROM(M25P05-A)]

[アップデートプログラム(SPIwriterAll)改 ]==(SPI Ch1)==> [外付けシリアル・フラッシュROM(M25P40)]
に改造


手順

 1.Interface誌 Webサイトの
   [付属SH-2A基板特設ページ]/[付属SH-2A基板関連のダウンロード・データ]/[付属SH-2Aマイコン基板回路図などをアップロードしました]
    で SH-2Aマイコン基板実装SPIシリアル接続フラッシュROM アップデート・ファイル(2010年4月24日版)
      で ROM_UpDate0424.zip を取得した。

 2.アップデートファイルの解析。
   内容: アップデートプログラム(SPIwriterAll) +  HEW モニタプログラム(書き込みデータ) の構成
  1)アップデートプログラム(SPIwriterAll / main.c)
   ポインタ 0x1C080000 以降のデータをSPI Ch0 のシリアル・フラッシュROMのアドレス 0x00000000 以降に 64Kバイト書き込む。
  2)ポインタ 0x1C080000 について。
    アップデートプログラム(SPIwriterAll)のリンクマップ(SPIwriterAll.map)をみる、マッピングリスト末尾は 1c07ffff となっている。  
     ==> これが、main.cでの HEW モニタプログラム のポインタ 0x1C080000 の 起源?
 (デバッグでの注意点)
     ==> main.cでの HEW モニタプログラム のポインタ(0x1C080000)と HEW ダウンロードモジュールのオフセット設定と、が一致していること。 

 3.アップデートプログラムの改造
  1)フォルダ ROM_Update を ROM_Createに複写 これ以降 ROM_Createでの作業
  2)プログラムソース(serial_flash.c)の修正
    SPI Ch0を Ch1に置き換える。 
   ①関数 io_init_rspi(void) の修正
    ・ポートレジスタの設定 SPI Ch1 用に
     PG20:MISO1 PG19:MOSI PG18:SSL10 PG17:PSPCK1
    ・SPI CH1レジスタの稼動
     スタンバイコントロールレジスタ5のMSTP50(SPI Ch1用)に0設定
    ・SPI Ch1レジスタの設定
     SPI Ch0に対応する一連のレジスタ群用に宣言された構造体RSPI0の使用をCh1用のRSPI1に変更
   ②関数 io_cmd_exe() の修正
    ・SPI Ch1レジスタの設定
   ③関数 io_cmd_exe_rdmode()の修正
    ・SPI Ch1レジスタの設定
   ④関数 io_cmd_exe_rdmode_cpu_l()の修正
    ・SPI Ch1レジスタの設定
   ⑤関数 io_cmd_exe_rdmode_dma_l()の修正
    ・SPI Ch1レジスタの設定
    ・DMAの設定 
      DMA 拡張リソースセレクタ0 の設定 0x52 を 0x56 (DMAC Ch0のMIDの変更)
      DMA ソースアドレスレジスタの設定 SPI Ch0のデータレジスタ(RSPI0.SPDR.BYTE)のポインタをSPI Ch1のデータレジスタ(RSPI1.SPDR.BYTE)のポインタに変更
   ⑥関数 io_wait_tx_end() の修正
    ・SPI Ch1レジスタの設定

  3)ヘッダーファイル serial_flah.hの修正
    M25P05-AとM25P40の差分を反映させました。
    ・セクタサイズ 0x8000を0x10000に
    ・セクタ数 2を8に

  4)HEWでビルドする。

 4.シリアル・フラッシュROM M25P40(512Kバイト)の接続
   付属SH-2A基板 CN3 Pin 21,22,23,33(SPI Ch1)に M25P40 を接続

 5.HEW モニタプログラムの書き込み。

 6.書き込んだシリアル・フラッシュROMを SPI Ch0に繋ぎ直す。
   付属SH-2A基板 CN3 Pin 36,37,38,40 (SPI Ch0)に M25P40 を接続

 7.外部フラッシュメモリによるブート設定
   付属SH-2A基板  JP16パターンカット

 8.HEWモニタプログラムの動作検証
  1)付属SH-2A基板のデモプログラム
    どうも、フラッシュメモリに書き込んだデータに基板上のシリアル・フラッシュROMと同じLED点滅のデモプログラムが書かれているようで、JPP2ショートで、リセット後に基板上のLEDの点滅が始まる。
    念のため、外付けROMを外すと、動かない(LED点滅しない)
  2)HEWでの確認
    Interface誌のサンプルプログラム SH7262_LED のホルダをコピーし、HEWで若干の変更を行った
    (変更内容 ポートBの20,21,22ピン(bit)にそれぞれLEDを接続し、付属基板上のLEDと交互に点滅させる。)
    ビルドし、ダウンロードし、プログラムの動作を確認しました。

※とりあえず、これで、付属SH-2A基板上のシリアル・フラッシュROM(M25P05-A)が潰れても何とかなりそうです。

---以降 HEW開発メモ---
1.割り込み優先レベル15は使えない。
resetprg.c の #define SR_Init 0x000000F0
を#define SR_Init 0x000000E0に修正する必要 (Interface2010.6 P105 ●ステータスレジスタの初期値設定)
(HEWモニタが割り込みを使用しているため。ユーザープログラムで割り込み優先レベル15は使えない。)

2.セクションの設定
 1)スタックサイズ、スタックポインタ  stacksct.h で設定。 スタックサイズ設定値:H'FA00
スタックポインタの設定ファイル 不明
(HEWでは、[プロジェクト]/[構成の編集]/[スタック]

3.HEWでのアプリケーション開発を、既存のプロジェクトのフォルダをコピーして行う場合。一旦「ダウンロードモジュール」を削除し、再登録しなおしたほうがよい。
 Interface2010.6 第3章「開発ツールHEWの使い方。。。」(P109)での「ダウンロードモジュール」の追加で$(CONFIGDIR)\(PROJECTNAME)を使えば問題ないのですが、どうやら「参照」を使って「ダウンロードモジュール」が設定されていた場合、元フォルダのプログラムをダウンロードすることになります。
 (いくら修正しても”元のまま”ということになります。)

2010年4月27日火曜日

HEWと付属SH-2A基板の接続

CQ出版Interface誌(2010.6)付属基板が、ようやくHEWから認識できるようになったので、その要点を以下にまとめます。

1.構成
[[PC側]][HEW][シリアル接続HEWモニタ](SH2A_VcomINF)==(USB接続)==[HEWモニタプログラム][ユーザープログラム][[付属基板側]]

HEW:shv9302_ev.exe
シリアル接続HEWモニタ:HEWmonitor.zip 
SH2A_VcomINF(付属SH-2Aマイコン基盤用仮想シリアル・ドライバ):SH2A_VcomINF.zip
(5/3)

2.PCで属SH-2A基板は、COM1~COM9の範囲で認識させる。
  シリアルHEWモニターは、10番を超えるCOMポートには対応できません。・・・(Interface2010.6 P100 コラム1)
3.USBケーブルはPC本体に繋ぐ
  パソコン本体のUSBポートを使って下さい。・・・(Interface2010.6 P100 コラム1)

Interface誌Webサイトからダウンロードした、LEDチカチカのサンプルプロジェクト(Interface_Sample.zip)をHEWで開けると、「デバイスドライバが見つからないか、接続をキャンセルしましたSH-2A Serial Moniter」のエラーメッセージが表示され、付属SH-2A基板との接続に失敗しました。

さて接続エラーの対処を以下に記します。

1.PCのシリアルポートを確認
[コントロールパネル]/[管理ツール]/[コンピュータの管理]/[デバイスマネージャ]
ポート(COMとLPT)のエントリを確認すると、[USB SerialPorts Driver(COM18)]で更に、そのエントリのプロパティを確認すると、COM1、COM3~COM17が使用中([ポートの設定]/[詳細設定])となっていた(少々驚き)でCOM3が実際に使用されていないのを確認し、付録SH-2Aを強制的にCOM3に割り当てた。
==>まだ接続失敗 

2.USBケーブルを本体に繋ぎなおす。
==>まだ接続失敗

3.Interface(2010.6)の「開発ツールHEWの使い方とサンプル・プログラムの作り方」(第3章)の 「2.プロジェクト構築」以降を実行。
★この段階で初めてPCに「シリアル接続HEWモニタ」をインストール(HEW アドミニストレーションでの登録)する必要があることを知る。
==>ようやくHEWが付属SH-2A基板に繋がった。

4.ついでに、「Appendix3 シリアル・フラッシュROMのアップデート手順」を実行。
「SPIwriterAll.absとSPIROM.BINの付録SH-2A基板へのダウンロード」
  これらのファイルを一ずつダウンロード。
「リセットを実行(図Aの②のボタンをクリック)して」
 PC(プログラムカウンタ)1C000800、R15(スタックポインタ)1C080000にならなかった。
 *付属基板フラッシュROMが潰れるのを覚悟で、プログラムの実行(図Aの④)ボタンをクリックした。
  数度のクリックで、PC:1C000800、R15:1C080000になった。
  ・・ほっとした。
  プログラムの実行(図Aの④)ボタンをクリックした。
  ==>HEWモニタプログラムの書き換えが始まった。少し待つと基板のLEDの点滅が始まった。(書き換え成功)


確認) 一応 LEDチカチカのサンプルプロジェクトをHEWで開け、付属SH-2A基板にプログラムをダウンロード、デバックを試しました。==>上手くいくようです。


<<注意>>この作業は、フラッシュROMをつぶしてしまう可能性があるので、実行に際しては、Interface誌を熟読のうえ、慎重に行って下さい。上記記事の内容に責任は持てません、ご容赦願います。

5.Windows7でのメモ(5/3)
※Windows7(Home Premium 32bit)でHEWのインストール
 付属SH-2A基板をUSBで繋いだ際に、Windowsで、新しいデバイスの認識が出来なかった。
 Windowsのデバイスマネージャでは不明のデバイスとして表示されていました。
 この、不明のデバイスのドライバのインストール作業が必要 (SH2A_VcomINFを使用)
(忘れがち)

2010年4月25日日曜日

Interface 2010.06(付属基板付き)

ようやくInterface誌が、手元に届きました(4/23)。早速付属基板の解説ページを繰りました。

1.不満な点
まず、搭載シリアルフラッシュメモリの確認、Numoryx(STマイクロ) M25P05-Aとある、「エ!」 M25P05-A、M25P05-A、M25P05-A、M25P05-A。。。。
不安を抱えながら読み進む。512Kビット!!、(64Kバイト)!!、さらに、後半32Kバイトはユーザー用として使う、、、!!
 アマチュアレベルの私にとって、かなりショックキングな内容が明らかになってきました。
昨年のARM7付属基板でLEDチカチカのプログラムサイズが34Kバイト(コンパイル等のオプションで小さくなるかも知れないのですが)
同誌の「CPU内臓LCDコントローラを使った...(第6章)」の記事の内容がこの基板で実現出来るのか!!!

2.納得な点
 ・とにかくSH-2A搭載がうれしい。またその充実した能力もうれしい。
 ・昨年のARM7付属基板と同様拡張コネクタが40Pin×3Chあり、さらに10Pinが1Ch追加で搭載されています。SH7262(SH-2A)の全てCPUピンが使用可能となっていることです。
(PA0~PA3は使えないようですが。)

3.不満な点 その2
 1)SH7262(SH-2A)に対して、
   ・SPI(ルネサスシリアルペリフェラルインタフェース)のチャネル1と、ビデオディスプレイコントローラ3のCPUピンが重なっている。
 2)付録基板に対して、
   ・拡張コネクタの位置、
     CN1,CN2の位置は入れ替わったほうが良さそう。

4.さて、どうしよう
 案1 昨年のInterface(ARM7付属基板 号)を買い足す。
 案2 SH7262のブートモードをNANDフラッシュROMにする。
    ①LPC2388等でNANDフラッシュにプログラムを書き込み、このNANDフラッシュを使い、、、
 案3 シリアルフラッシュメモリを外部につなげる。
    今手元に、シリアルフラッシュメモリM25P40がありこれを使う。
    (雑誌で紹介された、(株)アルファプロジェクト HJ-LINK/USB Debugger for SH7262を使う)
 案3-2 シリアルフラッシュメモリを外部につなげる。
    基板上のHEW モニタプログラムを、大容量のシリアルフラッシュメモリに複写する。

昨年のARM7付属基板の時は、IARの開発ツールの限定に不満を持ち、GNU GCCによる開発環境の整備に四苦八苦、今年は、搭載シリアルフラッシュメモリの容量”小”で、てこずりそうです。

2007年のV850付属基板と比較すると、Interface誌の付属基板の企画はアマチュアにとって年々高度になっているように思います。

Interfaceの編集部各スタッフのスキルUPに私が追いつけなくなってきているだけかもしれません。

Interface編集部には、この付録基板のフォローを厚くして頂くことを希望します。

2010年4月23日金曜日

Interface 2010.06(付属基板付き)発売前夜

いよいよ、今週末、CQ出版 Interface誌(付属基板付き)が発売となります。

この基板には、マイクロコントローラして、ルネサスSH-2Aが搭載されます。
同誌の付録基板(旧NECエレV850)でマイコンデビューし、STM32、78K、LPC2388のプログラム作成にトライしてきた私としては、SH2付録基板は、入手し損ねた幻の基板という位置付けです。

本年当初には、Interface 増刊として液晶マイコン基板付きの雑誌が発行され、トランジスタ技術でも、ルネサスH8基板が付いた増刊が発行されたりしたことから、今年の同誌付録基板企画は無いのではと諦めていました。
ところが、2月下旬ごろ、同誌の予告で今年の基板は、「ルネサスSH-2A」と知り、さらにその性能が桁外れに優れたものであることを知り同誌の発売を心待ちにするようになりました。
また、併せて、SH2Aの下調べを行い、その内容を以下に述べます。

1.資料等の入手
 1)ルネサスエレクトロニクスWebサイトより。
   「ホーム / 製品 / マイクロコンピュータ / SuperH RISC engine ファミリ / SH7260 シリーズ / SH7262, SH7264 グループ / 」

   ・SH7262グループ、SH7264グループハードウェアマニュアル
   ・アプリケーションノート サンプルコード 
     ルネサス エレクトロニクス(株)の「MY RENESAS」というアカウント登録が必要
     サンプルコードとして、「ビデオディスプレイコントローラ3 映像表示例」等を入手
 2)SHのサンプルコードを入手
   各Webサイトより、SH772x、SH7144のサンプルコードを入手

2.SH-2Aの特徴
 あくまでも、趣味レベルの感想ですので、思い違いもあるかと思います。ご容赦願います。

 1)[iodefine.h] によるレジスタ定義
  9.2Kステップを超える巨大なヘッダーファイルにSHのレジスタの定義情報が各機能ごとに格納されています。
  ARM系のマイコンとの比較になりますが、SHのレジスタのコーディング上の扱い。

         |<ARM_系>         |<SH系>          |
=========+==============+==============+
レジスタ定義   |ポインタ(アドレス指定)  |構造体           |
---------+--------------+--------------+
レジスタ設定   |ビットビットパターンで設定 |構造体メンバーで設定    |
---------+--------------+--------------+
レジスタサイズ  |ほとんど32(16)ビット    |08,16,32ビットが混在    |
---------+--------------+--------------+


  例 UART(シリアル通信)Rx端子設定

   ①ARM系
     コーディング PINSEL1 &= 0xFFFFFFFC;
            PINSEL1 |= 0x00000001;
         PINSEL1:汎用入出力の機能選択レジスタ 対象ポート0の16~31番ピンが対象
         ポート0の16番ピンはPINSEL1の0-1bitで機能選択
         まずピットパターン(マスクパターン)ANDでレジスタの該当ビットをクリア
         機能1選択用のビットパターン ORでレジスタの該当ビットを設定

-----------------LPC23xx.h---------------------------------------
#define PINSEL_BASE_ADDR 0xE002C000
#define PINSEL1 (*(volatile unsigned long *)(PINSEL_BASE_ADDR + 0x04))
....汎用入出力の機能選択レジスタのアドレス(ポインタ)
------------------------------------------------------------------

   ②SH系
      コーディング  PORT.PGCR3.BIT.PG12MD = 4;
        PORT:汎用入出力の構造体
        PGCR3:ポートG コントロールレジスタ3を定義する構造体
        PG12MD:ポートG 12番ピンの設定ビット
        4:機能 [RxD1]を 選択

-----------------iodefine.h---------------------------------------
#define PORT (*(volatile struct st_gpio *)0xFFFE3812) 
.....汎用入出力の構造体宣言 (宣言の代替といったほうがよいかも!)
struct st_gpio {                /* PGCR3    */
    union {                 /* PAIOR0    */
       _UWORD WORD;            /* Word Access */
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    union {                 /*    */
       _UWORD WORD;            /* Word Access */
       struct {              /* Byte Access */
          _UBYTE H;          /*  High    */
          _UBYTE L;          /*  Low    */
          } BYTE;           /*       */
       struct {              /* Bit Access */
          _UBYTE :1;         /*       */
          _UBYTE PG15MD:3;      /*  PG15MD   */
          _UBYTE :1;         /*       */
          _UBYTE PG14MD:3;      /*  PG14MD   */
          _UBYTE :1;         /*       */
          _UBYTE PG13MD:3;      /*  PG13MD   */
          _UBYTE :1;         /*       */
          _UBYTE PG12MD:3;      /*  PG12MD   */
          } BIT;           /*       */
       } PGCR3;              /*       */

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
--------------------------------------------------------------------

 2)マニュアル上の独特機能表現
   マニュアル上に、ルネサス独特の以下のような表現があり、戸惑いを覚えました。
   ①UARTを使おうとすると、FIFO 内蔵シリアルコミュニケーションインタフェースを利用
   ②SPIを使おうとすると、ルネサスシリアルペリフェラルインタフェースを利用
   ③タイマを使おうとすると、マルチファンクションタイマパルスユニット2または、コンペアマッチタイマを利用


3.開発環境の整備
 開発環境としてHewがあるが、無料版の制限次第で、GNUの環境を整えました。
 1)GNUの開発環境を整備
   ・KPIT(Webサイトには、ルネサスのパートナーと表記)からSHの開発環境(GNU)をダウンロード
    開発環境は、 GNUSHv1001-ELF.exe というインストールプログラムで提供されます。
インストール実行でGNU GCCの環境、newlib、binutils等の環境が整うようです。
    注意点)KPITに対し、ユーザー登録が必要であり、平日(営業日)に行う必要がある。私は休日にユーザー登録を行ったため、当日、パスワードが発行されず、後日営業日にパスワード発行のメールを受け取った。
   ・各ツールにパスを通す。
     インストール先をデフォルトのままにしたので、以下のパスをWindowsの環境変数PATHに追加した。
     C:\Program Files (x86)\KPIT Cummins\GNUSHv10.01-ELF\sh-elf\bin
     C:\Program Files (x86)\KPIT Cummins\GNUSHv10.01-ELF\sh-elf\sh-elf\bin
     C:\Program Files (x86)\KPIT Cummins\GNUSHv10.01-ELF\sh-elf\libexec\gcc\sh-elf\4.4-GNUSH_v10.01
    以前のARM系の開発環境の整備では、Cygwinのカレントディレクトリの.bash_profileで PATH=/usr/local/arm-tools/bin:${PATH}を追加してPATHの設定を行った。
    Windowsの環境変数でも可能だと言うことを認識しました。

 2)Cygwinはインストール済み

 3)Eclipseのインストール
   ①EclipseのWebサイトより統合開発環境として、Eclipseをダウンロード( Eclipse IDE for C/C++ Developers (79 MB) )
   ②eclipse-cpp-galileo-SR2-win32.zip を展開 ホルダeclipseをC:\にコピー
   ③「Select a workspace」で C:\Embedded\SH_2A\Project_Eclipse(任意)を指定
   ④「Welcome to the Eclipse IDE for C/C++ Developers」で メニュー Help/Install New Software
   ⑤「Availabe Software」 [Add….]で
 「Add Site」で Name Zylin EmbeddedCDT Location http://opensource.zylin.com/zylincdt
Check [Zylin Embedded CDT]
   ⑥「Review Licenses」 [I accept the terms of...]
      「Securty Warning」 [OK]
      「Software Update」 [Yes]
   ⑦ eclipse.exe再起動
      「C/C++ -Eclipse」
        [Workbench]をクリック(Welcome ウインドウ内 アイコンの一つ)

 4)Hello World!(project01)のプログラムを作成
   C++でHello World!のプログラムを作成、ビルドは通る。
   実行でこける。(cygwin1.dllが見つからないエラー)
   => Cygwinを立ち上げ、project01.exeを実行 Hello World!の表示確認

  *Eclipseでは、Cygwin自体のGNU GCCが使われているようです。

    [プロジェクト]を選択
     プロパティ表示
      [C/C++ Build]/[Tool Chain Editor]
        [Used tools][Select Tools..ボタン]
     「Slect tools」
    ここに、[Available tools]と[Used Tools]が表示される。
GCC C Compiler(Av.) Cygwin C Compiler(Us.) が対になって、入れ替え可能となっています。
    たぶんこの入れ替えを行えばSH2の開発ができるのではと思いますが。。。

    現在Cygwinの環境下で、ARM7用他複数のGNU GCC環境が存在しています。そのうちSH用のGCCが GCC C Compiler(Av.) と結びついているとは思えない。

    また、[Zylin Embedded CDT]がEclipseでどのような役割を果たしているのか不明。
     プロパティ表示
      [C/C++ Build]/[Emvironment]の環境変数PATH
      [C/C++ General]/[Path and Symbols] のInclude等の設定
     ともかくいろいろありそうです。

2010年3月30日火曜日

ALTERA Cyclone IV GX スタータ開発キット

ALTERA Cyclone IV GX スタータ開発キット発売のメールが本日(3/30)届きました。
早速、Digi-Keyでチェックすると、544-2569-ND(DK-START-4CGX15N) 39,540円で購入可能のようです。在庫0なので納期は少々かかるかもしれません。

今回の内容が以下のとおり。
(ユーザーガイド等のドキュメントが、まだ見れないので正確な情報では有りません。私自身の思い込みかもしれません!)
 1.主要デバイス
  ・Cyclone IV GX EP4CGX15BF14C8N FPGA
  ・PCI-SIG 準拠の PCI Express ハード IP
 2.コンフィギュレーション・ステータスとセットアップ要素
  ・フラッシュ・メモリよりのパッシブ・シリアル(PS)コンフィギュレーションを実現するMAX® II CPLD (EPM2210)のシステム・コントローラ
  ・FPGA コンフィギュレーション用エンベデッドオンボードUSB-Blaster™ 回路
  ・外部 USB-Blaster 用JTAGヘッダ
  ・アルテラ EPCS シリアル・コンフィギュレーション・デバイス
 3.クロック
  ・FPGA のクロック: 50 MHz、125 MHz および SMA コネクタよるクロック入力
  ・その他のオンボード・クロック・オシレータ: 6 MHz、24 MHz、25 MHz
 4.汎用ユーザ入力/出力
  ・LED
  ・2行の文字表示用 LCD ディスプレイ
  プッシュ・ボタン・スイッチと DIP スイッチ
 5.メモリ・デバイス
  ・16 Mバイトのフラッシュ・メモリ
  ・2 Mバイトのシンクロナス SRAM
 6.コンポーネントおよびインタフェース
  ・PCI Expressエッジ・コネクタ
  ・RJ-45コネクタ付き10/100/1000BASE-TイーサネットPHY、または SMA コネクタへのトランシーバ1 つ (ボードの小規模な変更が必要)
 7.デザイン例
  ・Nios® II プロセッサ・ウェブ・サーバーとリモート・システム・アップデートを搭載したボード・アップデート・ポータル
  ・◦ボード・テスト・システム

  ((ALTERA HPより抜粋))


以前から、Nios® IIを試したいと思い、Cyclone IV のスタータ開発キットの発売を待っていたのですが。
 ・CyclonIVがEP4CGX15BF14C8N
 ・HSMCのコネクタが無い(GPIO用のコネクタが裏面に隠れているといいのですが。)
この2点で購入に躊躇
 ・デザイン例 Nios® II プロセッサ・ウェブ・サーバーと...
この点で、少々魅力(デザイン例ソースが入手できれば。。)

いずれ公開される、ドキュメントを待って、購入を判断したいと思います。

2010年3月12日金曜日

CQ出版 Interface誌 Sh2a 付録基板??


ネットでルネサステクノロジSH-2Aを調べているうちにエレキジャック・フォーラム(4/24開催)のHPにたどりつきました。
このHPの
「プロの技」トーク・ショーで
T-9  Interface 2010年6月号付属SH-2Aボードの製作事例(仮) があり、そこに付録SH2Aの基板の写真が掲載されています。
その写真から、搭載SH-2Aはどうも、R5S72623W144FPU らしいです。


概要抜粋(Renesas HPより)

 動作周波数
  144MHz
 CPU性能
  345MIPS(144MHz)
 キャッシュ
  16Kバイト(命令8K/ データ8K分離、 4ウェイセットアソシアティブ方式)
 デバッグ
  H-UDI, AUD-Ⅱ
 パッケージ
  176ピンQFP(24mm×24mm)(0.5mmピッチ)
 そのほか
 1Mバイト大容量SRAMの内蔵により、外付けRAMなしでのシステム構成を実現
 ビデオ入力機能付きディスプレイコントローラにより、映像処理が可能
 NANDフラッシュメモリ、シリアルフラッシュメモリ等との接続及びそれらからのブートが可能


当面、昨年のLPC2388で遊ぶつもりでしたが、こちらに切り替えようと言う誘惑に駆られます。
付録基板が出るたびに、毎年、マイコンを切り替えてしまう、その切り替えに3,4ヶ月かかってしまうという言うジレンマ、、、実に悩ましいことです。


付録基板にフラッシュメモリ、水晶発信器が搭載済みであることを願います。
(願わくば、秋葉原(秋月、千石)で普通に購入できることを希望します。)
(高額な、パーツセットのみの販売だと、キツイと思います。)

2010年3月9日火曜日

空気清浄機のホコリセンサーをイジッテみました。


花粉症に悩まされる季節になりました。部屋には壊れた空気清浄機があり、モータ等の部品取り用に捨てずに置いてあります。
 購入時、絶大の期待を持っていたのですが、実際には、それほどの効果はありませんでした。3年で、円筒形のファンの軸受けが破損、あっけなく、使い物にならなくなりました。
 そんな、空気清浄機から、ホコリセンサーを取り出し。花粉モニターが出来ないかと思い。色々試してみました。

1.ホコリセンサを調べる。
 空気清浄機に電源を入れ、センサの端子(3ピン)をの電圧を調べる。テスターを適当に当てる。Pin1とPin2で最大電圧。Pin2とPin3で最小電圧。
 ==> Pin1 電源12V (Vdd) 
     Pin2 グランド  (Vss)
     Pin3 電圧出力  (Vout)
2.ホコリセンサ出力電圧調整回路
  出力電圧が最大で5V程度であった(現時点での実測値)。しかし電源電圧の出力も考慮し、電圧の調整回路を組みました。素人の考えですが、抵抗値が高い可変抵抗を使うことで、センサの出力電圧降下を最小にする。抵抗の分圧を有効にするために、オペアンプで、ボルテージフォロア回路を構成
(ADCの内部抵抗が40KΩ(LPC2388 Product data sheet)なので 10KΩ程度の可変抵抗のみでも)
    可変抵抗 100KΩ
    オペアンプ Vdd(Vs) 2.7~(3.3)~5.5V (不意の高電圧に備え?)

  *色々やっているうちに、LPC2388のADCに12Vを流してしまい、「チッ」と言う音とともにLPC2388はクラッシュ。以前使用していたLPC2388(DAC不調)を現役復帰。
 
3.LPC2388 1CHオシロスコープの改修
 長時間の測定に備えるため、測定値をPCに送信する機能を追加しました。
  液晶の表示のタイミング(1024サンプリング)で、サンプルデータの平均をとり、UART0でPCにデータを送信。

4.PCアプリケーションの作成。
 1)Microsoft Visual C++ 2008 Express Edition
 2)シリアルポートのイベント(DataReceived)処理で、LPC2388から送信されたデータと受信時刻を蓄積する。
 3)グラフ表示は、パネル(System::Windows::Forms::Panel)に行う。

※グラフ表示が跳ね上がったところ、食事の支度(野菜炒め)をした結果。

----------------------------------------------
VC++テクニカルメモ 
(一部 ソースコードのカットアンドペーストで表示出来ない部分があります。)
1.実行時エラー
 1)メッセージ
    有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール '***' がアクセスされました。
 2)内容
  どうもシリアルポートのイベント処理はボタン、タイマ等のイベント処理とは異なり、イベント発生時に立ち上げられたスレッドで実行されるようです。つまり、Form上の各コントロール(オブジェクト)を管理しているスレッドと異なるため、シリアルポートのイベント処理で、Form上の各コントロールを操作することは安全でないと判断されているようです。
 3)対処
  ・Invoke等の関数でスレッド セーフな呼び出しを行うそうですが、今一つ不調
  で、応急的対処を行った。
  ・Formのコンストラクタに以下のコードを追加。
this->CheckForIllegalCrossThreadCalls = false;
   (前述のスレッドチェック機能をOFFにするようです。)

2.グラフ描画
 1)グラフィックの宣言
   System::Drawing::Graphics^ GrpChart; ポインタで宣言
 2)グラフィックの初期化
   Formにパネル( pnlChart )を置き、このパネルにグラフィックを生成する。
     this->GrpChart = this->pnlChart->CreateGraphics();
 3)Drawツールの宣言
  ・ペン
     System::Drawing::Pen^ PenChart;
  ・ブラシ
     System::Drawing::SolidBrush^ BrsChart;
  ・フォント
     System::Drawing::Font^ FntChartItem;
 4)Drawツールの初期化
  ・ペン
     this->PenChart = gcnew System::Drawing::Pen( System::Drawing::Color::Black,1.0f );
  ・ブラシ
     this->BrsChart = gcnew System::Drawing::SolidBrush( System::Drawing::Color::Black);
  ・フォント
     this->FntChartItem = gcnew System::Drawing::Font("MSゴシック",10.0);
 5)グラフィック描画
  ・ライン
     Point point1 = Point(50,50);
     Point point2 = Point(200,100);
     this->GrpChart->DrawLine( this->PenChart, point1, point2 );
  ・文字(String)
     this->GrpChart->DrawString("Draw String",this->FntChartItem,this->BrsChart,10.0,10.0);
※久々にグラフィック表示のWinアプリを作成しようとして、少々戸惑ったのでここにメモります。

※CQ出版2010年6月号が付録基板SH-2Aで、期待しています。このマイコン(型番)限定でコードサイズ制限なし、期間限定無しのHewが添付されることを密かに期待しています。
 また、RAM1Mバイト等の予告情報より、SH7262/SH7264あたりが搭載されるのでしょうか?
NECエレクトロニクス、ルネサステクノロジ統合記念の大盤振る舞いを期待します。

2010年2月9日火曜日

LM3S8962 Evaluation Kit プログラム作成 3 (GNU gcc)


 Texas Instruments(LUMINARY MICRO)社  Cortex-M3 MCU LM3S8962 マクロプロセッサ評価ボード EKI-LM3S8962 を、あいも変わらずいじっています。

 今回、評価ボードのOLED(グラフィクディスプレイ128 x 96)の表示を試しました。
1.表示データの解析
 1)ディスプレイ関数 RIT128x96x4ImageDraw(rit128x96x4.c)のデモプログラムでの使用を調べた。
  デモプログラム: FreeRTOSデモ
   =>bitmap.hのpucBasicBitmap(FreeRTOSのロゴ表示)3201バイトのイメージデータがあり、4ビット1画素が確認された。(16階調のグレースケール)
2.表示データの作成
 1)ペイントブラシ等で作成されたビットマップを表示データに変換することを考える。
  ①テストパターン(24ビット ビットマップ)をペイントブラシで作成し、データを調べた。
  ②od -cx bitmap.bmp 等でファイルのダンプを行った 
    =>テストパターンのデータで、バイトの反転があった。(白地に黒点)
    表示データは 0xFFFF 0xFFFF 0x00FF 0x0000 0xFFFF であったが、本来、0xFFFF 0xFFFF 0xFF00 0x0000 0xFFFF であるべき。リトルエンディアン的なバイト反転が起こっているのでしょうか?
    C言語で、ビットマップファイルをバイナリで開け、各画素のRGB要素の平均をとって16階調の数値データとし、テキストファイルに落とすことを考えていたのですが、このバイト反転、ファイルヘッダーの呼び飛ばしなどを考えると、面倒に思い、C言語による変換プログラムの作成は見送りました。
 2)Visual C++ 2008 による変換プログラムの作成
  前述の理由の他、画像ファイルの制限を外すことを考えるとVC++を使うのが良いと判断しました、プログラムの要点は、
    ①Bitmapクラスを画像ファイル割当てで初期化する。(ビットマップ、JPEG、GIF等の画像ファイルが一様に扱える)
    ②pictureBoxクラスのImageプロパティに ①のBitmapクラスを設定する。(表示用)
    ③ ①のBitmapクラスのGetPixelメソッドを使って画像の各画素を取得する(Colorクラス)。
    ④各画素のRGB要素の平均を求める。(この時点で256階調のグレースケール)
    ⑤求めた平均を1/16する。(OLEDで使える16階調のグレースケールになります。)
    ⑥この値をテキストファイルに出力する。一応Hex表示形式
 3)デモプログラムへの組み込み。
    デモプログラムに RIT128x96x4ImageDraw 関数を追加し、2)で作成したグレースケールデータ(出力テキストファイル)をイメージデータとして使いました。
   
 ※Visual C++ 2008 メモ
  久々のVC++で、戸惑った点
 ・二次元配列が使えなかった。
  データWK用に private: unsigned char imgdtT[128][96];を使おうとしたのですが。
    ....のメンバとして定義できません。混合型はサポートされていません。のエラー発生、Arrayクラスを使用するようです。
  宣言は    private:array< unsigned char, 2 >^ imgdtT;  
  初期化は   imgdtT= gcnew array< unsigned char, 2 >( 128,96);
  代入は    imgdtT[i,j] = iBrite /16; 
  参照は    iGray16 = imgdtT[i,j]; 
(一部訂正 3/9 初期化は の array が表示しきれていなかった。実は、<Unsigned....が隠れてしまっていた。)
3.OLED(グラフィクディスプレイ128 x 96)の表示
 鉄道模型(Nゲージ)の表示は128x50(4ビット)ドットで行っています。今まで128x64(1ビット)ドットのグラフィックLCDを主に扱ってきたので、このOLEDの表示はあまり期待していませんでした。しかし16階調(4ビット)のグレースケール表示ができることで表現力が格段に上がることは以外でした。
 HondaのHPより、バイクの画像をパクリ、16階調のグレースケールに変換し表示させました。結構きれいな表示でした。この解像度では表示しきれない細部まで見えるような錯覚を覚えました。

--------------------------------------------------------------------
--------------------------------------------------------------------
 試行錯誤を始めて、3ヶ月、暇を見つけてはの趣味の範囲では、超えられない壁が幾つかでてきました。

1.IARサンプルプログラムのGNU GCCへのコンバート
 ・Ethernetの割り込みがハンドリング出来ない。
   DHCPからのIPアドレスの割当が受けられない状況 
2.FreeRTOS上の開発環境(GNU GCC)の整備
 1)FreeRTOSからVre.6.0.2をダウンロードして試しました。
  ・IAR用のデモプロジェクト(CORTEX_LM3Sxxxx_IAR_Keil)を試す。(IARの環境)
    =>デモプログラムの動作を確認・・・容易に確認
  ・Eclipse用のデモプロジェクト(CORTEX_LM3Sxxxx_Eclipse)を参考にGNU GCCの開発環境を整える。
    =>FreeRTOSのデバイスドライバ等のライブラリ(libdriver.a、libgr.a)は、arm-elf-系の開発環境では利用できません。
     =>CODESOURCERYよりSoucery G++ Liteをインストールする。arm-none-eabi-系の開発環境が整い、ライブラリ(libdriver.a、libgr.a)の使用が可能になります。
      =>main.cのvSetupHighFrequencyTimer()のCallで止まってしまいます。タイマ関連のレジストリの設定で止まってしまうようです。


2009年12月28日月曜日

無線LAN環境の構築 (corega CG-WLR300GNHの無線LANアクセスポイント使用)


最近、ノートPC、プレイステーション3を購入して、自宅のLAN環境を再構築します。

1.LAN再構築概要
 1)現在のLAN環境
    ●HUB PCi EH-505 ポート数 5 [10Base-T]
    ●ブロードバンドルータ(KDDI ひかりOne) NEC Aterm BL170 ポート数 4 [100Base-T] 
   で 有効LANポート数 8 

 2)再構築LAN環境(画像)
    ●無線LANルータ corega CG-WLR300GNH  ポート数 4 [1GBase-T]
    ●ブロードバンドルータ(KDDI ひかりOne) NEC Aterm BL170 ポート数 4 [100Base-T] 
    ●HUB PCi EH-505 ポート数 5 [10Base-T]
   で 有効LANポート数 10 + 無線LAN

  ※写真 手前から NEC Aterm BL170, corega CG-WLR300 , Modem, PCi EH-505
 
2.無線LANルータ選択について。
 1)まず、手っ取り早く、必要なポートを増設することを考え、、、
 今回、無線LANルータ corega CG-WLR300GNH  を選択しました。はじめ、8ポートの100Base-TのHUBを考え、安いもので3千円程度、これを増設することで、有効LANポート数 16(+6)に増える、それで凌ごうと思っていました。

 2)どうせなら、将来を考え、一纏めに、、、
 しかし10Base-TのHUBを外すと、有効LANポート数 13、当然将来を考えると、一纏めにして、16ポートHUB 6千円程度もありと考えました。

 3)ノートPCを使うようになって、、、
 そのとき、さっさと購入してしまえばよかったのですが、今まで、デスクトップPCのみ使っていたのですが、アウトレットで購入したノートPCを使うようになり、使う毎に、HUBのポートに7mのケーブルを付け替えての使用で、当然、無線LANアクセスポイントが欲しくなりました。安いもので1万円程度、標準で3~5万円、今度は費用の面で躊躇。

 4)無線LANルーターのアクセスポイント使用を知り、、、
 無線LANルーターでは、有線LANポートが4ポート程度あり、低価格で魅力的だと思うのですが、現在のKDDI ひかりOneの環境では、なんとなく、無線LANルーター導入不可と思っていました。
(無線LANルーターに置き換えると、ひかりOne電話が使えなくなると思い。)

 ふと、単純に、無線LANルーターでネットワークを増やしてしまえば可能ではないかと思い、各メーカーのサイトで仕様、取り扱い説明書をチェックしました。
 ネットワークを増やすためには、無線LANルーターで、既存ネットワークアドレス(ルーターの外側)と、増設ネットワークアドレス(ルーターの内側)の設定が必要と思うのですが、どうもそのような設定は出来ないようです。
 そのような事を調べているうちに、無線LANルーターのルーター機能を無効に出来る事(アクセスポイント使用)を知りました。それで、ようやく無線LANルーターの購入に踏み切りました。
 メーカーおよび、機種については、仕様、価格の面で corega CG-WLR300GNH にしました、6千円で購入できました。


2.無線LANルータの設定(ノートPC Win7)
 1)無線LANを試す。
  ①とりあえず、ルータのパッケージを開封し、電源アダプターをつなげ(電源ON)、ノートPCを立ち上げました。
  ②コントロールパネル/ネットワークの状態とタスクの表示(ネットワークと共有センター)で 「新しい接続または。ネットワークのセットアップ」を実行 「ワイヤレスネットワークを手動で接続します」を選択。
  ③ルータの底面にあるネットワーク名、セキュリティの種類を[WPA2-パーソナル]、暗号化の種類を[TKIP]、初期PINコード(->セキュリティキー)を設定する。
  ④ネットワークと共有センターで「ネットワークに接続」を選ぶと、ワイヤレスネットワーク接続の選択リストが表示される。ここで③で設定したネットワークを選択する。
  ⑤ルータの設定画面を確認
   ●webブラウザを立ち上げると、いきなりルーターに繋がった(と思う)、そこでユーザー[root]でログインできた。
   ●設定画面を色々見、ログアウトした。

 2)ルーターをルータ機能OFFで起動
   ①今回のルーター使用は、ルーター起動OFFでの使用なので、電源を外し、背面のディップSWをOFFにして、電源を接続しなおした。
   ②ノートPCで無線LAN接続を試すが失敗。
     この時点での接続は、既存のルータ(DHCP稼働中)と この無線LANルータからの上位接続が必要と思われる。しかし、この無線LANルーターのサブネットアドレスが異なるため不可。
   (自宅のサブネットアドレスは 19x.16x.1x.00 ルータのサブネットアドレス(工場出荷時)は192.168.1.00) 

 3)ルーターのサブネットアドレスの変更(ルータ機能OFF)
   ①ノートPCと無線LANルーターをケーブルで接続した。
   ②ノートPCのIPアドレスを設定した。
    本来ノートPCのIPアドレスの設定はDHCPで割り当てられる設定になっています。
    この時点で、既存のDHCPと無線LANルータのサブネットが異なるので、ノートPCに固定のIPアドレスを設定します。無線LANルーターのサブネットと合せる為 一時的に 192.168.1.222 としました。
   ③ノートPC Webブラウザで無線LANルーターに接続します。
     http://192.168.1.220 で 設定画面に繋がります。
   ④無線LANルーターのIPアドレス変更
    ●設定画面 LAN側設定/ルーターIP で [LAN側IPアドレス]、既存DHCP(ルーター)の除外アドレスのうちの1つを設定する。 
    (今回 19x.16x.1x.105 を設定 既存のDHCPは 19x.16x.1x.100 ~ 163 のIPアドレスが割当除外となっています。) 
    ●ゲートウエイアドレス、DNSサーバーは、既存ルーターのアドレスを設定する。

3.無線LANルーターの確認
 1)ノートPCのIPアドレスの設定をDHCPによる割当に戻す。
 2)既存のルータの上位LANポートと無線LANルータのポートをつなぐ。
 3)ノートPCで無線LAN接続を確認した。

4.corega に対する希望
  設定画面 LAN側設定/ルーターIPで、ルーター機能ON、OFF両方のアドレス(初期値 192.168.1.1/192.168.1.220)設定が可能であれば、無線LAN設定がかなり容易となると思われます。

5.感想
 当初、無線LANルーターの導入設定は簡単だと思っていました。HUBの増設並みに考えていました。暗号化等のセキュリティ設定があるとは思いませんでした。
 実際、無線LAN接続を行うとき、無線LANの選択リストに10以上の無線LANが検出されました。近所にそれだけの、無線LANの使用者がいると言うことでしょう。セキュリティがしっかりしていないと他人のプライベートネットワークに接続出来てしまいます。なるほどと思いました。
 それにしても検出無線LANが10を超えていたのには驚きすら感じます。
 
 近年、液晶TV、BDレコーダ、ゲーム機、がネットワーク対応となって普通の家庭でもLANのポート数はかなり必要になっていると思います。8ポートのHUBでは早々に足りなくなると予想されます。
そこで、無線LAN・・・チャネル数は13、機器が必要になった場合のみチャネルが割当られます。家庭用のネットワークでは結構合理的なものと思います。
 

----メモ-----
※初期化ボタンで工場出荷時の状態に戻す方法
1 すべてのLAN ケーブルを抜きます。
2 AC アダプタを電源コンセントから抜き、1 分以上経過してから再び差し込みます。
3 初期化ボタンを15 秒以上押してから離します。

※現在ネットワーク接続機器
PC Desktop
NEC Value One [Celeron 2.93GHz WinXP]
HP xw4400 [Core 2 Duo 1.86GHz WinXP]
DELL Studio Slim [Core 2 Quad 2.33GHz WinVista]
DELL 430S [Pen4 WinXP]
PC Note
Dell inspiron 15 [Core 2 Duo 2.4GHz Win7]
Unix Workstation
IBM RS6000 [Power PC 604e 160MHz AIX 4.3]
Printer
EPSON PM-T960
液晶テレビ
 SHARP AQUOS LC-37GX3W
その他
 Panasonic DIGA Blu-ray Recoder
 HITACH Woo DVD Recoder
 SONY PS3
マイコン評価ボード等
 

2009年12月19日土曜日

LM3S8962 Evaluation Kit プログラム作成 2 (GNU gcc)

Texas Instruments(LUMINARY MICRO)社  Cortex-M3 MCU LM3S8962 マクロプロセッサ評価ボード EKI-LM3S8962 を、暇をみつけていじっています。
現在、引き続き、IAR Embedded Workbench のサンプルプログラムを、GNU gcc で作りなおしています。

1.Luminary Micro, Inc.サンプルプログラム。
 ・「sd_card」 SDカードのサンプルプログラム
 ・「enet_lwip」Ethernet接続のサンプルプログラム
 ・「qs_ek-lm3s8962」この評価ボードにインストールされていた、ゲームプログラム
 このうち、「sd_card」は、所定の動作を確認できました。
「enet_lwip」、「qs_ek-lm3s8962」については、Ethernetの割り込みの動作が不全で、今のところ、Ethernet、割り込みおよび、システム系の初期化関数等を点検しています。
 特に、これらのサンプルソースにある"#ifdef"文の挙動をチェックしています。

2.Luminary Micro, Inc.サンプルソースの手直し。
 1)cpu.s の編集
   arm-elf-as による、アセンブラコンパイルでエラーが起こる。エラーメッセージは、コメント行が不正と判断されている。
   このソースファイルについては、#include "../asmdefs.h" と C言語ライクなコメントに違和感を感じています。
   (対応するコンパイルオプションがあるのでしょうか?)
   ひとまず。
   ①全コメント行を削除。
   ② asmdefs.h の内容で、cpu.s を書き換える。
     セクション << The defines required for GCC.>> の #define文の内容で 書き換える。
    例  #define __EXPORT__ .globl   (asmdefs.h)
        __EXPORT__ CPUcpsid を .globl CPUcpsid に書き換える。


-------------cpu.s-書き換え前-(コメント削除済み)------------------
#include "../asmdefs.h"
__LIBRARY__ __lib_cpu
__TEXT_NOROOT__

__EXPORT__ CPUcpsid
__THUMB_LABEL__
CPUcpsid __LABEL__
mrs r0, PRIMASK
cpsid i
bx lr

__EXPORT__ CPUcpsie
__THUMB_LABEL__
CPUcpsie __LABEL__
mrs r0, PRIMASK
cpsie i
bx lr

__EXPORT__ CPUwfi
__THUMB_LABEL__
CPUwfi __LABEL__
wfi
bx lr

__END__

-------------cpu.s-書き換え後-------------------
.syntax unified
.thumb

@ __lib_cpu
.text

.globl CPUcpsid
.thumb_func
CPUcpsid :
mrs r0, PRIMASK
cpsid i
bx lr

.globl CPUcpsie
.thumb_func
CPUcpsie :
mrs r0, PRIMASK
cpsie i
bx lr

.globl CPUwfi
.thumb_func
CPUwfi :
wfi
bx lr

.end

-------------cpu.s end----------------

2009年12月9日水曜日

LM3S8962 Evaluation Kit プログラム作成 (GNU gcc)


Texas Instruments(LUMINARY MICRO)社  Cortex-M3 MCU LM3S8962 マクロプロセッサ評価ボード EKI-LM3S8962 について、キットに付随するサンプルプログラムをGNU gccでビルドし直しました。

1.サンプルプログラムの取り込み。
 1)IAR Embedded Workbenchでサンプルワークスペースを開く。
  ①IAR Embedded Workbenchを立ち上げる。
  ②Example applications
  ③Lumirary/Stellaris/boads/dk-lm3s8962を選択
 2)サンプルプログラムソースをコピー。
  ①開いている。ワークスペースのうち、とりあえず「driverlib」「blinky」「hello」「graphics」「uart_echo」のライブラリ、プログラムの File Propertisi... を調べる。 
   C:\Users\UserID**\Documents\IAR Embedded Workbench\arm\Luminary\Stellaris\src     C:\Users\UserID**\Documents\IAR Embedded Workbench\arm\Luminary\Stellaris\boards\ek-lm3s8962\graphics
  ②プログラムソースをGNU gcc開発フォルダにコピーする。
  「hello」の場合
    IAR サンプル ソース ......\Stellaris\boards\ek-lm3s8962\hello\helloc.c を
    GNU gcc 開発フォルダ(例) c:\Embedded\ARM_CortexM3\TI\Project\hello にコピー
  ③ライブラリソースをGNU gcc開発フォルダにコピーする。
   ・IAR ライブラリ ヘッダ 
    (共通ヘッダ)
     ......\Stellaris\asmdefs.h hw_adc.h hw_can.h hw_comp.h ......
    (driverlib.a用)
     ......\Stellaris\inc\lm3s8962.h
     ......\Stellaris\src\adc.h can.h comp.h ......
    (utilslib.a用)
     ......\Stellaris\utils\cmdline.h diag.h diagprintf.h ......
    (glib.a用)
     ......\Stellaris\glib\canvas.h checkbox.h container.h ......
    その他
     ......\Stellaris\glib\third_party以下のヘッダを適宜に。
   ・IAR ライブラリ ソース
    (driverlib.a用)
     ......\Stellaris\src\adc.c can.c comp.c ......
    (utilslib.a用)
     ......\Stellaris\utils\cmdline.h diag.h diagprintf.h ......
    (glib.a用)
     ......\Stellaris\glib\canvas.c checkbox.c container.c ......
    その他
     ......\Stellaris\glib\third_party以下のソースを適宜に。

   ・GNU gccライブラリ構成フォルダにコピー
    (共通ヘッダ)
     c:\Embedded\ARM_CortexM3\TI\Library\inc
    (driverlib.a)
     c:\Embedded\ARM_CortexM3\TI\Library\drivelib\inc
     c:\Embedded\ARM_CortexM3\TI\Library\drivelib\src
    (utilslib.a)
     c:\Embedded\ARM_CortexM3\TI\Library\utilslib\inc
     c:\Embedded\ARM_CortexM3\TI\Library\utilslib\src
    (glib.a)
     c:\Embedded\ARM_CortexM3\TI\Library\glib\inc
     c:\Embedded\ARM_CortexM3\TI\Library\glib\src
    その他 機能別に適宜にコピーする。

2.GNU gcc プログラム開発用環境構築 ライブラリ作成
 1)Makefile作成 「drivelib」「glib」「utilslib」...
  ・開発環境は、数値(浮動小数点)演算プロセッサなし(ソフト数値演算)を選択。
  ・コンパイルオプション -mthumb -O0 -v (とりあえず)
 2)メイク実行

3.各サンプルプログラムプロジェクト(ワークスペース)の整備
 1)スタートアッププログラムソース(startup.S)、メモリ定義ファイルの(memory.def)、メイクファイル(Makefile)の入手し、各サンプルプログラムプロジェクトフォルダに置き、適宜に修正する。

  ・CQ出版Interface誌2008年11月号の記事「Thumb-2対応GCCクロス開発環境の構築」関連のソース等を同サイトからダウンロードする。
  ・ダウンロードファイル gcc_sample_20080830.tar.zip を展開
  ・展開したフォルダ gcc_sample_20080830.tar に Cygwin でアクセスする。
  ・Cygwin で コマンド 「tar -jxvf gcc_sample_20080830.tar.bz2」を実行してサンプルソース等を展開する。
  ・gcc_sample_20080830.tar/gcc_sample/cortex-m3 が今回利用するサンプルソースのフォルダです。
 2)startup.sの修正。
-----------startup.s------------------------- 
.text

.extern main
.extern _sdata_loadaddr
.extern _sp_base
.extern SysTick_Handler << コメント化
.extern XXX_handler << 割り込みハンドラー関数を宣言

# Top of Stack
.long _sp_base
# Reset Handler
.long _startup+1
.org 0x0C << コメント化
# HardFault
.long BreakPoint_Handler + 1 << コメント化
.org 0x3C << コメント化
# SysTick Handler
.long SysTick_Handler + 1 << コメント化
# USART1
.org 0xD4 << コメント化
.long USART_handler + 1 << コメント化

# 割り込み設定
.org 0xXX << 割り込み位置を指定
.long XXX_handler + 1 << 割り込みハンドラー関数を指定。(thumbモードなので+1)

.org 0xEC
.global _startup
_startup:
LDR r1, =_sdata_loadaddr
LDR r2, =_sdata
LDR r3, =_edata
__copy_loop:
LDRB r4, [r1]
STRB r4, [r2, #0]
ADD r1, r1, #1
ADD r2, r2, #1
CMP r3, r2
BGT __copy_loop

LDR R0, =main
LDR R1, =0x1
ORR R0, R1
BX R0
-----------startup.s---end------------------- 
  ※割り込み位置 例UART0の場合
    UART0の Interrupt Vector Number: 21
    ==> 21 X 4 = 84
    ==> 0x54

 3)memory.defの修正。
memory_thumb.def を memory.defに
-----------memory.def------------------------ 
SECTIONS
{
.start 0x08000000 : { <<.start 0x00000000 に修正
_stext = .;
startup_thumb.o(.text)
_etext = .;
}

.text : {
_stext = .;
*(.text)
_etext = .;
}

.rdata : {
_srdata = .;
*(.rodata)
*(.rodata.str1.4)
_erdata = .;
}

.data 0x20000000: AT (LOADADDR(.rdata)+SIZEOF(.rdata)) {
_sdata_loadaddr = LOADADDR(.rdata)+SIZEOF(.rdata);
_sdata = .;
*(.data)
*(.zdata)
_edata = .;
}
.bss : { << 削除
_sbss = .; << 削除
*(.bss) << 削除
*(.comment) << 削除
_ebss = .; << 削除
} << 削除

_end = .;
. = ALIGN(0x4);
. += 0x200;
_sp_base = .;
}
-----------memory.def------------------------ 

 4)Malkefileの修正。
Malkefileは 適宜に修正 
   Lumirary MicroR Flash Progremmer用のバイナリファイルのために
$(OBJCPY) -O binary gcc_sample_thumb gcc_sample_thumb.bin を使用する。
  コンパイルオプションは
$(AS) -mcpu=cortex-m3 -mthumb --defsym THUMB=1 startup.s -o startup_thumb.o
$(CC) -mcpu=cortex-m3 -mthumb -c $< -o gcc_sample_thumb.o
   を参考にする。

4.各サンプルプログラムプロジェクトのビルドおよび実行
 1)「blinky」
   ・LED1の点滅を確認
 2)「hello」
   ・表示メッセージを変更
   ・表示位置を変更
   ・表示明度を変更
 3)「graphics」
   ・テロップ表示を変更
"This Aplication Developed by GNU gcc !" 写真はこのテロップの一部が表示された状態。
 4)「uart_echo」
   ・PC ターミナルソフトからのキー入力を返す(エコーバック)を確認
   ・PC ターミナルソフトからのキー入力を表示するように変更

5.デモプログラムの復旧 ※2010.1.29追記
 この評価キットのデモプログラム(ゲーム)の復旧は以下の手順で行う。
 1)以下のデモプログラムの存在を確認 (ドライブCの場合)
  C:\StellarisWare\boards\ek-lm3s8962\qs_ek-lm3s8962\gcc\qs_ek-lm3s8962.bin
  *存在しない場合Luminary MicorのHPより、EK-LM3S8962 Firmware Development Packegeをダウンロード、インストール実行
 2)Luminary MicorR Flash Programmerで上記のファイルを評価キットに書き込む。
  ①Configratoinタグ
    Quick Setで「LM3S8962 Ethernet and CAN Evaluation Boad」を選択
  ②Programタグ
    Select .bin fileで 上記ファイル「qs_ek-lm3s8962.bin」を選択
  ③Program実行
     

※IAR Embedded Workbenchによる開発 から GNU gccによる開発へ移行できなかった機能。
・cspy.cの持つ関数(Diag系関数)
※最初、生成したバイナリファイルXXX.binが500MB超えのファイルになった、確かにメモリマップを忠実にレイアウトすると、RAM領域0x20000000で512MB以上が確保されてしまう。始めは、仕方ないと思っていましたが、Flash Progremmerが受け付けないので色々試しているうちに、10KB前後のサイズになった。所定の機能が実現できたのでこれで良しと判断、結果オーライの感があり、少々不満。

2009年12月3日木曜日

GNU GCC 開発環境整備(For ARM7TDMI and Cortex-M3)

以前、ARM LPC2388 (CQ出版Interface誌付録基板) 用にGNU GCCの開発環境を整備しました。
今回、複数のタイプのARMプロセッサのアプリケーション開発に対応するため、再度開発環境を整備し直しました。
主な留意点は、
・浮動小数点演算コプロセッサ搭載、非搭載とMPUを2つに区分して、開発環境を整えます。

1.浮動小数点演算コプロセッサ非搭載(-msoft-float / -mfloat-abi=soft)
  ①インストール先ディレクトリ作成
   ・cd /usr/local
   ・mkdir arm-tools-sfp
  ②各パッケージの解凍(c:\DownLoad\GNUに各サイトよりダウンロード済み)
   ・tar jxvf /cygdrive/c/DownLoad/GNU/binutils-2.20.tar.bz2
   ・tar jxvf /cygdrive/c/DownLoad/GNU/gmp-4.3.1.tar.bz2
   ・tar jxvf /cygdrive/c/DownLoad/GNU/mpfr-2.4.1.tar.bz2
   ・tar jxvf /cygdrive/c/DownLoad/GNU/gcc-4.4.2.tar.bz2
   ・tar zxvf /cygdrive/c/DownLoad/GNU/newlib-1.17.0.tar.gz
 1)binutilsパッケージのインストール
  ①cd binutils-2.20
  ②./configure --target=arm-elf --prefix=/usr/local/arm-tools-sfp ・・OK
  ③make  ・・失敗  2.19でOK
  ④make install ・・2.19でOK

 ※binutils-2.20の場合 ③のmakeでエラー ・・・インストール失敗
 
gcc -DHAVE_CONFIG_H -I. -I. -I. -I../bfd -I./config -I./../include -I./.. -I./.
./bfd -DLOCALEDIR="\"/usr/local/arm-tools-sfp/share/locale\"" -W -Wall -Wstrict
-prototypes -Wmissing-prototypes -Werror -g -O2 -MT tc-arm.o -MD -MP -MF .deps/t
c-arm.Tpo -c -o tc-arm.o `test -f 'config/tc-arm.c' || echo './'`config/tc-arm.c

config/tc-arm.c: In function `make_mapping_symbol':
config/tc-arm.c:2488: warning: empty body in an if-statement
make[4]: *** [tc-arm.o] Error 1
make[4]: Leaving directory `/usr/local/binutils-2.20/gas'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/usr/local/binutils-2.20/gas'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/usr/local/binutils-2.20/gas'
make[1]: *** [all-gas] Error 2
make[1]: Leaving directory `/usr/local/binutils-2.20'
make: *** [all] Error 2

 *まあ、よくわからないので、前回と同じbinutils-2.19で試す。
こちらは成功。
 *全てのパッケージのインストール後に再度binutils-2.20のインストールを試すが、やはりmakeで失敗した。

 2)gmpパッケージのインストール
  ①cd ../gmp-4.3.1
  ②./configure --prefix=/usr/local/arm-tools-sfp ・・OK
  ③make ・・OK
  ④make check ・・OK
  ⑤make install ・・OK

 3)mpfrパッケージのインストール
  ①cd ../mpfr-2.4.1
  ②./configure --prefix=/usr/local/arm-tools-sfp --with-gmp=/usr/local/arm-tools-sfp ・・OK
  ③make・・OK
  ④make check・・OK
  ⑤make install・・OK

 4)gccパッケージのインストール
  ①cd ..
  ②mkdir BuildGcc
  ③cd BuildGcc
  ④../gcc-4.4.2/configure --target=arm-elf --with-float=soft --with-gmp=/usr/local/arm-tools-sfp --with-newlib --with-mpfr=/usr/local/arm-tools-sfp --prefix=/usr/local/arm-tools-sfp --enable-interwork --enable-multilib --enable-languages=c --disable-libssp ・・・OK
  ⑤make ・・・OK
  ⑥make install ・・・OK

  *ここで/usr/local/arm-tools-sfp/binのディレクトリにパスを通す。
  (newlibパッケージのインストール makeでの失敗対応)
  ・cd     ユーザーホームディレクトリへ移動
  ・.bash_profileを編集し、/usr/local/arm-tools-sfp/binのディレクトリにパスを通す。
   ( PATH=/usr/local/arm-tools-sfp/bin:${PATH} を追加)
  ・Cygwinを一旦終わらせ、再稼動させる。

 5)newlibパッケージのインストール
  ①cd /usr/local/newlib*
  ②./configure --target=arm-elf --with-float=soft --prefix=/usr/local/arm-tools-sfp ・・・OK
  ③make・・・失敗
  ④make install
 
  ※③のmakeでエラー ・・・インストール失敗
  
touch stmp-targ-include
Making all in libc
make[4]: Entering directory `/usr/local/newlib-1.17.0/arm-elf/newlib/libc'
Making all in argz
make[5]: Entering directory `/usr/local/newlib-1.17.0/arm-elf/newlib/libc/argz'
arm-elf-cc -B/usr/local/newlib-1.17.0/arm-elf/newlib/ -isystem /usr/local/newli
-1.17.0/arm-elf/newlib/targ-include -isystem /usr/local/newlib-1.17.0/newlib/li
c/include -B/usr/local/newlib-1.17.0/arm-elf/libgloss/arm -L/usr/local/newlib-1
17.0/arm-elf/libgloss/libnosys -L/usr/local/newlib-1.17.0/libgloss/arm -DPACKAG
_NAME=\"newlib\" -DPACKAGE_TARNAME=\"newlib\" -DPACKAGE_VERSION=\"1.17.0\" -DPA
KAGE_STRING=\"newlib\ 1.17.0\" -DPACKAGE_BUGREPORT=\"\" -I. -I../../../.././ne
lib/libc/argz -O2 -DARM_RDI_MONITOR -fno-builtin -g -O2 -c -o lib_a-dumm
.o `test -f 'dummy.c' || echo '../../../.././newlib/libc/argz/'`dummy.c
/bin/sh: arm-elf-cc: command not found
make[5]: *** [lib_a-dummy.o] Error 127
make[5]: Leaving directory `/usr/local/newlib-1.17.0/arm-elf/newlib/libc/argz'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/usr/local/newlib-1.17.0/arm-elf/newlib/libc'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/usr/local/newlib-1.17.0/arm-elf/newlib'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/usr/local/newlib-1.17.0/arm-elf/newlib'
make[1]: *** [all-target-newlib] Error 2
make[1]: Leaving directory `/usr/local/newlib-1.17.0'
make: *** [all] Error 2

  *確かに arm-elf-cc は存在しなかった。
  *再度gccのインストール(上書き) make all も実行 ・・・同じエラー
  */usr/local/arm-tools-sfp/binのディレクトリにパスを通すと成功。


 6)gccパッケージの補足インストール
  ①cd ../BuildGcc
  ②make
  ③make install

 7)その他 
  ①cd     ユーザーホームディレクトリへ移動
  ②.bash_profileを編集し、 PATH=/usr/local/arm-tools-sfp/bin:${PATH} を削除
  ③Cygwinを一旦終わらせ、再稼動させる。
  

2.浮動小数点演算コプロセッサ搭載(-mhard-float / -mfloat-abi=hard)
  ①インストール先ディレクトリ作成
   ・cd /usr/local
   ・mkdir arm-tools-hfp
  ②各パッケージの解凍
   ・tar jxvf /cygdrive/c/DownLoad/GNU/binutils-2.20.tar.bz2
   ・tar jxvf /cygdrive/c/DownLoad/GNU/gmp-4.3.1.tar.bz2
   ・tar jxvf /cygdrive/c/DownLoad/GNU/mpfr-2.4.1.tar.bz2
   ・tar jxvf /cygdrive/c/DownLoad/GNU/gcc-4.4.2.tar.bz2
   ・tar zxvf /cygdrive/c/DownLoad/GNU/newlib-1.17.0.tar.gz
 1)binutilsパッケージのインストール
  ①cd binutils-2.19
  ②./configure --target=arm-elf --prefix=/usr/local/arm-tools-hfp ・・OK
  ③make  ・・OK
  ④make install ・・OK

 2)gmpパッケージのインストール
  ①cd ../gmp-4.3.1
  ②./configure --prefix=/usr/local/arm-tools-hfp ・・OK
  ③make ・・OK
  ④make check ・・OK
  ⑤make install ・・OK

 3)mpfrパッケージのインストール
  ①cd ../mpfr-2.4.1
  ②./configure --prefix=/usr/local/arm-tools-hfp --with-gmp=/usr/local/arm-tools-hfp ・・OK
  ③make・・OK
  ④make check・・OK
  ⑤make install・・OK

 4)gccパッケージのインストール
  ①cd ..
  ②mkdir BuildGcc
  ③cd BuildGcc
  ④../gcc-4.4.2/configure --target=arm-elf --with-float=hard --with-gmp=/usr/local/arm-tools-hfp --with-newlib --with-mpfr=/usr/local/arm-tools-hfp --prefix=/usr/local/arm-tools-hfp --enable-interwork --enable-multilib --enable-languages=c --disable-libssp ・・・OK
  ⑤make ・・・OK
  ⑥make install ・・・OK

  *ここで/usr/local/arm-tools-hfp/binのディレクトリにパスを通す。
  ・cd     ユーザーホームディレクトリへ移動
  ・.bash_profileを編集し、/usr/local/arm-tools-hfp/binのディレクトリにパスを通す。
   ( PATH=/usr/local/arm-tools-hfp/bin:${PATH} を追加)
  ・Cygwinを一旦終わらせ、再稼動させる。

 5)newlibパッケージのインストール
  ①cd /usr/local/newlib*
  ②./configure --target=arm-elf --with-float=hard --prefix=/usr/local/arm-tools-hfp ・・・OK
  ③make・・・OK
  ④make install・・・OK
 

 6)gccパッケージの補足インストール
  ①cd ../BuildGcc
  ②make
  ③make install

 7)その他 
  ①cd     ユーザーホームディレクトリへ移動
  ②.bash_profileを編集し、 PATH=/usr/local/arm-tools-hfp/bin:${PATH} を削除


3.2つの開発環境について 比較。
 1)コンパイラー等開発ツール
 ◎/usr/local/arm-tools-sfp/bin、/usr/local/arm-tools-hfp/binの主要ツール
 ・arm-elf-gcc.exe( 519708Byte)
 ・arm-elf-as.exe (2757595Byte)
 ・arm-elf-ar.exe (1804448Byte)
 ・arm-elf-objcopy.exe(2303260Byte)
についてバイナリサイズは2つの環境とも同じでした。浮動小数点演算コプロセッサー使用、非使用で各ツール自体に異なることはないと推測。
 2)ライブラリ
 ◎/usr/local/arm-tools-sfp/arm-elf/lib、/usr/local/arm-tools-hfp/arm-elf/libの主要ライブラリ
 ・libc.a(soft:3174978Byte hard:3169002Byte)
 ・libg.a(soft:3174978Byte hard:3169002Byte)
 ・libm.a(soft:953244Byte hard:876948Byte)
 ◎そのほかのライブラリ
 ・libgcc.a (soft:363326Byte hard:357882Byte)
 ・libgcov.a (soft:30906Byte hard:30906Byte) ・・・同じ
 についてライブラリサイズは若干、浮動小数点演算コプロセッサ使用のほうが小さい。

2009年11月29日日曜日

LM3S8962 Evaluation Kit! を試す。



STMicroelectronicsの評価キットを色々操作しているうちに、テキサス・インスツルメンツの評価キット LM3S8962 Evaluation Kit が届きました。
この評価キットは Cortex-M3コアの LM3S8962(メインボード)と、LM3S2110(サブボード)の2つのマイコンでCAN(Controller Area Network)通信を試せる構成になっています。
また、Ethernet、microSDカードスロット、スピーカー、128×64ドットOLED(グラフィック表示)等が搭載されていて、多彩なアプリケーションの開発が手軽に出来るのではと期待できます。


とりあえず一通り試します。

1.準備
 1)付属のDVDをPCにセットする。
   ○LUMINARY MICROのHTML画面
   ○Document/Read Me First - Viewで「LM3S8962 EVALUATONKIT README FIRST」を開く。

2.「README FIRST」記載に従う。
 1)付属フラットケーブル(10線)で LM3S8962 Evaluation Board(本体ボード)とLM3S2110 CAN Device Board(サブボード)のお互いのCANポートをつなぐ。
 2)付属USBケーブルでPCと LM3S8962 Evaluation Board P4をつなぐ
   ○微妙なサウンドと、液晶にLUMINARY、IARのロゴが表示された後ゲームが始まった。
   ○ゲームを一通り試す、敢え無くGame Over 注目すべきは、IPアドレスが表示される事、さらにスクリーンセーバも表示(詳細、後述)
 3)デバイスドライバのインストール
   ○PC側で新規デバイスの検出。
  ①デバイスドライブソフトウエアインストールを始める。
  ②ドライバの検索先をDVDドライブに指定する。
    「Stellaris Evaluation Boad A」のインストール完了を確認。

 ※ゲーム(サンプルアプリケーション)
   ①起動時、サウンドと伴にLUMINARY、IARのロゴが表示、Ethernet接続で、DNSからIPアドレスの割当を受ける、そのアドレスが表示される。
   ②一見パックマン風のゲーム、[SELECT]ボタンでゲーム開始 [SW3-6]ボタンで上下左右移動。[SELECT]ボタンでミサイル発射、モンスターを撃破
   ③ゲーム開始前、ゲームOver後、に一定期間経つと、スクリーンセーバが表示される。スクリーンセーバも消えた後、本体ボードLED1がゆるい点滅、CANサブボードLED100が点滅する。
   ④起動時、ゲームOver時のサウンドの音量はCANサブボードの[SW100,101]で調整できる。
   ⑤起動時、シリアルポートからWelcomeが出力される。ゲーム開始でスコア0、ゲームOverでスコアがシリアルポートに出力される。
     (PC並びにターミナルソフト設定 bau:11520 data:8bit parity:non stopbit:1 flow:non)
   
 ※あまりこのサンプルアプリケーションにはまると、本格的なアプリケーション開発前に基板が壊れてしまいそうなので注意。

2009年11月25日水曜日

ALTERA Quartus II 9.1 の インストール

先日ALTERAからのメールマガジンでQuartus IIのバージョンアップの案内がありました。
QuartusIIのインストールを行い、その手順を以下に記します。

1.DELL Inspiron 15 CPU:Core2Duo Mem:4GB(インストール作業前空き:1.5G) OS:Windows7 Home Premium 32bit その他:ウイルスセキュリティZero常駐

 1)ALTERAホームページにアクセスし、QuartusIIのダウンロードを行いました。
 2)ダウンロードファイルを実行し、インストール作業を行いました。
 3)インストール途中で エラー発生
Fueature:IP Library
Component: IP Library files
File: C:\altera\91\ip\altera\seriallite_ii\lib\ip_toolbench\utl\lib\Vx2\VxMa9607.rra
Error: このコマンドを実行するのに十分な記憶域がありません。
4)対処
   ①インストールプログラムを起動させた。
   ②インストールプログラムの操作中(Setup Typeの選択)、Windousタスクマネージャを立ち上げた。
   ③タスクマネージャ「プロセス」タグで、google toolbar,ウイルスセキュリティ関連のプロセスを終了させた。
   ④残りのインストール作業を続けた。
    >>>結果 前述のエラーが発生、③で停止させたプロセスとの関連性は解らないが、インストール発生箇所が異なった。
    >>>インストールを "Custom"で行い、インストール内容をCycloneに絞って行ってみたが同様に失敗した。
   
  ※現時点でWindows7でのQuartusII 9.1 のインストールは不可(私にとっては!)

2.DELL Studio Slim CPU:Core2Quad Mem:4GB(インストール作業前空き:0GB タスクマネージャ/パフォーマンス) OS:Windows Vista Home Premium 64bit その他:Windows Live OneCare等多数の
サービスが常駐。
 1)DELL Inspiron 15でダウンロードした QuartusIIのダウンロードファイルを。
 2)ダウンロードファイルを実行し、インストール作業を行いました。
 3)インストール成功

  ※Windows VistaでのQuartusII 9.1 のインストールはスムーズに行えた。

Windows7でのインストール失敗は、少々残念でした。
私のWindows7のイメージとして、VISTAが巨大で、おせっかいOSであったことにたいする見直しとして、Windows XPを、ブラシュアップし直したものと思っていました。
現在保有しているソフトウエアもある程度使えると思っていたのですが。。




2009年11月21日土曜日

IAR KickStart Kit STM3210E-SK を試す。



 STMicroelectronics のご好意により、先日ET2009で入手したIAR KickStart Kit STM3210E-SKを試します。

1.準備、キットの情報を調べる。
 1)「ST ARM Core-Based Microcontrollers and IAR KickStart Kit」(
リーフ)から。
  ・キット本体の構成 STM32F103ZE-SK+IAR J-Link (On Boad debug Interface)
    IAR J-Link(ARM 用USB 接続JTAG ICE)がキット本体にすでに乗っている。    
  ・IAR Embedded Workbench のコードサイズ制限 32KB (exsample application も32KB以下)
 2)IAR KickStartKit CDを調べる。
   環境 Windows VISTA 64
  ①CDをPCにセットする。
    自動起動 Start.exeを実行を許可する。[WinVISTA]
  ②IAR KickStartが立ち上がる。
  ③「QuickStart Guide and product Information」
    ・Guides and Manuals
     ・IAR Kit QuickStart Guid(.pdf)
    ・STM32F103 Information
     ・Reference manual
     ・Data sheet
    ・Boad schematic

  ※マイクロコントローラ:STM32F103ZE(LQFP144)  

2.IAR Embedded Workbench のインストール。
 引き続き、IAR KickStartの作業
  1)「Software installations」
   ①IAR Embedded Workbench のインストール
     KickStart Editionをクリック
   ②「Welcome to IAR Systems IAR Embedded Workbench Installation」
   ③Install IAR Embedded Workbenchをクリック
     ・Get a license
       ・IAR ホームページ 「Product Registration」でユーザ登録
           メールアドレス等を登録
           会社名、HPは適当に入力
       ・IARからメールが届く
       ・そこに登録確認用のhttpアドレスが記載、これをクリック
       ・IAR ホームページ 「Registration Confirmed」
           License Number と License Key が記載
     ・IAR Embedded Workbenchのインストール 
       ・ライセンスNo. License Key IARのホームページの記載のものCopy/Past
     ・IAR J-Link On Board のインストール
      ・PCとボードをUSBで接続(ステッピングモータの脇のUSBコネクタ)
       ・PWR_LED 点灯
       ・LED点滅
       ・STAT4(LED)点滅
       ・カラーLCDにIARのロゴ表示
     ・PCに「新しいハードうえあの検出」=>ドライバのインストールを実行
       ・ディレクトリC:\Program Files(x86)\IAR Systems\Embedded Workbench 5.0 Kickstart\arm\drivers\JLink\を指定
      ・評価ボード設定
        PWR_SEL Pin3-4 closed - power from J-Link
        JTAG_SEL Open, J-Link-OB is used
3.Example Application の実行
  1)Embedded Workbenchの実行
    ・スタート>すべてのプログラム>IAR Systems>IAR Embeded Workbench for ARM KickStart>IAR Embeded Workbench で実行
  2)Example アプリケーションの実行
    IAR Embeded Workbench IDE起動で「Embedded Workbench Start」ダイアログ表示
    ①Example アプリケーションをクリック
     ST>STM32F10x>IAR-STM32F103ZE-SKを選択しOpen
    ②「Choose destination folder」のダイアログが表示
     適宜なフォルダ ”IAR-SK-Work”を作成し、それを選択
    ③「Workspace」ウインドウで ”LCD_demo Flash Debug”を右クリック選択 「Set as Active」
   (④「LCD_Demo」タグを選択)
    ⑤Workspace」ウインドウの上部コンボボックスに”LCD_demo Flash Debug”が表示
    ⑥Exampleアプリケーションのメイク
     Project>Make 実行
    ⑦Exampleアプリケーションのダウロード
     Project>Download and debug
    ⑧Exampleアプリケーションのデバッグ実行
     評価キットのLCDにカラーパターン表示

3.Example Application LCD_demo について
 1)動作
  ①立ち上がり
    IARのロゴ表示
    カラーパターン表示
  ②実行中
   ・Push Button[USER]でバックライト調整モードに切り替え
   ・Push Button[WKUP]でコントラスト調整モードに切り替え
   ・TRIMMER[AN_TR]でバックライト、コントラストの調整を行う。
 2)解析
  ①Push Button[USER]
    ・CPUピン No.93
    ・ピン機能 PG8
  ②Push Button[WKUP]
    ・CPUピン No.34
    ・ピン機能 PA0、[WKUP]、USART2_CTS(8)、ADC123_IN0、TIM2_CH1_ETR、TIM5_CH1、TIM8_ETR
  ③TRIMMER[AN_TR]
    ・CPUピン No.44
    ・ピン機能 PC4、ADC12_IN14
  ④Graphic LCD
    CPU Pin Func.
    -------+------------------------------------------------------  
    No.42 SPI1_MISO、PA6、TIM8_BKIN、ADC12_IN6、TIM3_CH1、TIM1_BKIN
    No.41 SPI1_SCK、PA5、DAC_OUT2、ADC12_IN5
    No.42 SPI1_MOSI、PA7、TIM8_CH1N、ADC12_IN7、TIM3_CH2、TIM1_CH1N
    No.29 (LCD_CS)、PC3、ADC123_IN13
    No.75 (LCD_RS)、PB14、SPI2_MISO、TIM1_CH2N、USART3_RTS
    No.135 (LCD_BL)、PB5、I2C1_SMBA、SPI3_MOSI、I2S3_SD、TIM3_CH2、SPI1_MOSI

  ⑤Exampleアプリケーションの標準出力はこのLCDに行われる。
   (printf関数で文字が表示される。)

4.Example Application Acc_demo について
1)動作
  評価ボードの傾きを表示し、その傾きに合せてステッピングモータが回転する。
5.Example Application MassStrage について
  サイズ制限に引っかかる。
6.Example Application Temp_demo について
1)動作
   温度表示
7.Example Application USBMouse について
1)動作
   5V電源ジャック側のUSBコネクタとPCを接続
   ジョイステックと2プッシュボタンでマウスとして動作する。
8.Example Application AudioDevice について
1)動作
   5V電源ジャック側のUSBコネクタとPCを接続
   オーディオミニプラグでスピーカーにつなぐとUSBスピーカとして音声出力。
9.Example Application VirtualCom について
  サイズ制限に引っかかる。
10.RTOSを試す。
 1)インストール
  再び、IAR KickStartの作業
  ①「RTOS/middleware」をクリック
  ②「Boad support package」をクリック
    フォルダSTM_HDが表示される。 このフォルダを適宜なフォルダにコピーする。
  ③IAR Embedded Workbenchで ワークスペース[Start_STM32_HD.eww]をOpenし、メイク/ダウンロードする。
 2)実行 2つのLEDが 異なる周期で点滅する。
   2つのタスクを登録し、各タスクごとにLED点滅させる。

感想としてサンプルアプリケーションのソースコード、特にSTMicroelectronicsのライブラリ コードソース[stm32f10x_XXX.h stm32f10x_XXX.c |stm32f10x_systick stm32f10x_systick stm32f10x_systick....等 ]が充実している。
評価ボード自体、カラーLCD、SDカード、シリアルポート、おまけ的に温度センサ、傾斜センサ、ステッピングモータ等々多彩な機能を搭載している。 Ethernetが無いのが残念。
IAR Embedded Workbench の製品版を入手できれば、短期間で目的のアプリケーションが作成できると思われます。
ただ、後は、STMicroelectronics のダウンローダーDfuSe でWorkbench で開発したアプリケーションをどうやって実機にダウンロードするかが、これからの課題です。
一応、考えうる手順を書き留めます。

1)IAR Embedded Workbenchのアプリケーション作成。
 ①hexファイル出力設定
  ・Project>Optionsで「Option for node "XXXX"」ダイアログが表示される。
  ・Output Convert で Generate additional output のチェックボックスをチェックし、Output formatでIntel extendedを選択
 ②アプリケーションをメイクする。 XXXX.hexファイルが作成される。
2)DFUファイル作成
 ①DFU File Managerを立ち上げる
  ・スタート>すべてのプログラム>STMicroelectronics>DfuSe>DFU File Managerで起動
 ②”I want to GENARATE a DFU file from S19,HEX,BIN files”を選択
 ③[S19 or Hex...]で XXXX.hexファイルを開く
 ③Generate実行 ファイル名を指定する。
3)ダウンロード実行 
 ①DfuSe Demonstrationを立ち上げる。
  ・スタート>すべてのプログラム>STMicroelectronics>DfuSe>DfuSe Demonstrationで起動
 ②Upgrede or Verify Actionの[Chose...]でDFUファイルを選択する。
 ③[Upgrade]で書き込み実行

4)ダウンロードについて。調査課題
 ・IAR KickStart Kit STM3210E-SKにはJTAGコネクタが2つのUSBコネクタの間にある。このコネクタはSTM32F103ZEのJTAGデバッグポートに直結 STMicroelectronics STM32F20x用のJTAGケーブル(USB)が有ればいいのですが。現時点で、純正品で存在するのか、サードパーティで、Cortex-M3対応のJTAGデバッガツールでダウンロード可能なのか不明。
 また、自作について調べるが今だ情報にたどり着けない状況です。
 ・今まで、各種マイコンについて評価ボード、スタータキット、あるいは雑誌付録基板を使ってきました、何れの場合も、PCとUSB接続し、必要に応じて、PCに対応ドライバをインストールするだけで、事足りていました。マイコンチップ自体にどの様にアプリケーションをダウンロードしているのか考えもしなかった。この機会に少し調べてみようと思います。

※追加 
これまで、開発したアプリケーションを何とかして、コードサイズ制限のあるIAR Embedded Workbenchを使わずに、IAR KickStart Kit STM3210E-SKに書き込むことを考えてきたが、その手法案についてまとめる。

案1.JTAG書き込み1 前述のとおり、なんとかJTAGケーブル(USB対応)を調達し、このキットのJTAGコネクタを経由して開発アプリケーションを書き込む。

案2.JTAG書き込み2 このキット自体 IAR J-LinkというARM 用USB 接続JTAG ICEが搭載されている。IAR Embedded Workbench と同じ手法で開発アプリケーションを書き込む。
 (以下、案2についての試行錯誤)
 ・JLink.exeと言うツールをSEGGER社のサイトから取得する。
 ・このキットをUSB(JTAG)コネクタ経由でPCにつなぐ。
 ・JLink.exeを起動する。>> 一応 キットとの接続が確かめられた。
  (J-Linkによる、PCと、キットSTM32F103ZEの接続を確認)
 また、JLink.exeのダウンロード時に JFlashARM.exeも併せて取得した、STM32F103ZEにアプリケーションの書き込みには、JFlashARM.exeを使用するようですが、こちらのほうは接続に失敗した。

案3.DFU書き込み 案1、案2何れかの方法により、このキットの STM3210ZEにフラッシュROMにDFU(USBダウンローダー)を書き込む。(多少、DFUの修正は必要と思われる。)開発アプリケーションはDFU形式へのファイル変換を行い、DfuSeを使って、書き込む。

案3改 DFU書き込み 「案1、案2何れかの方法により、」というより、IAR Embedded Workbenchで書き込んでしまえばよいのではないのか、 DFU(USBダウンローダー)のサイズは12KBだから可能と思われる。。。。?

だんだん、手法は見えてきたが。IAR社がこのキットについて、IAR Embedded Workbench以外でのアプリケーションのダウンロードを阻止する意図があった場合。無駄な努力に帰することになる。