そういえばこのマイコンの記事放置していましたね。開発環境を整えるための情報があまり無いので使われる方は苦労したと思います。この記事では実際に使えるようになるまでの手順を示したいと思います。
Windows の方は Atmel Studio という素晴らしく良くできた IDE がありますのでそちらをお使いください。以下はLinux ユーザ、Mac ユーザ向けの苦労の記録です。。。
開発環境を得る
自分で CMSIS をダウンロードして、メモリマップに従ってヘッダファイルを作っても良いのですが、そんなことはせずに(したい)公式の環境をゲットします。
gccのインストール
まずその前に arm-none-eabi-gcc
をインストールしましょう。Mac で Homebrew が入っている方は tap
した後にインストールできます。
$ brew tap PX4/homebrew-px4
$ brew install gcc-arm-none-eabi
インストールできたかは -v
をつけて確認しましょう。
$ arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/local/Caskroom/gcc-arm-embedded/7-2017-q4-major/gcc-arm-none-eabi-7-2017-q4-major/bin/../lib/gcc/arm-none-eabi/7.2.1/lto-wrapper
Target: arm-none-eabi
Configured with: /Users/build/work/GCC-7-build/src/gcc/configure --target=arm-none-eabi --prefix=/Users/build/work/GCC-7-build/install-native --libexecdir=/Users/build/work/GCC-7-build/install-native/lib --infodir=/Users/build/work/GCC-7-build/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/Users/build/work/GCC-7-build/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/Users/build/work/GCC-7-build/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/Users/build/work/GCC-7-build/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib --with-headers=yes --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/Users/build/work/GCC-7-build/install-native/arm-none-eabi --build=x86_64-apple-darwin10 --host=x86_64-apple-darwin10 --with-gmp=/Users/build/work/GCC-7-build/build-native/host-libs/usr --with-mpfr=/Users/build/work/GCC-7-build/build-native/host-libs/usr --with-mpc=/Users/build/work/GCC-7-build/build-native/host-libs/usr --with-isl=/Users/build/work/GCC-7-build/build-native/host-libs/usr --with-libelf=/Users/build/work/GCC-7-build/build-native/host-libs/usr --with-host-libstdcxx='-static-libgcc -Wl,-lstdc++ -lm' --with-pkgversion='GNU Tools for Arm Embedded Processors 7-2017-q4-major' --with-multilib-list=rmprofile
Thread model: single
gcc version 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204] (GNU Tools for Arm Embedded Processors 7-2017-q4-major)
公式ライブラリをゲット
さて実際に入手しておきましょう。まず以下の Atmel Start にアクセスします。会員登録無しで使えるんです。いいですね〜〜〜〜
そこで CREATE NEW PROJECT をクリックしてプロジェクトを作りましょう。本当はこのプロジェクト内で設定初期化用のファイルやらミドルウェアやらを入れていくのですが、そんなことは僕の正義に反するのでやりません。
さて、続いてマイコンの型番を入力してサーチしましょう。秋月の SAMD21 を買った場合は画像のとおり打ち込めば出てきます。一番上が合致するので選択、CREATE NEW PROJECT しましょう。
んで、色々とロードするので待ち時間があります。ここから、某 STM32 CubeMX のように設定できるのですが、それを颯爽とスルーしてそのままコード生成とします。上側ツールバー的なところから EXPORT PROJECT を選択。Makefile (Standalone) チェックを入れて DOWNLOAD PACK をポチッと。すると atzip 形式なる謎のファイルがダウンロードされます。なんでしょうこれ。ということで正体を見てみます...
$ file ~/Downloads/My\ Project.atzip
/Users/yuki/Downloads/My Project.atzip: Zip archive data, at least v2.0 to extract
アッハイ, ただの zip ファイルですね。解凍解凍。中身はこんな感じです。
$ ls
AtmelStart.env_conf CMSIS/ atmel_start.c atmel_start_config.atstart config/ driver_init.h gcc/ hpl/ main.c
AtmelStart.gpdsc armcc/ atmel_start.h atmel_start_pins.h driver_init.c examples/ hal/ hri/ samd21a/
あれ、main.c
が裸で出ているのが癪ですねぇ...まあそれは後で解決するとして、この中の Makefile が Mac ユーザ仕様になっていない ので改変する必要があるのです。
Makefile を Mac に対応させる
編集していきましょう。場所は gcc/Makefile
です。とは言っても改変する箇所は1箇所なのですが。その場所はファイル冒頭です。ifeq ($(shell uname), Linux)
付近に追加です。
ifeq ($(shell uname), Linux)
MK_DIR = mkdir -p
endif
ifeq ($(shell uname), Darwin) # ADD
MK_DIR = mkdir -p
endif
main.c をフォルダに入れてあげる
プロジェクトルートで src/
を作って入れてあげましょう。
$ mkdir src
$ mv main.c src/
そうして Makefile を編集します。以下に列挙しておきます。
- 変数
SUB_DIRS
にsrc
を追加。 - 変数
OBJS
にあるmain.o
をsrc/main.o
にする。 - 変数
OBJS_AS_ARGS
にある"main.o"
を"src/main.o"
にする。 - 変数
DEPS_AS_ARGS
にある"main.d"
を"src/main.d"
にする。
以上でできます。ちょっと面倒ですが。あと他のファイルを追加する時は上のそれぞれにそれっぽく追加してやってください。面倒なので wildcard
とかの make
にある関数を使うのが良いんでしょうけれど、それさえも面倒なので僕は素直に追加しています。
さて、終わったら gcc
ディレクトリに移動して make
を実行しましょう!
$ make
...
"arm-none-eabi-objdump" -h -S "AtmelStart.elf" > "AtmelStart.lss"
"arm-none-eabi-size" "AtmelStart.elf"
text data bss dec hex filename
780 0 8224 9004 232c AtmelStart.elf
はい、ということでデバッグ情報を含んだ AtmelStart.elf
、そして素のプログラムのみが入っている AtmelStart.bin
が出来上がりました!
書き込み方法
SAMD21 ちゃんは UART ブートローダーがありません。確か他のシリーズではあるものがあったと思います。なので書き込み手段は SWD とします。ですので openocd を使って
$ openocd -f interface/cmsis-dap.cfg -f target/at91samdXX.cfg -c "program AtmelStart.elf; reset; exit"
とすれば良いのではないでしょうか。なお書き込み時の(最低限の)ピンを以下に示します。
No. | 名前 |
---|---|
5 | GNDANA |
6 | VDDANA |
17 | VDDIO |
45 | SWCLK |
46 | SWDIO |
以上、開発環境の入れ方と設定でした。
また気が向いたらレジスタの打ち方とかご説明します。それでは〜