2023年1月12日木曜日

TOPPERS/ASP - AVR32版 その4

前回からの続きです。

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


Atmel Software Framework (ASF)のコピー

前回作成した雛形プロジェクトのディレクトリと、「TOPPERS/ASP AVR32版」のソースツリーのディレクトリを同時に2つエクスプローラーで開いておきましょう。

記事通りに作業すると、雛形プロジェクトは以下のディレクトリに保存されているはずです。


C:\Users\<ユーザー名>\Documents\Atmel Studio\7.0\GccBoardProject1

雛形プロジェクトのディレクトリ - 1


同じく、TOPPERS/ASPのソースツリーは以下のディレクトリに保存されているはずです。

「asp_avr32_gcc」や「asp_avr32_gcc_master」を「asp_1.9.2」に改名した場合。


C:\cygwin64\home\<ユーザー名>\asp_1.9.2

TOPPERS/ASPソースツリーのディレクトリ - 1


さて、2つ開いたエクスプローラーでそれぞれ以下の場所を表示するようにします。

まず、雛形プロジェクトの方は、以下のディレクトリへ移動させます。


C:\Users\<ユーザー名>\Documents\Atmel Studio\7.0\GccBoardProject1\GccBoardProject1\src

雛形プロジェクトのディレクトリ - 2


次に、TOPPERS/ASPのソースツリーの方は、以下のディレクトリへ移動させます。


C:\cygwin64\home\<ユーザー名>\asp_1.9.2\target\at32uc3a3_xpld_gcc

TOPPERS/ASPソースツリーのディレクトリ - 2


雛形プロジェクトの方のディレクトリに注目!

以下の3つのディレクトリとヘッダーファイルを確認して下さい。


●ASF

●config

●asf.h

雛形プロジェクトのディレクトリ - 3


この3つを開いてあるもう一方のエクスプローラー、TOPPERS/ASPのソースツリーの方にコピーします。

結果、TOPPERS/ASPのソースツリーの方は、以下のようになりましたか?

TOPPERS/ASPソースツリーのディレクトリ - 3


これで、ASF関連のソースコードの回収は完了です。

雛形プロジェクトの方のエクスプローラーは閉じちゃって構いません。


ヘッダーファイルのコピー

TOPPERS/ASPをビルドするにあたり、AVR32の様々な定義を記述したヘッダーファイルが必要となります。

それを一から自分で書いていたら大変ですので「Microchip Studio」からいただいちゃいましょう。

新たに、以下のパスを表示するエクスプローラーを開きましょう。


C:\Program Files (x86)\Atmel\Studio\7.0\packs\atmel

ヘッダーファイルのディレクトリ - 1


次に、TOPPERS/ASPのソースツリーの方のエクスプローラは、以下のディレクトリへ移動させます。


C:\cygwin64\home\<ユーザー名>\asp_1.9.2\arch\avr32uc3_gcc

TOPPERS/ASPソースツリーのディレクトリ - 4


ヘッダーファイルの方のディレクトリに注目!

以下のディレクトリを確認して下さい。


●UC3A_DFP

ヘッダーファイルのディレクトリ - 2


このディレクトリを開いてあるもう一方のエクスプローラー、TOPPERS/ASPのソースツリーの方にコピーします。

結果、TOPPERS/ASPのソースツリーの方は、以下のようになりましたか?

TOPPERS/ASPソースツリーのディレクトリ - 5


ここで、コピーしたヘッダーファイルのバージョンを調べておきます。

TOPPERS/ASPのソースツリーの方のエクスプローラーでコピーした「UC3A_DFP」ディレクトリをダブルクリックしてください。

そこで新たに現れたディレクトリの名前がヘッダーファイルのバージョンを示します。

以下の例では「1.0.80」となっていますね?

TOPPERS/ASPソースツリーのディレクトリ - 6


このバージョンは「Microchip Studio」をインストールした時期によって異なります。

そのため、TOPPERS/ASPのMakefileに対し、このバージョン通りのディレクトリ名を教えてあげないといけません。

それを行うには、以下のディレクトリにある「Makefile.prc」を修正する必要があります。


C:\cygwin64\home\<ユーザー名>\asp_1.9.2\arch\avr32uc3_gcc

TOPPERS/ASPソースツリーのディレクトリ - 7


そこで「Makefile.prc」をテキストエディターなどで開き、以下の部分を修正します。

15行目付近からの…

...
#
#  コンパイルオプション
#
INCLUDES := $(INCLUDES) \
		    -I$(SRCDIR)/arch/$(PRC)_$(TOOL)/UC3A_DFP/1.0.53/include/AT32UC3A3256
COPTS := $(COPTS) -mpart=uc3a3256 -DBOARD=UC3_A3_XPLAINED -std=gnu99
LDFLAGS := $(LDFLAGS)
...


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

...
#
#  コンパイルオプション
#
INCLUDES := $(INCLUDES) \
		    -I$(SRCDIR)/arch/$(PRC)_$(TOOL)/UC3A_DFP/1.0.80/include/AT32UC3A3256
COPTS := $(COPTS) -mpart=uc3a3256 -DBOARD=UC3_A3_XPLAINED -std=gnu99
LDFLAGS := $(LDFLAGS)
...


おわかりいただけただろうか?

「INCLUDES :=」の定義の2行目において「1.0.53」などとなっている古いバージョンの表記を今回使用する「1.0.80」に修正しています。

もちろん、前述した方法でヘッダーファイルのバージョンを調べた結果「1.0.80」でなかった場合は、それに合わせたバージョン番号をディレクトリ名として修正すれば良いです。

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

これで、ヘッダーファイルの回収は完了です。

ヘッダーファイルの方のエクスプローラーは閉じちゃって構いません。


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

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

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

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


C:\cygwin64\home\<ユーザー名>\asp_1.9.2\target\at32uc3a3_xpld_gcc\ASF\avr32\utils\startup

TOPPERS/ASPソースツリーのディレクトリ - 8


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


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

TOPPERS/ASPソースツリーのディレクトリ - 9


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

TOPPERS/ASPソースツリーのディレクトリ - 10

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

59行目付近からの…

...
  .global _stext
  .type _stext, @function
_stext:
  // Set initial stack pointer.
  lda.w   sp, _estack
...


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

...
  .global _stext
  .type _stext, @function
_stext:
  // Set initial stack pointer.
  //lda.w   sp, _estack         // コメントアウト!
  lda.w   r0, _kernel_istkpt    // 追記!
  ld.w    sp, r0[0]             // 追記!
...


もう一箇所!

103行面付近からの…

...
  // Start the show.
  lda.w   pc, main
...


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

...
  // Start the show.
  //lda.w   pc, main            // コメントアウト!
  lda.w   pc, sta_ker           // 追記!
...

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


リンカスクリプト「at32uc3a3_xpld.ld」のコピーと修正

ソースコードをビルドした後に、どのようにメモリに配置すればよいのか?をリンカに指示するためのリンカスクリプト「at32uc3a3_xpld.ld」を作成します。

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

元となるリンカスクリプトは、「link_uc3a3256.lds」という名前で以下のパスに配置されています。


C:\cygwin64\home\<ユーザー名>\asp_1.9.2\target\at32uc3a3_xpld_gcc\ASF\avr32\utils\linker_scripts\at32uc3a3\256\gcc

TOPPERS/ASPソースツリーのディレクトリ - 11


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


C:\cygwin64\home\<ユーザー名>\asp_1.9.2\target\at32uc3a3_xpld_gcc

TOPPERS/ASPソースツリーのディレクトリ - 12


ついでに、今コピーした「link_uc3a3256.lds」を「at32uc3a3_xpld.ld」に改名しておきましょう。

TOPPERS/ASPソースツリーのディレクトリ - 13

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

42行目付近からの…

...
OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32")

OUTPUT_ARCH(avr32:uc)

ENTRY(_start)
...


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

...
OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32")

OUTPUT_ARCH(avr32:uc)

/* ENTRY(_start) コメントアウト! */
STARTUP(start.o)                    /* 追記! */

PROVIDE (hardware_init_hook = 0) ;  /* 追記! */
PROVIDE (software_init_hook = 0) ;  /* 追記! */
PROVIDE (software_term_hook = 0) ;  /* 追記! */
...


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


クロック設定の変更

デフォルトのままではパフォーマンスが悪いのでCPUのクロック設定を変更します。

これを行うには、ASFのクロック設定ファイル「conf_clock.h」の内容を変更する必要があります。

この「conf_clock.h」は、以下のパスに配置されています。


C:\cygwin64\home\<ユーザー名>\asp_1.9.2\target\at32uc3a3_xpld_gcc\config

TOPPERS/ASPソースツリーのディレクトリ - 14


conf_clock.h」をテキストエディターなどで開き、以下の部分を修正します。

44行目付近からの…

...
#define CONFIG_SYSCLK_SOURCE          SYSCLK_SRC_RCSYS
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_OSC0
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_PLL0
...


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

...
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_RCSYS  // コメントアウト!
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_OSC0
#define CONFIG_SYSCLK_SOURCE          SYSCLK_SRC_PLL0	// アンコメント!
...


もう一箇所!

60行面付近からの…

...
//#define CONFIG_PLL0_SOURCE          PLL_SRC_OSC0
//#define CONFIG_PLL0_SOURCE          PLL_SRC_OSC1

/* Fpll0 = (Fclk * PLL_mul) / PLL_div */
//#define CONFIG_PLL0_MUL             (48000000UL / BOARD_OSC0_HZ)
//#define CONFIG_PLL0_DIV             1
...

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

...
#define CONFIG_PLL0_SOURCE            PLL_SRC_OSC0	            // アンコメント!
//#define CONFIG_PLL0_SOURCE          PLL_SRC_OSC1

/* Fpll0 = (Fclk * PLL_mul) / PLL_div */
//#define CONFIG_PLL0_MUL             (48000000UL / BOARD_OSC0_HZ)
#define CONFIG_PLL0_MUL               (84000000UL / BOARD_OSC0_HZ)  // 追記!
#define CONFIG_PLL0_DIV               1	                            // アンコメント!
...


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


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

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

お疲れ様でした~!!

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

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


$ cd asp_1.9.2\


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


$ cd OBJ\


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


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


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

Cygwinターミナル - 1


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


$ make depend


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

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

Cygwinターミナル - 2


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

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


$ make all


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

Cygwinターミナル - 3


本日はここまで!

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

コマンドラインではビルドが通るようになりましたので、次回はIDE(統合開発環境)で開発できるようにプロジェクトを作って、ターゲットへプログラムを転送し、デバッグを行うところまでやっていきましょう。


<続く>

0 件のコメント:

コメントを投稿

MSX DEVCON 3 その2

3月12日(日)の「 MSX DEVCON3 」行ってまいりました。 場所は、秋葉原UDX 6Fのカンファレンスルーム。 秋葉原に来る頻度も多いし、UDXも(特に地下駐車場)よく利用していますが、ここまで足を踏み入れたのは初めてだな…。 会場を入ると、前回の東京大学での「 MSX...