ユーザ用ツール

サイト用ツール


mary:mac-compiler

トラ技増刊号のMARY基板を使ってみた。

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"

ISPツール

ビルドしたhexファイルをMARYに転送するツール、lpc21ispはMacPortsで放り込みました。

$ sudo port install lpc21isp

とするだけです。

CP2104のドライバ

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を書き換えました。

mary.diff
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秒といったところでしょうか。 (もちろん、自己責任でどうぞ)

mary/mac-compiler.txt · 最終更新: 2013/09/13 15:38 by ytsuboi