JDE - チュートリアル - AT91SAM7-P52 CPUボード

目次 > CPUボードの紹介 > AT91SAM7-P52 CPUボード

(工事中) 

■ ブート書込:ROMモニタの構築・書込・実行 ■

組込プログラムではリセットスタートで起動し、自分自身で必要なハードウェアの初期化をするプログラムが基本となります。
そのようなプログラムの例としてROMモニタをとりあげます。
ここではROMモニタをソースから構築してCPUボードに書込むまでの手順を説明します。

  1. ターゲットボード

    ターゲットボードとしてH8S2212Aを使います。
    H8S2212UはUSB経由のブート書込が可能なCPUで、CPUボードはUSBバスパワーで動作しますので専用のケーブル・電源なしでプログラムの開発ができる便利なボードです。



    ブート書込みの準備



    赤枠で囲んだ4本のジャンパをすべて差し込んでからUSBケーブルに接続します。
    これでブート書込みの準備が出来ました。
    ※ブート書込を失敗したりやり直す場合は一度USBケーブルを抜いて接続し直して下さい。

  2. H8S2212AROMモニタプロジェクトを開いてプログラムを構築する

    プロジェクトはJDEのインストールで /usr/src/jsd/monitor-src/mon_H8S2212A/mon_H8S2212A.jpr にインストールされます。
    ソースが存在しない場合はこちらからダウンロードして /usr/src に保存しCygwinウィンドウで tar コマンドを使って展開して下さい。 

    メニューからプロジェクト mon_H8S2212A.jpr を開き(再構築)をクリックします。
    コンパイルメッセージ欄に「コンパイルとリンクが終わりました」と表示されたら構築完了です。
    エラーが発生した時は下図と較べて設定を確認して下さい。



    どのようなメモリ配置でプログラムが作成されたかを確認するにはメッセージ欄の文字 mon_H8S2212A.map をダブルクリックします。
    表示されたエディタウィンドウでまず .text という文字列を検索してみます。
    .textはプログラムのセクションでプログラムが0x00001000から0x6880のサイズで展開されていることを示しています。
    同様に .vectors .bss .heap .stack について検索するとメモリ配置がCPUの内蔵ROM、RAMの範囲を超えていないことを確認できます。
    リンカスクリプトで定義されたROM、RAMの範囲を超えるとリンカエラーになりますからこのマップファイルを確認しなければならないことはほとんどありませんが、
    組込プログラムで解決できないトラブルが発生したときには念のためにマップファイルを確認することを覚えておくと役立ちます。



    次にmon_H8S2212A.motをダブルクリックして生成された転送用のSフォーマットファイルを見てみます。
    これは下図のようにプログラムのバイナリデータをアスキー文字でフォーマット化したものです。
    先頭5-8文字がアドレスで続いて16進表記のデータが続き最後の2文字がチェックサムになっています。
    通常はこのファイルを意識する必要はありませんがどのような形式のファイルが生成・転送されるかを知るために一度は確認しておくと何かの時に役立ちます。

  3. H8S2212AROMモニタプロジェクトを開いてプログラムを構築する

    次に ブート書込ツールを使って構築したモニタプログラムをターゲットボードに書き込みます。
    プログラムのブート書込に沿ってブート書込をおこなってください。

  4. モニタの起動

    書き込んだモニタを起動してみます。
    USBケーブルを外し、赤枠で囲んだジャンパを外してからケーブルを再接続します。
    LEDが点滅を開始したらモニタが正常に動作しています。



    ※このボードではBOOTとMONのシルクが逆になっています、モニタを起動するときは上図で左側のジャンパを外すようにしてください。

    通信プログラムを起動してENTERキーをたたくとモニタプロンプトが表示され、’?’を入力するとモニタコマンド一覧が表示されます。


■ モニタ書込:サンプルプログラムの作成・構築・転送・実行 ■

シンプルなprintfプロジェクトを作成して構築、書込・実行します。

  1. 新しいプロジェクトを作成する を参照して/usr/src/jde/tutorial/printf/printf.jpr というプロジェクトを作成しmain.cを追加します。
  2. 下図を参考にモニタ起動用の構成に設定します。

  3. main.cをエディタで開きソースプログラムを記述して(再構築)をクリックしてプログラムを構築します。

    ソースは下図に表示している7行が全てです。
    組込プログラムではmain()から抜けないのが原則なので、printf()を実行した後にforループで停止します。



    正常に構築が終了したらプログラムの転送・書込みに進みます。
    エラーが発生したときはエラーの書込と修正を参考にして構築完了するまで修正をおこないます。

  4. モニタの動作確認

    CPUボードにUSBケーブルを接続しモニタが起動してLEDが点滅していることを確認します。

  5. プログラムの書込み

     ROM化ボタンをクリックしてプログラムの書き込みを開始します。

  6. プログラムの実行

    通信プログラムが起動しターゲットボードにプログラムを転送して実行します。



    通信画面で最後に表示されている"Hello world."が実行されたプログラムの出力です。
    それ以外はモニタが出力した表示出力です。
    プログラム開始アドレスが0x00008100、サイズが0x0000A97D=43,389byteとなっています。
    1行だけのプログラムなのにサイズがかなり大きくなっているのはprintfを使うと多くのライブラリ関数を必要とするためです。
    使っているライブラリ関数の一覧は printf.map で確認することができます。

  7. ROM化済みのプログラムをモニタから実行

    ROM化されたプログラムがある場合はモニタを起動してRUNコマンドでプログラムを実行することができます。
    下図が実行画面です、モニタからRUNコマンドで実行した場合にはプログラムステータスが表示されます。

  8. パワーオンリセットで実行

    ジャンパを取り外すとパワーオンリセットでプログラムを実行することができます。



    下図が実行画面です、パワーオンリセットで実行する場合はプログラムの出力だけが表示されます。

■ シンプルな文字列入出力 ■

printfを使うとソースはシンプルでも生成されたプログラムはかなり大きくなります、ここではプログラムサイズが小さくて済む文字列入出力を説明します。

  1. サンプルプロジェクトを開いてプログラムを構築する

    メニューからプロジェクト /usr/src/jsd/tutorial/puts/puts.jpr を開き(再構築)をクリックします。
    コンパイルメッセージ欄に「コンパイルとリンクが終わりました」と表示されたら構築完了です。
    エラーが発生した時は下図と較べて設定を確認して下さい。

  2. プログラムの書込み

     ROM化ボタンをクリックしてプログラムの書き込みを開始します。

  3. プログラムの実行

    通信プログラムが起動しターゲットボードにプログラムを転送して実行します。



    プログラムサイズが 0x00000804=2052byte とprintfを使った場合に較べてたいへんコンパクトになっています。
    サンプルプログラムではforループ中で文字入力待ちをしていますのでキーボードをたたく毎に文字列が出力されます。