2枚入り!組み合わせ自在!超小型ARMマイコン基板
トランジスタ技術 増刊号に「組み合わせ自在!超小型ARMマイコン基板」がというものがあって、LPC1114Fのマイコン基板が2枚付録として付いてきます。
同誌は、LPCXpresso IDEを使って開発することを前提に記されているのですが、LPCXpresso IDEはWindowsとLinuxにしか対応していません。
が、私の手元のマシンはMac OS X 10.7 (Lion)ですので、こいつでなんとかしたいものです。ということで、手元のLionマシンに開発環境を構築したので、その手順などをメモしときます。
ちなみに、この手順は2011年12月24日時点で最新版で揃えてます。
MacPortsでインストールしようと思ったのですが、どうもサクッとビルドできなかったので、別の方法を当たりました。
そこで、YAGARTO (Yet another GNU ARM toolchain) というものを見つけたので、これで構築しました。
YAGARTOのWebサイトの”YAGARTO GNU ARM toolchain”をダウンロードします。
ディスクイメージをマウントし、入ってる yagarto-4.6.2.app をディスクの展開したい場所にコピーします。(私はホームディレクトリにしました。)
ダブルクリックすると展開され、”yagarto-4.6.2”というディレクトリができます。
パスを通すために、.bashrcに次の行を追加し、source .bashrcします。
export PATH="$PATH:$HOME/yagarto-4.6.2/bin" export PATH="$PATH:$HOME/yagarto-4.6.2/tools"
ビルドしたhexファイルをMARYに転送するツール、lpc21ispはMacPortsで放り込みました。
$ sudo port install lpc21isp
とするだけです。
MARY基板にはCP2104というUSBシリアル変換ICが搭載されています。これのドライバは、Silicon Labs社のWebサイトからダウンロードできます。
CP210x USB to UART Bridge VCP Drivers こちらのページの、”Download for Macintosh OSX (v2.9)“の下、”VCP Driver Kit”からダウンロードできます。
CQ出版が配布しているサンプルコードをWebサイトからダウンロードしてきます。
CQ.zipというファイルですが、ここに置いてありました。
こいつのMakefileは、なにかとWindowsになってます。
ですので相対パスにしてガシガシ書き換えましょう。
PROG01_COLOR_LEDを書き換えたときのdiffはこちら。
要は、PROG01_COLOR_LEDの下のmakefile, lpc1114_Debug_lib.ld, src/subdir.mk と
/CMSISv1p30_LPC11xxのsrc/subdir.mkを書き換えました。
diff -ur CQ.orig/LPC1114/workspace/CMSISv1p30_LPC11xx/Debug/src/subdir.mk CQ.new/LPC1114/workspace/CMSISv1p30_LPC11xx/Debug/src/subdir.mk --- CQ.orig/LPC1114/workspace/CMSISv1p30_LPC11xx/Debug/src/subdir.mk 2011-04-17 15:10:52.000000000 +0900 +++ CQ.new/LPC1114/workspace/CMSISv1p30_LPC11xx/Debug/src/subdir.mk 2011-12-24 22:34:57.000000000 +0900 @@ -20,7 +20,7 @@ src/%.o: ../src/%.c @echo 'Building file: $<' @echo 'Invoking: MCU C Compiler' - arm-none-eabi-gcc -DDEBUG -D__CODE_RED -D__REDLIB__ -I"C:¥CQ¥LPC1114¥workspace¥CMSISv1p30_LPC11xx¥inc" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -mcpu=cortex-m0 -mthumb -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" + arm-none-eabi-gcc -DDEBUG -D__CODE_RED -D__REDLIB__ -I../../CMSISv1p30_LPC11xx/inc -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -mcpu=cortex-m0 -mthumb -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" @echo 'Finished building: $<' @echo ' ' diff -ur CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/makefile CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/makefile --- CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/makefile 2011-04-17 15:11:02.000000000 +0900 +++ CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/makefile 2011-12-24 22:32:05.000000000 +0900 @@ -29,7 +29,7 @@ LPC1114.axf: $(OBJS) $(USER_OBJS) @echo 'Building target: $@' @echo 'Invoking: MCU Linker' - arm-none-eabi-gcc -nostdlib -L"C:¥CQ¥LPC1114¥workspace¥CMSISv1p30_LPC11xx¥Debug" -Xlinker -Map=LPC1114.map -Xlinker --gc-sections -mcpu=cortex-m0 -mthumb -T "lpc1114_Debug.ld" -o"LPC1114.axf" $(OBJS) $(USER_OBJS) $(LIBS) + arm-none-eabi-gcc -nostdlib -L../../CMSISv1p30_LPC11xx/Debug -Xlinker -Map=LPC1114.map -Xlinker --gc-sections -mcpu=cortex-m0 -mthumb -T "lpc1114_Debug.ld" -o"LPC1114.axf" $(OBJS) $(USER_OBJS) $(LIBS) @echo 'Finished building target: $@' @echo ' ' $(MAKE) --no-print-directory post-build diff -ur CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/src/subdir.mk CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/src/subdir.mk --- CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/src/subdir.mk 2011-04-17 15:11:02.000000000 +0900 +++ CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/src/subdir.mk 2011-12-24 22:30:07.000000000 +0900 @@ -77,7 +77,7 @@ src/%.o: ../src/%.c @echo 'Building file: $<' @echo 'Invoking: MCU C Compiler' - arm-none-eabi-gcc -D__USE_CMSIS=CMSISv1p30_LPC11xx -DDEBUG -D__CODE_RED -D__NEWLIB__ -I"C:¥CQ¥LPC1114¥workspace¥CMSISv1p30_LPC11xx¥inc" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -mcpu=cortex-m0 -mthumb -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" + arm-none-eabi-gcc -D__USE_CMSIS=CMSISv1p30_LPC11xx -DDEBUG -D__CODE_RED -D__NEWLIB__ -I../../CMSISv1p30_LPC11xx/inc -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -mcpu=cortex-m0 -mthumb -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" @echo 'Finished building: $<' @echo ' ' diff -ur CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/lpc1114_Debug_lib.ld CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/lpc1114_Debug_lib.ld --- CQ.orig/LPC1114/workspace/PROG01_COLOR_LED/Debug/lpc1114_Debug_lib.ld 2011-04-17 15:11:02.000000000 +0900 +++ CQ.new/LPC1114/workspace/PROG01_COLOR_LED/Debug/lpc1114_Debug_lib.ld 2011-12-24 21:36:10.000000000 +0900 @@ -5,4 +5,5 @@ * (created from newlib_nohost_c.ld (LPCXpresso v3.6.2 [Build 279] [29/01/2011] ) on Sun Apr 17 15:11:01 JST 2011) */ -GROUP(libgcc.a libc.a libm.a libcr_newlib_nohost.a) +/* GROUP(libgcc.a libc.a libm.a libcr_newlib_nohost.a) */ +GROUP(libgcc.a libc.a libm.a)
修正したら、LPC1114/workspace/PROG01_COLOR_LED/Debugの下でmakeします。
するとLPC1114.hexのタイプスタンプが現在時刻になってるはず。
makeする前にmake cleanしたほうがいいかも。
書き込みは、ドライバのインストールが済んでいる状態で、
$ lpc21isp -control hogehoge.hex /dev/tty.SLAB_USBtoUART 115200 12000
というコマンドで行えます。
ただ、繋いでコマンドを打つだけじゃ、うまく転送ができません。
Synchronizing (ESC to abort)...
と”.”が順に表示されているときに、MARYのCN1の5か6ピンの3.3Vを、CN5の3ピンのPIO0_0とショートして3.3VをPIO0_0に加えてやります。
すると転送が開始されます。加える時間は0.5秒〜1秒といったところでしょうか。 (もちろん、自己責任でどうぞ)