2023年2月11日土曜日

TOPPERS/ASP - ML62Q1000版 その3

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


サンプルドライバのソースコードのコピー

ここで言う「サンプルドライバ」とは、いわゆるラピステクノロジー社純正のライブラリパッケージであり、これを使用するとCPUに内蔵されているペリフェラル(周辺機器)を簡単に利用することができるというものです。

今回の「TOPPERS/ASP ML62Q1000版」のカーネル内でも、割り込み、タイマーやシリアル通信ドライバなどは、このサンプルドライバを使用しています。

ところが、このサンプルドライバのソースコードのライセンスが原則公開禁止であるために再配布できません。

そのため「TOPPERS/ASP ML62Q1000版」のソースコードが不完全なものとなり、そのままではビルドが通らず、通すためには手動で不足分のソースコードをコピーしていただくという手間を強いることになってしまいました。

お手数をおかけして申し訳ない…。

では、そのサンプルドライバのソースコードを何処から入手すれば良いのか?

もう一度、ML62Q1000マイコンスタータキット「SK-BS01-D62Q1577TB」に同梱されているDVD-ROMのトップディレクトリから「ML62Q1000_MCU_StarterKit」というディレクトリをダブルクリックします。

すると、以下のようなディレクトリになってると思います。

更に「MCU_SampleProgram_v200.zip」という圧縮ファイルをパソコンの何処へでも良いのでコピーします。

同梱されているDVD-ROMの「ML62Q1000_MCU_StarterKit」ディレクトリ

コピーした「MCU_SampleProgram_v200.zip」を解凍すると、以下のようなディレクトリが展開されます。

この中の「Software_LEXIDE」ディレクトリをダブルクリックします。

解凍された「MCU_SampleProgram_v200.zip」のディレクトリ


移動したディレクトリの中の「driver」ディレクトリ、この中にサンプルドライバのソースコードがギッシリ入っています!

「Software_LEXIDE」ディレクトリ


この「driver」ディレクトリをTOPPERS/ASPのソースツリーの以下に示すのパスの直下に丸ごとコピーしましょう。

「asp_ml62q1000_u8dev」や「asp_ml62q1000_u8dev_master」を「asp_1.9.2」に改名した場合。


C:\cygwin64\home\morita\asp_1.9.2\arch\xn_u16_100_u8dev

「driver」ディレクトリをコピー


これで、サンプルドライバのコピーは完了です。

ここまでは簡単ですが、面倒なのはこの次…。


スタートアップファイル「start.asm」のコピーと修正

ターゲットに電源が入った後、いの一番に実行されるアセンブラのソースコード「start.asm」を作成します。

一から書くのは大変なので、既に用意されているものをベースに作成しましょう。

元となるソースコードは、「ML621577.ASM」という名前で以下のパスに配置されています。

ターゲットCPUの型番が名前になってます。

似たような型番があるので間違えないようにしてください。


C:\U8Dev\Startup\Src

スタートアップ格納ディレクトリ


この「ML621577.ASM」を以下のディレクトリにコピーします。


C:\cygwin64\home\morita\asp_1.9.2\target\rb_d62q1577tb100_u8dev

「ML621577.ASM」をコピー


ついでに、今コピーした「ML621577.ASM」を「start.asm」に改名しておきましょう。

「start.asm」へ改名


続きまして、改名した「start.asm」をテキストエディターなどで開き、以下の部分を修正します。

元の「ML621577.ASM」で言うところの14行目付近からの…

  1. ...
  2.         model large
  3.         romwindow 0, 0afffh
  4.         extrn code: _main
  5.         extrn data near: _$$SP
  6.         public $$start_up
  7. ...

…という部分を以下のように修正します。

  1. ...
  2.         model large
  3.         romwindow 0, 0afffh
  4.         ;extrn code: _main ; コメントアウト!
  5.         extrn code: _sta_ker ; 追記!
  6.         extrn data near: _$$SP
  7.         public $$start_up
  8. ...


アセンブラソースにおいて「;」はコメントを意味します。

これは、普通のファームウェアが「main()」関数から始まるのに対し、TOPPERS/ASPカーネルを使用する場合は「sta_ker()」という関数から始まるため、このファイルの外にある「sta_ker()」関数を使用するための宣言です。

実際に「sta_ker()」関数へジャンプする部分は、この後実装します。


さて、次の修正です。

21行目付近からの…

  1. ...
  2.         cseg at 0:0h
  3.         dw offset _$$SP
  4.         cseg at 0:4h
  5.         dw $$brk_reset
  6. ...


…という部分を以下のように修正します。

  1. ...
  2.         cseg at 0:0h
  3.         dw offset _$$SP
  4.         cseg at 0:2h ; 追記!
  5.         dw $$NCODml621577lw ; 追記!
  6.         cseg at 0:4h
  7.         dw $$brk_reset
  8. ...


これは、外部リセットの際のベクタを追加しています。

これを省くと、デバッガが使えなくなっちゃうので要注意です。


さてさて、お次は…。

204行目付近からの…

  1. ...
  2. ;---------------------------------------------------------------
  3. ; far jump to main routine
  4. ;---------------------------------------------------------------
  5.         b _main
  6. ...


…という部分を以下のように修正します。

  1. ...
  2. ;---------------------------------------------------------------
  3. ; far jump to main routine
  4. ;---------------------------------------------------------------
  5.         ;b _main ; コメントアウト!
  6.         b _sta_ker ; 追記!
  7. ...

これが前述した「main()」関数の代わりに、実際に「sta_ker()」関数へジャンプする部分となります。


更に更に…。

250行目付近からの…

  1. ...
  2.         cseg #03 at 0ffd0h ; address
  3.         dw 0fffdh ; 0ffd0h
  4. ...

…という部分を以下のように修正します。

  1. ...
  2.         cseg #03 at 0ffd0h ; address
  3.         ;dw 0fffdh ; コメントアウト!
  4.                                     ; 0ffd0h
  5.         dw 0fff8h ; 追記!
  6.                                     ; コードオプション0(CODEOP0)に該当する.
  7.                                     ; ウォッチドッグ関連ビット(WDTNMCK,WDTSPMD,WDTMD)を全て0に設定する.
  8.                                     ; ウォッチドッグを使用する場合は適切な値に設定すること.
  9. ...


これはアドレス「0ffd0h」という場所に「0fffdh」という値に替えて「0fff8h」という値を配置しています。

プログラムメモリ空間の「0ffd0h」というアドレスは「CODEOP0」というコードオプション領域に該当します。

コードオプションというのは、リセットが掛かるとマイコンが自動的に読みに来るパラメーターのことであり、CPUの動作モードやウォッチドッグなどの基本的な設定を書いておく領域のことです。

上記の例では、このコードオプション「CODEOP0」に対し、ウォッチドッグ機能を無効化するように設定しています。

こうしておけばリセット後のマイコンは、ウォッチドッグ機能が無効化された状態で動作を開始するようになります。


コードオプションの設定はもう一箇所!

「CODEOP0」のすぐ下、253行面付近からの…

  1. ...
  2.         cseg #03 at 0ffd2h ; address
  3.         dw 0ffffh ; 0ffd2h
  4. ...


…という部分を以下のように修正します。

  1. ...
  2.         cseg #03 at 0ffd2h ; address
  3.         ;dw 0ffffh ; コメントアウト!
  4.                                     ; 0ffd2h
  5.         dw 0fffdh ; 追記!
  6.                                     ; コードオプション1(CODEOP1)に該当する.
  7.                                     ; CPUの動作モードを「ウェイトモード」に設定する
  8. ...


これはアドレス「0ffd2h」という場所に「0ffffh」という値に替えて「0fffdh」という値を配置しています。

プログラムメモリ空間の「0ffd2h」というアドレスは「CODEOP1」というコードオプション領域に該当します。

上記の例では、このコードオプション「CODEOP1」に対し、CPUの動作モードを「ウェイトモード」に設定しています。

ML62Q1000マイコンには「ノーウェイトモード」と「ウェイトモード」の二種類があります。

前者が初期値です。

二つのモードの違いは、マイコンのデータシートを熟読していただく必要がありますが、今回は「ウェイトモード」を使用することとします。


以上で「start.asm」の修正は終わりです。

修正が終わったら、忘れずに「start.asm」を保存してください。


コマンドラインでのビルド

さて、これで全ての準備は整いました。

お疲れ様でした~!!

早速ビルドしてみましょう。

Cygwinを開いて、TOPPERS/ASPソースツリーの場所まで移動しましょう。


$ cd asp_1.9.2/


次にその直下の「OBJ」ディレクトリに移動します。


$ cd OBJ/


コンフィギュレーターのパーミッションを実行可能に設定します。


$ chmod 755 ../cfg/cfg/cfg.exe


ラピステクノロジー社のアセンブラである「rasu8」が出力した「.prn」ファイルから依存するファイルを書き出す「makedepu8.exe」という自作ユーティリティのパーミッションを実行可能に設定します。


$ chmod 755 ../arch/xn_u16_100_u8dev/utils/makedepu8.exe


ラピステクノロジー社のリンカである「rlu8」が出力した「.map」ファイルからシンボル情報ファイル「.syms」を生成する「nmu8.exe」という自作ユーティリティのパーミッションを実行可能に設定します。


$ chmod 755 ../arch/xn_u16_100_u8dev/utils/nmu8.exe


自作ユーティリティの「makedepu8.exe」も「nmu8.exe」も、ラピステクノロジー社のアセンブラやリンカが更新されて出力形式が変わってしまえば、正常に動かなくなるかもしれません。

可能性は低いですが、その際に修正できるように、それぞれのソースコードも「exe」と同じディレクトリに置いておきますね。

その場合は「../arch/xn_u16_100_u8dev/utils/」ディレクトリに移動して、以下のようなコマンドを打てば、コンパイルできます。

「makedepu8.exe」を作る場合は…


$ gcc -o makedepu8.exe makedepu8.c


「nmu8.exe」を作る場合は…


$ gcc -o nmu8.exe nmu8.c


さて、話を戻して…。

ここまで、大丈夫ですか?

Cygwinターミナル - 1

そうしたら、プロジェクトのコンフィグファイル(sample1.cfg)の情報を元に、OSに必要な定義を記したソースコード(「kernel_cfg.c」と「kernel_cfg.h」)を生成します。


$ make depend


以下のような表示にならずエラーが出力される場合は、残念ながらこれまでの作業に誤りがあります。

お手数ですが、最初からご確認を!

Cygwinターミナル - 2


ここまで上手くいったら、ホンチャンのビルド。

以下のコマンドを実行します。


$ make all


以下のように無事にビルドが通ったでしょうか?

Cygwinターミナル - 3


本日はここまで!

とても煩雑な作業でしたが、お疲れ様でした。

コマンドラインではビルドが通るようになりましたので、次回はラピステクノロジー社純正のIDE(統合開発環境)「LEXIDE-U16」で開発できるようにプロジェクトを作りましょう。


<続く>

2023年2月6日月曜日

TOPPERS/ASP - ML62Q1000版 その2

前回からの続きです。


開発環境の構築

早速、開発環境を構築していきます。

ML62Q1000マイコンスタータキット「SK-BS01-D62Q1577TB」に同梱されているDVD-ROMをパソコンに挿入しましょう。

DVD-ROMは、以下のようなトップディレクトリになっていると思います。

以下の「ML62Q1000_MCU_StarterKit」というディレクトリをダブルクリックします。

同梱されているDVD-ROMのトップディレクトリ


次に「U8DevTool_R2_2_0.zip」という圧縮ファイルをパソコンの何処へでも良いのでコピーします。

※ファイル名は開発環境のバージョンによって異なる可能性があります。

同梱されているDVD-ROMの「ML62Q1000_MCU_StarterKit」ディレクトリ


コピーした「U8DevTool_R2_2_0.zip」を解凍すると、以下のようなディレクトリが展開されます。

この中の「Setup」ディレクトリをダブルクリックします。

解凍された「U8DevTool_R2_2_0.zip」のディレクトリ


移動したディレクトリの中の「U8DevInstaller.exe」ファイルをダブルクリックします。

コイツがML62Q1000マイコン開発環境のインストーラーです。

ML62Q1000マイコン開発環境のインストーラー


しばらくすると以下のようにインストーラーが開始されます。

ここは「次へ」ボタンをクリックしましょう。

インストーラー - 1


お約束の使用許諾への同意の作業。

使用許諾契約の条項に同意します」のラジオボタンを選択してから「次へ」ボタンをクリックです。

インストーラー - 2


開発環境のインストール先の設定です。

特に理由がなければ、このままで行きましょう!

次へ」ボタンをクリック。

インストーラー - 3


セットアップの種類を聞かれます。

特に理由がなければ「標準」という表示をクリックしてください。

インストーラー - 4


インストール作業が始まりました!

思いの外時間がかかりますが、気長に待ちましょう。

インストーラー - 5


インストール作業中に以下のようなポップアップが表示されます。

2回位だったかな…?

おそらく、デバッガーか何かのデバイスドライバのインストールを許可してくれ~!って言ってます。

いずれも「インストール」ボタンをクリックです。

「Windowsセキュリティ」ポップアップ


インストーラーが以下の表示になったら、ML62Q1000マイコン開発環境のインストールは終了です。

完了」ボタンをクリックしてインストーラーを終了させましょう。

インストーラー - 6


さて、インストールしたML62Q1000マイコン開発環境の環境変数の設定を行います。

開発環境は、インストーラーにより以下のディレクトリにセットアップされているはずです。


C:\U8Dev

「U8Dev」ディレクトリ


環境変数の設定方法は、このページ(TOPPERS/ASPのビルドからデバッグまで~GNUツールチェーンの導入)の「環境変数の設定」の項目を御覧ください。

ただし、パスは…


C:\Program Files (x86)\GNU Tools ARM Embedded\7 2017-q4-major\bin


…となっていて、1つだけ設定していますが、今回はそれに代えて以下の2つを設定するようにします。

※特に2つ目のパスは開発環境のバージョンによって異なる可能性があります。


C:\U8Dev\Bin

C:\U8Dev\BuildTools\V2_02_00\Bin


こんな感じ…。

「環境変数名の編集」ダイアログ


また、このページの「パスの確認」の項目で打ち込むコマンドも、以下のように変わります。


> ccu8

コマンドプロンプト


続きまして「Cygwin」のインストールを行います。

このページ(TOPPERS/ASPのビルドからデバッグまで~Cygwinの導入)を参考にしてください。


次に、ソースコードをゲットしちゃいましょう。

ソースコードのダウンロードはこちらからどうぞ。

TOPPERS/ASP ML62Q1000版」というのを選んでください。

また、「Github」を使いたい方は以下のコマンドでソースコードのクローンを行います。


$ git clone https://github.com/RyutaroMorita/asp_ml62q1000_u8dev.git

Cygwinターミナル


ダウンロードとGithub、いずれの場合も「asp_ml62q1000_u8dev」というディレクトリの名前を「asp_1.9.2」などと改名すると、上記のページと同じ状況になります。


さて、開発環境をインストールして、ソースコードもダウンロードしました。

早速ビルドを~!って思う気持ちはわかりますが、やめておきましょう。

どうせ、必ずビルドは失敗します。

なぜならば、ソースコードに色々加えなければならないからです。

その手順も追って説明いたしますので、ここはグッと我慢。


さて、以上で開発環境のセットアップは終了です。

次回は、現状のソースコードに足らないものを色々コピーしたり、修正したりする作業を行っていきます。

複雑で面倒な作業ですが、手順通りにやっていただければ大丈夫です!


<続く>

2023年2月1日水曜日

TOPPERS/ASP - AVR32版 その6

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


サンプルプロジェクトの説明

このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトで遊ぼう)を参照してください。

AVR32


AVR32版カーネルについて

以下、このカーネルにおける備考です。


●割り込み優先度

このカーネルでは、-1(優先度最低)から-4(優先度最高)の4段階の優先度設定が可能です。

マイコンというのは、割り込みが起こるとアプリケーションで使っていたレジスタの値をスタックという専用のメモリへ退避させます。

更に割り込み処理が終わると、処理がアプリケーションへ戻る前にスタックへ退避させた値をレジスタに復帰させなければなりません。

したがって、これらの一時退避するレジスタの数が多いと処理自体がオーバーヘッドになり、反応性が悪くなります。

レジスタの退避と復帰は、割り込みルーチンの冒頭と終盤一命令ずつ書いていかなきゃならない(仮に一時退避するレジスタの数が8個なら、退避と復帰で計16ステップ必要)からです。

そういうマイコンが多数派ですが、AVR32(正確には「AVR32 UC3」)の場合はレジスタの一時退避をハードウェアで自動的にやってくれます。

ハードウェアによる一時退避の処理は非常に速いため、このことは割り込みの反応性を大きく向上させます。

つまり、割り込みを多用するアプリケーションの性能が良いということです。

大変優れたアーキテクチャです!


●例外ハンドラ

例外ハンドラとしては「..\target\at32uc3a3_xpld_gcc\target_vector.S」の冒頭のコメントに記されたものを使用することができます。

番号は飛び飛びになっちゃっているのは注意です。

特に20番以降はヒドイ…。

  1. ...
  2. /*
  3.  *        ターゲット依存ベクターテーブル(AT32UC3A3-XPLD用)
  4.  */
  5. #include <avr32/io.h>
  6. /*
  7.  * CPU例外番号
  8.  *
  9.  *
  10.  * 0 - Unrecoverable exception
  11.  * 1 - TLB multiple hit
  12.  * 2 - Bus error data fetch
  13.  * 3 - Bus error instruction fetch
  14.  * 4 - NMI
  15.  * 5 - Instruction Address
  16.  * 6 - ITLB Protection
  17.  * 7 - Breakpoint
  18.  * 8 - Illegal Opcode
  19.  * 9 - Unimplemented instruction
  20.  * 10 - Privilege violation
  21.  * 12 - Coprocessor absent
  22.  * 13 - Data Address (Read)
  23.  * 14 - Data Address (Write)
  24.  * 15 - DTLB Protection (Read)
  25.  * 16 - DTLB Protection (Write)
  26.  * 20 - ITLB Miss
  27.  * 24 - DTLB Miss (Read)
  28.  * 28 - DTLB Miss (Write)
  29.  * 64 - Supervisor call
  30.  */
  31. ...


例外ハンドラの動作は、サンプルプログラムで確認できます。

サンプルプログラム実行中に「z」か「Z」をターミナルで入力すると、CPU例外番号「14」のData Address (Write)」が引き起こされる仕掛けになっています。

この設定は「..\arch\avr32uc3_gcc\prc_test.h」の以下の記述で設定されています。

  1. ...
  2. #define CPUEXC1                14        /* Data Address (Write) */
  3. #define RAISE_CPU_EXCEPTION *(volatile int*)(0x1) = 0x11;
  4. ...


すなわち「CPUEXC1」に「14(Data Address (Write))」を定義し、サンプルプログラムから「RAISE_CPU_EXCEPTION」というマクロを呼び出すと「*(volatile int*)(0x1) = 0x11」という非常に行儀の悪いコードが実行されるようになっています。

(「0x1」という奇数番地を32ビットのポインターのアドレスとして扱い、更に、それに対して値を書き込んでいる!)

このイタズラにより、データを書き込むメモリのアドレスのアラインメントの不正が検出され、その名の通りの「14(Data Address (Write))」CPU例外が引き起こされます。

小文字の「z」と大文字の「Z」の違いは、CPU例外が小文字の場合はカーネル管轄内で、大文字の場合はカーネル管轄外でそれぞれ実行されるということだけです。

各CPU例外の詳細については、AVR32のデータシートを熟読していただく必要がありますが、これらが引き起こされた時点で致命的な状況が多く「4(NMI)」以外は、デバッグでの用途以外、あまり使い道はないでしょう。


●一部サービスコールは未対応

割り込みIDを指定して、これを有効/無効化するための「ena_int()」と「dis_int()」サービスコールはサポートしていません。

これはAVR32に搭載されている割り込みコントローラーがシンプルな設計であり、割り込み要因ごとに有効/無効化するためのフラグを設けていないためです。

どうしても一時的に割り込みを有効/無効化したい場合は、各ペリフェラルのレジスタを設定するか、CPU全体の割り込みを一括で設定しても良いのであれば、以下のような関数を呼び出すことで代用してください。

なお、以下の関数を使用するためには、これを使用するソースに「#include <avr32/io.h>」を一行加えてあげてください。

  1. Disable_global_interrupt(); /* すべての割込みの禁止 */
  2. Enable_global_interrupt();  /* すべての割込みの許可 */


また、性能評価用システム時刻取得のための「get_utm()」サービスコールは未実装です。


ライセンスについて

このカーネルは「TOPPERSライセンス」で配布しております。

無償ですが、使用に関しては自己責任です。

万が一、このカーネルを商用利用する方は、このリンク先の条項に従ってください…って、いらっしゃる訳ないですよね。

シリーズ自体がディスコンですから!


さて、絶滅危惧っていうか、ほぼ絶滅したアーキテクチャであるAVR32を取り上げてみました。

OS書き易かったし、良いマイコンなんだけどなぁ…。

強そうな「AVR32ロボ」(?)

でも市場で負けちゃった…。

(頭の形状から「おやおやおや…」とか言いそう。)

AVR32ロボ


この可哀想なAVR32、TOPPERSカーネルもしばらくは頑張ってメンテナンスしていきますので、市場にある内にどうか使ってやって下さい!


<終わり>

2023年1月27日金曜日

TOPPERS/ASP - ML62Q1000版 その1

TOPPERS/ASP - ML62Q1000版 概要

以前、このページで書かせてもらいました。

ラピステクノロジー社のマイコン「ML62Q1000」です。

「ML62Q1000」マイコン


結局仕事では使えなかったので、ここでの公開となりました。

オリジナル「nX-U16/100」コアの16bit RISCマイコンです。

かつてはローム株式会社が開発・販売しており、同じロームグループのラピステクノロジー社に移管されました。

このマイコンの一番の特徴は耐ノイズ性にあり、そのスジでは結構有名です。

次いで、低消費電力

イメージ的には低消費電力を謳っているマイコンほど耐ノイズ性が劣る気がしますが、この「ML62Q1000」、これらを両立しているところにインパクトのある製品だと思います。

この特徴から家電などの民生分野に向いており、これからの時代に益々需要が増えるであろう、環境への耐性が求められるセンサーなどのIoTデバイスにも最適です。

ただ、いかんせんマイナーなアーキテクチャであることは否めなく、技術情報もネット上ではほとんど見かけません。

また、目ぼしいRTOSなども見つからなかったので、この「ML62Q1000」に「μITRON4.0」準拠のRTOS(リアルタイムOS)であるTOPPERS/ASPを移植してみました。


必要なもの

今回のターゲットとなる、ML62Q1000マイコンスタータキット「SK-BS01-D62Q1577TB」です。

ありがたいことにデバッガー「EASE1000 V2」も付いており、通販で買うことができます。

こちらであれば、最安値で26,000円くらいです。

趣味で買うにはキツイお値段ですね…。

私の場合は、たとえ仕事で使う可能性があっても確定的でない限り、こういうのを会社が絶対買ってくれないので自腹を切りましたが、あまり良いことではありませんね!

(それをやると、会社はソフトウェアの開発には金が要らないと錯覚して、益々ケチになる…。)

ML62Q1000マイコン スタータキット「SK-BS01-D62Q1577TB」


他の型番への移植も可能ですが、TOPPERS/ASPを搭載して動作させるならROM:128KB/RAM:8KB以上の容量を持つ型番を選びましょう。

そうなると実質的に「ML62Q1000」シリーズでも、ML62Q15xx、ML62Q16xx、ML62Q17xxなどのハイエンドの型番がターゲットになります。

このブログでは「SK-BS01-D62Q1577TB」を使用した場合の例を説明していきたいと思います。


ダウンロード/GitHub

ソースコードの入手は、こちらからどうぞ。

とは言っても、このソースコードをダウンロード、もしくは「git clone」しても、絶対にビルドが通りません。

このソースコードは未完成です。

なぜなら、ラピステクノロジー社のドライバを後から付け加える必要があるんです。

ラピステクノロジー社のドライバのライセンスの条項によれば、ソースコードの一切の再配布を認めていません。

そのため公開できるのは、それに抵触しない完全なオリジナル部分のみです。

そして、ラピステクノロジー社のドライバを触ることができるのは、上記のスタータキットを購入した方のみです。

ですので、今後この記事では、それらのソースコードの在り処やコピーする場所などを事細かに書いていくつもりです。

やや面倒ですが、お付き合いいただけると嬉しいです。

ビルドは、まだやらないでくださいね~。

(あと、動かしながら記事書いてる過程でバグなんかが見つかるかもしれないので、ダウンロードは後の方が良いかも…。)


ベンダーの提供するドライバなどのソフトウェアにあまり厳しいライセンスを課すと、ユーザーが気軽に試せないし、コミュニティが育たないので製品のシェアが伸びない気もするのですが…。

ただ、これらを公開してしまうとベンダー側のサポートの手間は確実に増えるので、それを懸念してライセンスを厳しくしているベンダーは少なからず存在します。

前回の「TOPPERS/ASP AVR32版」で取り上げた、Microchip社なんかもそうでしたね。

次回以降、開発環境の構築から始めましょう!


<続く>

2023年1月19日木曜日

TOPPERS/ASP - AVR32版 その5

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


プロジェクトの作成

この「TOPPERS/ASP AVR32版」では、2つのIDE(統合開発環境)を使用する方針です。

すなわち、コードを編集してそれをビルドする時に使う「Eclipse」と、ターゲットへプログラムの書き込みを行い、それをデバッグするための「Microchip Studio」です。

したがって、それぞれの様式に沿った2つのプロジェクトを作成しなければなりません。

では、なぜ2つ使うのか?

Microsoftの「Visual Studio」ベースの「Microchip Studio」が、コーディングをする上で重すぎて使い難いからです。

とはいえ、デバッガの「Atmel-ICE」を使用するためには、どうしても「Microchip Studio」が必要というジレンマ…。

あくまで個人的な好みなので、このあたりの使い分けは自由に選択してください。


とにもかくにも、まずは「Eclipse」のプロジェクトを作りましょう。

これに関しては、以前このブログに記載した「TOPPERS/ASP Arduino MEGA2560版」の記事が参考になります。

8Bitか32Bitかの違いはありますが、同じAVRマイコンですからね。

作業内容は同じです。

このページ(TOPPERS/ASP - Arduino Mega2560版 その4)の「プロジェクトの作成(Eclipse編)」の項目を参考にしてください。

同様に「Microchip Studio」のプロジェクトもこのページ(TOPPERS/ASP - Arduino Mega2560版 その4)の「プロジェクトの作成(Microchip Studio編)」の項目を参考にしてください。


デバッガとターゲットの配線

デバッガの「Atmel-ICE」とターゲットの「AT32UC3A3-XPLD」の間で、こんな感じの配線をします。

デバッガとターゲットの配線 - 1


「Atmel-ICE」には2種類のケーブルが同梱されているはずです。

今回使用するのは、10ピンがバラバラに出てるやつです。

それをこのように配線しなければなりません。

表がこう。

デバッガとターゲットの配線 - 2


裏はこんな感じ。

デバッガとターゲットの配線 - 3


信号の対応表は以下の通り。

まずは、「Atmel-ICE」側は以下の通り。

今回使うのはAVRポートの方ですよ!

信号表(デバッガ側)


次に「AT32UC3A3-XPLD」側は以下の通りです。

信号表(ターゲット側)


結果、バラバラ10ピンケーブルの方は、7番と8番はノンコネクトで大丈夫です。


プログラムの転送とデバッグ

これからTOPPERS/ASPのサンプルプログラムを動かす際には、動作確認のためにどうしてもシリアルポートが必要です。

そこで、以下のような市販のUSB/シリアル通信変換ケーブルを用意します。

市販のUSB/シリアル通信変換ケーブル


シリアル通信をするために必要なポートは、RXDとTXDとGNDの三本ですね。

ターゲット基板上の「J4」ヘッダから取りましょう。

「J4」ヘッダの位置


以下の赤い四角で囲った端子を使いましょう。

信号表(「J4」ヘッダ)


評価ボードからこうやってGNDRXDTXDと、それぞれの線を出してやって…

ターゲット側の配線


USB/シリアル通信変換ケーブル側の配線は、上からTXDRXDGNDの順番でこんな感じ。

これでシリアルポートが使えるようになりました。

USB/シリアル通信変換ケーブル側の配線


続いて、このUSB/シリアル通信変換ケーブルをパソコンに繋いでみましょう。

パソコン上でデバイスマネージャーを開きます。

ポート(COMとLPT)のサブカテゴリーとして「USB Serial Port」というポートが追加されているはずです。

(私のパソコンでは、「COM15」として認識されていますね。)

このポート番号、覚えておいて下さい。

デバイスマネージャー


ここで、デバッガとパソコン、そしてターゲットとパソコンをそれぞれUSBケーブルで繋げちゃいましょ。

面倒なことに、2種類のUSBケーブルが必要です。

デバッガは「Micro-B」、ターゲットは「Mini-B」と、似ているようで違うので要注意です。

ご覧の通り、通電します。

デバッガ、ターゲットとパソコンの接続


次に「TeraTerm」をご用意ください。

インストールしていない方は、このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトのデバッグ)の「TeraTermの導入」の項目を参考にしてください。

もちろん、シリアル通信のターミナルであれば、他のものもお使いいただけます。

今回のTOPPERS/ASPのサンプルプログラムは、シリアル通信のメッセージを出力しますので、先程「USB Serial Port」として認識されたシリアルポート番号でターミナルを立ち上げておきましょう。

設定は、こんな感じです。

ボーレートは「9600」です。

(私のパソコンは、USB/シリアル通信変換ケーブルをCOM15として認識していました。)

TeraTerm - シリアルポートの設定


さて、「Microchip Studio」に戻りましょう。

「Microchip Studio」でプロジェクトを作成した状況から始めます。

以下の画面が表示されたら、上部にある「AT32UC3A3256」というタブをクリックしてください。

「Microchip Studio」 - 1


すると、以下の表示に切り替わりますので、すかさず左のリストから「Tool」をクリックしてください。

「Microchip Studio」 - 2


以下のような画面に切り替わります。

Selected debugger/programmer」のコンボボックスに接続中の「Atmel-ICE」がID番号付きで表示されていますか?

(「J41800113804」というIDは私のですね。)

表示されていない場合は、コンボボックスをクリックして、あなたの「Atmel-ICE」(「J41800113804」以外のもの)を選択してください。

加えて「Interface」は「JTAG」のままで結構です。

(ていうか、それ以外選べないはず。)

「Microchip Studio」 - 3


この設定を保存しましょう。

画面上部の保存アイコンをクリックしてください。

「Microchip Studio」 - 4


次に、プログラムのビルドと実行を行います。

画面上部の「」ボタンをクリックします。

「Microchip Studio」 - 5


しばらくすると、立ち上げておいたターミナルに以下のような表示が出ていると思います。

TOPPERS/ASPカーネルとそのサンプルプログラムの転送と実行に成功です。

TeraTermの表示


ブレークポイントを試してみましょう。

動作中のプログラムを停止します。

画面上部の「」ボタンをクリックします。

「Microchip Studio」 - 6


ブレークポイントを仕掛けましょう。

画面右の「Solution Explorer」のソースコードリストの中から「sample1.c」をダブルクリックし、ソースコードを表示します。

このソースコードの丁度中盤くらい、メインタスクの始めに仕掛けましょうか。

ブレークポイントは、ソースコードビューの左端をクリックすると赤丸が表示され、セットされていることを表します。

仮に、これを再びクリックするとブレークポイントが解除され赤丸も消えます。

「Microchip Studio」 - 7


では、ブレークポイントを仕掛けた状態で、プログラムを再び実行してみます。

上手く引っかかってくれるでしょうか…。

「Microchip Studio」 - 8


以下のようにプログラムが停止すれば成功です!

ここからは、「F10」キーでステップオーバー、「F11」キーでステップインなど、おなじみの操作が使用できます。

因みに、ステップオーバーやステップインなどを行っている時に命令が飛んでしまったり前後したりする場合は、最適化のせいです。

デバッグ時は、このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトのデバッグ)の「サンプルプログラムのデバッグ」の項目を参考に最適化を解除しましょう。

「Microchip Studio」 - 9


ソースコードのコピーやら、複数のIDEの操作やら、AVR32版は少々複雑でしたね…。

お疲れ様でした!!

さて、次回はサンプルプログラムの動きの説明や、AVR32版カーネルの詳細な情報や注意事項などを書いていきます。


MLAA License

 名称:「MLAAライセンス」(MLAA) タイプ: ・コピーレフト…× ・ライセンス文の掲示…〇(ソースコード頒布のみ) ・コピーライト(著作権)…〇(ソースコード頒布のみ) ・その他…〇(バイナリ頒布のみ) 原文: Copyright: 2010 Jorge Jimenez ...