LPC800 (13) Clock Test (1) ― 2013年07月11日 22時53分18秒
気を取り直してクロックの動作確認だ。
LPC8xx Clock and PLL Configuration Tool もあるし、µVision4 の Configuration Wizard もあるのでテストは簡単だ。そのほかの条件は
PLL input = 12(MHz) IRC Oscillator
位だろうか。
ここで、スペックをまとめておこう
1番から順番に試していく。
3番までは今の所問題ない。
4番36MHz、いける。
5番42MHz、これもokだ。
6番48MHz、動かない。
ここまでか?と思いつつ7番54MHz、動く。
さあ、8番60MHz、動かない。
54MHzが限界か?しかし、気になるのは6番。なぜ動かないんだ?
パラメータを変えて全てスペック内に収めてみる。
動かない。
M = 8 の時だけ例外的に動かないのだろうか?
User manual にも Errata sheet にも特に記述が無い。
というわけで動作最大 SystemClock は 54 MHz が確認できた。
しかし、もう少しやってみよう。
10番60MHz、動く。
え...動くんだ!
じゃあ11番72MHz、動くが一部文字化けする。
これは動かないだろう。12番84MHz、やっぱり動かない。
とうとう、60MHzでも動いた。72MHzは怪しいので動かなかったことにしておこう。それにしてもかなり余裕を見てあるんだ。
正確に言うと本当に動いているかどうかは分からない CLKOUT をオシロスコープででも観測するのが正しい判断の方法かもしれない。
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ LPC810 CodeBase
+ Flash Magic Version 7.50
LPC8xx Clock and PLL Configuration Tool もあるし、µVision4 の Configuration Wizard もあるのでテストは簡単だ。そのほかの条件は
PLL input = 12(MHz) IRC Oscillator
位だろうか。
No. MainCLK MSEL M PSEL P FCCO SYSAHB SystemCLK (MHz) binary binary (MHz) CLKDIV (MHz) 1 12 00000 1 11 8 192 1 12 2 24 00001 2 10 4 192 1 24 3 60 00100 5 01 2 240 2 30 4 72 00101 6 01 2 288 2 36 5 84 00110 7 00 1 168 2 42 6 96 00111 8 00 1 192 2 48 7 108 01000 9 00 1 216 2 54 8 120 01001 10 00 1 240 2 60確認する Systemclock は 12MHz から 60MHz を予定している。赤文字はスペックオーバーを意味する。
ここで、スペックをまとめておこう
PLL input 10 MHz to 25 MHz. MainCLK 100MHz 以下。 FCCO 156 MHz to 320 MHz. SystemClock 30MHz 以下。
1番から順番に試していく。
3番までは今の所問題ない。
4番36MHz、いける。
5番42MHz、これもokだ。
6番48MHz、動かない。
ここまでか?と思いつつ7番54MHz、動く。
さあ、8番60MHz、動かない。
54MHzが限界か?しかし、気になるのは6番。なぜ動かないんだ?
パラメータを変えて全てスペック内に収めてみる。
No. MainCLK MSEL M PSEL P FCCO SYSAHB SystemCLK (MHz) binary binary (MHz) CLKDIV (MHz) 9 96 00111 8 00 1 192 4 24
動かない。
M = 8 の時だけ例外的に動かないのだろうか?
User manual にも Errata sheet にも特に記述が無い。
というわけで動作最大 SystemClock は 54 MHz が確認できた。
しかし、もう少しやってみよう。
No. MainCLK MSEL M PSEL P FCCO SYSAHB SystemCLK (MHz) binary binary (MHz) CLKDIV (MHz) 10 60 00100 5 01 2 240 1 60 11 72 00101 6 01 2 288 1 72 12 84 00110 7 00 1 168 1 84
10番60MHz、動く。
え...動くんだ!
じゃあ11番72MHz、動くが一部文字化けする。
これは動かないだろう。12番84MHz、やっぱり動かない。
とうとう、60MHzでも動いた。72MHzは怪しいので動かなかったことにしておこう。それにしてもかなり余裕を見てあるんだ。
正確に言うと本当に動いているかどうかは分からない CLKOUT をオシロスコープででも観測するのが正しい判断の方法かもしれない。
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ LPC810 CodeBase
+ Flash Magic Version 7.50
LPC800 (12) mbed (5) ライブラリを使う 2 ― 2013年07月03日 22時35分43秒
うまくいかない時はまず資料集めだ。
あわよくばそのまま使える資料があるかもしれない。
Exporting to offline toolchains
Project to allow offline GCC compilation of code using mbed cloud libraries.
mbed library sources
GCCでmbedの実行ファイルをコンパイル
GCCでmbedの実行ファイルをコンパイル(2)
ARM: Clone of the mbed / 失敗!?
mbed-sdkをLPCXpresso LPC1769で使う(1) 2013
オフライン コンパイル
オフラインコンパイラ Keil uVision4 を使ってみる(その1)
オフラインコンパイラ Keil uVision4 を使ってみる(その2)
これらの資料を見ると、動きそうだ。いや、動かしている人がいる。
しかし、自分でやってみると Export したものはオフライン コンパイルできるが、mbed のソースを集めて最初から作りこもうとするとうまくいかない。
悔しいが mbed はしばらくペンディングだ。
参照:mbed
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ mbed SDK
+ lpc21isp Version 1.92
あわよくばそのまま使える資料があるかもしれない。
Exporting to offline toolchains
Project to allow offline GCC compilation of code using mbed cloud libraries.
mbed library sources
GCCでmbedの実行ファイルをコンパイル
GCCでmbedの実行ファイルをコンパイル(2)
ARM: Clone of the mbed / 失敗!?
mbed-sdkをLPCXpresso LPC1769で使う(1) 2013
オフライン コンパイル
オフラインコンパイラ Keil uVision4 を使ってみる(その1)
オフラインコンパイラ Keil uVision4 を使ってみる(その2)
これらの資料を見ると、動きそうだ。いや、動かしている人がいる。
しかし、自分でやってみると Export したものはオフライン コンパイルできるが、mbed のソースを集めて最初から作りこもうとするとうまくいかない。
悔しいが mbed はしばらくペンディングだ。
参照:mbed
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ mbed SDK
+ lpc21isp Version 1.92
LPC800 (11) mbed (4) ライブラリを使う 1 ― 2013年06月30日 16時52分23秒
mbed CMSIS の TARGET 部分も動いて、mbed ライブラリもできたとなると次は全体の動作確認だ。
まず main.c に読み込むヘッダーを mbed.h にしてみる。
../../api/platform.h(25): error: fatal error: cstddef: No such file or directory
エラーだ。ヘッダーファイルを見つけられない。
拡張子を変えて main.cpp にする。
./test_lpc810_out/test_lpc810.elf section `.text' will not fit in region `rom'
./test_lpc810_out/test_lpc810.elf section `.data' will not fit in region `ram'
region `rom' overflowed by 6592 bytes
region `ram' overflowed by 1192 bytes
sbrk.c:(.text+0x34): undefined reference to `__cs3_heap_limit'
容量オーバーした上に __cs3_heap_limit が見つからないらしい。
簡単にはいかないのね...
次に main.cpp を RealView で試す。
エラーは出ない。
書き込んでみると...
動かない。
踏んだり蹴ったりの結果だ。
さて、どうしよう?
参照:mbed
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ mbed SDK
+ lpc21isp Version 1.92
まず main.c に読み込むヘッダーを mbed.h にしてみる。
../../api/platform.h(25): error: fatal error: cstddef: No such file or directory
エラーだ。ヘッダーファイルを見つけられない。
拡張子を変えて main.cpp にする。
./test_lpc810_out/test_lpc810.elf section `.text' will not fit in region `rom'
./test_lpc810_out/test_lpc810.elf section `.data' will not fit in region `ram'
region `rom' overflowed by 6592 bytes
region `ram' overflowed by 1192 bytes
sbrk.c:(.text+0x34): undefined reference to `__cs3_heap_limit'
容量オーバーした上に __cs3_heap_limit が見つからないらしい。
簡単にはいかないのね...
次に main.cpp を RealView で試す。
エラーは出ない。
書き込んでみると...
動かない。
踏んだり蹴ったりの結果だ。
さて、どうしよう?
参照:mbed
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ mbed SDK
+ lpc21isp Version 1.92
LPC800 (10) mbed (3) ライブラリ作成 ― 2013年06月30日 10時06分10秒
別のターゲットで試す前に調べてみた。
答えは意外なことに身近な所にあった。
それは µVision4 の Help の中。
command-line option として
"--gnu”
を与えればよい。
というわけで、 RealView を使えば問題なくライブラリができてターゲットファイル群とリンクできることになった。
それはいいんだけど、今の所 RealView は使っていないのでやはり gcc で何とかしたい。
TOOLCHAIN_GCC_CS の中の sys.cpp を sys.c にしてみた。
region `ram' overflowed by 96 bytes
やはりエラーだ。
rom の容量オーバーはなくなり、ram もあと少しというところまできた。
次に、 sys.c をプロジェクトから外してみた。
エラーにはならない。
なくてもいい物なのか?
ついでにライブラリもリンクしてみる。(まだライブラリはコールしていない。)
問題ない。
書き込んでみる。(今回は lpc21isp を使った[lpc21isp.exe -wipe -hex !H com1 230400 12000])
動いている。
おお!とうとうここまできた。
あとはライブラリを使って動かしてみることだ。
参照:mbed
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ mbed SDK
+ lpc21isp Version 1.92
答えは意外なことに身近な所にあった。
それは µVision4 の Help の中。
command-line option として
"--gnu”
を与えればよい。
というわけで、 RealView を使えば問題なくライブラリができてターゲットファイル群とリンクできることになった。
それはいいんだけど、今の所 RealView は使っていないのでやはり gcc で何とかしたい。
TOOLCHAIN_GCC_CS の中の sys.cpp を sys.c にしてみた。
region `ram' overflowed by 96 bytes
やはりエラーだ。
rom の容量オーバーはなくなり、ram もあと少しというところまできた。
次に、 sys.c をプロジェクトから外してみた。
エラーにはならない。
なくてもいい物なのか?
ついでにライブラリもリンクしてみる。(まだライブラリはコールしていない。)
問題ない。
書き込んでみる。(今回は lpc21isp を使った[lpc21isp.exe -wipe -hex !H com1 230400 12000])
動いている。
おお!とうとうここまできた。
あとはライブラリを使って動かしてみることだ。
参照:mbed
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ mbed SDK
+ lpc21isp Version 1.92
LPC800 (9) mbed (2) libraries ― 2013年06月29日 19時08分05秒
今回はライブラリの作成をすることにする。
libraries\mbed\targets\hal\NXP\TARGET_LPC81X と
libraries\mbed\common
の中身をまとめて mbed というライブラリにする。
まず、 RealView でライブラリを作成してみる。
....
エラーの連続だ。
何がいけないのかよく分からない。
続いて GCC。
問題なくライブラリが出来上がる。
なかなか問題のある成り行きだ。
ターゲットファイルは RealView でうまくいって GCC で失敗している。
一方、ライブラリは RealView で失敗して GCC で成功している。
このままではどうにもならない。
一度 LPC810 を離れ、別のターゲットで試してみよう。
次に何とかなりそうなのが LPC1114 と LPC2388 だ。
今度は、 LPC1114 でやってみよう。
参照:mbed
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ mbed SDK
+ Flash Magic Version 7.50
libraries\mbed\targets\hal\NXP\TARGET_LPC81X と
libraries\mbed\common
の中身をまとめて mbed というライブラリにする。
まず、 RealView でライブラリを作成してみる。
....
エラーの連続だ。
何がいけないのかよく分からない。
続いて GCC。
問題なくライブラリが出来上がる。
なかなか問題のある成り行きだ。
ターゲットファイルは RealView でうまくいって GCC で失敗している。
一方、ライブラリは RealView で失敗して GCC で成功している。
このままではどうにもならない。
一度 LPC810 を離れ、別のターゲットで試してみよう。
次に何とかなりそうなのが LPC1114 と LPC2388 だ。
今度は、 LPC1114 でやってみよう。
参照:mbed
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ mbed SDK
+ Flash Magic Version 7.50
LPC800 (8) mbed (1) ― 2013年06月25日 23時04分57秒
LPC810 の資料を探していて mbed を見つけた。mbed は聞いた事があったが LPC812 がサポートされていると分かったので使ってみたくなった。
使ってみるといっても実際は公開されているソースを自分の環境でコンパイルして動かすということだ。
MPU が異なっても共通のライブラリが使えるようなので面白そうだ。
現在サポートされているターゲットは
LPC812 が動くなら LPC810 でも動くのじゃないかと思い、試してみた。
ソースはここ (mbed SDK) にあるが、必要な物がどれかよく分からない。
まずは、libraries\mbed\targets\cmsis\NXP\TARGET_LPC81X の中のファイル
あ、修正するのは
startup_LPC8xx.s
__initial_sp EQU 0x10001000 を 0x10000400 に変更
LPC812.sct 問題なく動く。いい感じだ。
次は GCC で試してみよう。
TARGET_LPC81X 内に TOOLCHAIN_GCC_CS を作成し LPC810.ld と startup_LPC81x.s と sys.cpp を用意する。
TARGET_LPC11UXX\TOOLCHAIN_GCC_CS の中身をコピーして修正すればよい。
コンパイルすると、エラーだ。
RealView は余裕ではいるのになぜ?
いろいろ試していて分かったことは sys.cpp をリンクすると一気にバイナリサイズが大きくなって容量をオーバーしてしまうことだ。
今の所解決方法が見つからない。
参照:mbed
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ mbed SDK
+ Flash Magic Version 7.50
使ってみるといっても実際は公開されているソースを自分の環境でコンパイルして動かすということだ。
MPU が異なっても共通のライブラリが使えるようなので面白そうだ。
現在サポートされているターゲットは
LPC2368 LPC1768 LPC11U24 LPC4088 LPC4330 LPC812 KL25Z STM32F407
LPC812 が動くなら LPC810 でも動くのじゃないかと思い、試してみた。
ソースはここ (mbed SDK) にあるが、必要な物がどれかよく分からない。
まずは、libraries\mbed\targets\cmsis\NXP\TARGET_LPC81X の中のファイル
startup_LPC8xx.s sys.cpp cmsis_nvic.c core_cm0.c system_LPC8xx.cと、前回使用した main.c を使って RealView でコンパイルリンクしてみる。
あ、修正するのは
startup_LPC8xx.s
__initial_sp EQU 0x10001000 を 0x10000400 に変更
LPC812.sct 問題なく動く。いい感じだ。
次は GCC で試してみよう。
TARGET_LPC81X 内に TOOLCHAIN_GCC_CS を作成し LPC810.ld と startup_LPC81x.s と sys.cpp を用意する。
TARGET_LPC11UXX\TOOLCHAIN_GCC_CS の中身をコピーして修正すればよい。
コンパイルすると、エラーだ。
./out/lpc810.elf section `.text' will not fit in region `rom' ./out/lpc810.elf section `.data' will not fit in region `ram' region `rom' overflowed by 6512 bytes region `ram' overflowed by 1384 bytesROM も RAM もサイズに入りきらないらしい。
RealView は余裕ではいるのになぜ?
いろいろ試していて分かったことは sys.cpp をリンクすると一気にバイナリサイズが大きくなって容量をオーバーしてしまうことだ。
今の所解決方法が見つからない。
参照:mbed
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ mbed SDK
+ Flash Magic Version 7.50
LPC800 (7) LED blink (4) Ride7 + Rkit-ARM ― 2013年06月22日 14時31分07秒
Ride7 + RKit-ARM でも動作を確認しておこう。
まずは startup
crt0_LPC81x.s
続いてリンカースクリプト
LPC81x_4K_1K_FLASH.ld
LPC81x_4K_1K_DEF.ld
LPC81x_COMMON.ld
sections_FLASH.ld
以下の必要なファイルは lpc8xx_template からもらってこよう。
system_LPC8xx.c
system_LPC8xx.h
core_cm0plus.h
core_cmFunc.h
core_cmInstr.h
LPC8xx.h
main.c (ポートの変更あり)
そしてコンパイル
書き込み
問題ないね。
ただし、スクリプトで LPC81x を追加していないとコンパイルオプションで target processor に cortex-m3 が選択されてしまうので注意しよう。
また、Sourcery CodeBench Lite 2012.09-63 では cortex-m0plus をサポートしていないので cortex-m0 を指定する。
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Ride7 version 7.30.10.0169
+ RKit-ARM version 1.30.10.0356
+ GCC Sourcery CodeBench Lite 2012.09-63
+ Flash Magic Version 7.50
まずは startup
crt0_LPC81x.s
続いてリンカースクリプト
LPC81x_4K_1K_FLASH.ld
LPC81x_4K_1K_DEF.ld
LPC81x_COMMON.ld
sections_FLASH.ld
以下の必要なファイルは lpc8xx_template からもらってこよう。
system_LPC8xx.c
system_LPC8xx.h
core_cm0plus.h
core_cmFunc.h
core_cmInstr.h
LPC8xx.h
main.c (ポートの変更あり)
そしてコンパイル
書き込み
問題ないね。
ただし、スクリプトで LPC81x を追加していないとコンパイルオプションで target processor に cortex-m3 が選択されてしまうので注意しよう。
また、Sourcery CodeBench Lite 2012.09-63 では cortex-m0plus をサポートしていないので cortex-m0 を指定する。
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Ride7 version 7.30.10.0169
+ RKit-ARM version 1.30.10.0356
+ GCC Sourcery CodeBench Lite 2012.09-63
+ Flash Magic Version 7.50
LPC800 (6) LED blink (3) Keil µVision4 + RealView ― 2013年06月16日 14時47分26秒

この際なので µVision4 + RealView でもプロジェクトを作ってみる。
Project メニューから New µVision Project を選択し 新規プロジェクトを作成する。
Target Options は、以下のように設定した。
ソースをプロジェクトに登録。
コンパイル ・・・・・・・・・ エラーだ。
.\outarm\LPC800_MDK-ARM.axf: Error: L6200E: Symbol printf multiply defined (by printfa.o and printf.o).
.\outarm\LPC800_MDK-ARM.axf: Error: L6200E: Symbol sprintf multiply defined (by printfa.o and printf.o).
Library Retarget File を書いてやれば、そのまま printf が使えるらしいが、ここでは関数名を変えてしまうことにする。
printf sprintf を tprintf tsprintf に変更する。
コンパイル ・・・・・・・・・ 問題ない
書き込み ・・・・・・・・・ 問題ない
え!
書き込める?
Command も Arguments も前回と同じだ。
異なるのはファイル名とディレクトリ名か?
ファイル名 LPC810_CodeBaseS.hex
ディレクトリ名 outG++
書き出してみるとディレクトリ名が怪しい outG++ を outGS に変更して書き込み。
ああ!書き込める。
というわけで Flash Magic のコマンドライン版ではディレクトリ名に + があるとだめなようだ。
ここまでの所をまとめておこう。
LPC810_LED_blink
ところで上記のケーブル(TTL-232R-3V3) LPC800 Mini Kit にぴったりだ。
似たような物でこんなの(USB to TTL Serial Cable - ID: 954)もある。
どちらもコンパクトでいいね。
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ LPC810 CodeBase
+ Flash Magic Version 7.50
Project メニューから New µVision Project を選択し 新規プロジェクトを作成する。
Target Options は、以下のように設定した。
Target R Use Cross-Module Optimization R Use MicroLIB R IROM1 Start 0x0 Size 0x1000 R IRAM1 Start 0x10000000 Size 0x400 Output Create Executable R Create HEX File Listing R Linker Listing R Memory Map C/C++ Define Include Path .\cmsis;.\src Misc Controls Asm Define NO_CRP Include Path Misc Controls Linker R Use Memory Layout from Target Dialog R Report 'might fail' Conditions as Errors Misc Controls Utilities Use External Tool for Flash Programming Command fm.exe Arguments DEVICE($DFN8,$X,0) ERASEUSED("!H",PROTECTISP) HEXFILE("!H",NOCHECKSUMS,NOFILL,PROTECTISP) COM(1,230400)
ソースをプロジェクトに登録。
コンパイル ・・・・・・・・・ エラーだ。
.\outarm\LPC800_MDK-ARM.axf: Error: L6200E: Symbol printf multiply defined (by printfa.o and printf.o).
.\outarm\LPC800_MDK-ARM.axf: Error: L6200E: Symbol sprintf multiply defined (by printfa.o and printf.o).
Library Retarget File を書いてやれば、そのまま printf が使えるらしいが、ここでは関数名を変えてしまうことにする。
printf sprintf を tprintf tsprintf に変更する。
コンパイル ・・・・・・・・・ 問題ない
書き込み ・・・・・・・・・ 問題ない
え!
書き込める?
Command も Arguments も前回と同じだ。
異なるのはファイル名とディレクトリ名か?
ファイル名 LPC810_CodeBaseS.hex
ディレクトリ名 outG++
書き出してみるとディレクトリ名が怪しい outG++ を outGS に変更して書き込み。
ああ!書き込める。
というわけで Flash Magic のコマンドライン版ではディレクトリ名に + があるとだめなようだ。
ここまでの所をまとめておこう。
LPC810_LED_blink
ところで上記のケーブル(TTL-232R-3V3) LPC800 Mini Kit にぴったりだ。
似たような物でこんなの(USB to TTL Serial Cable - ID: 954)もある。
どちらもコンパクトでいいね。
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ LPC810 CodeBase
+ Flash Magic Version 7.50
LPC800 (5) LED blink (2) Keil µVision4 + GCC ― 2013年06月13日 21時13分02秒
前回手に入れたサンプル (LPC810 CodeBase) をコンパイルして書き込んでみよう。
使う環境はいつもの通り
Keil MDK-ARM V4.53
GCC Sourcery CodeBench Lite 2012.09-63
さっそくプロジェクトを作る。
ソースをプロジェクトに登録
次にソースの修正
system_LPC8xx.c
System PLL Clock Source Select Register (SYSPLLCLKSEL) を System Oscillator から IRC Oscillator に変更(1を0)
コンパイル・・・・・・・・問題ない
書き込み・・・・・・・・・エラーだ!
ERROR: Invalid parameters for DEVICE directive: DEVICE(LPC810M021,12.0)
今回 Flash Magic を新しくしたのでそのせいかも知れない。
ドキュメントを読んでみると、パラメータに flashbank が増えている。
パラメータを追加して書き込み・・・・・・・・またエラーだ。
ERROR: Invalid parameters for DEVICE directive: DEVICE(LPC810M021,12.0,0)
何がいけないんだ。
GUI版では書き込みできるのでGUI版と同じデバイス名(LPC810M021FN8)を使ってみる。
書き込み・・・・・・・・・エラーだ!
ERROR: Invalid parameters for ERASEUSED directive: ERASEUSED(.\outG++\LPC810_CodeBaseS.HEX,PROTECTISP)
今度は異なる部分のパラメータだ。
分からない。
もうだめだ。
GUI版の Flash Magic で書き込むことにする。
書き込んで Reset 。
動いている。
特に問題は無いようだ。
さて、ここで動作 Clock を調べてみよう。system_LPC8xx.c の SYSPLLCTRL_Val が 0x41で SYSAHBCLKDIV_Val が 0x1なので Main CLK が 24MHz 、System clock も 24MHz ということになる。
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ LPC810 CodeBase
+ Flash Magic Version 7.50
使う環境はいつもの通り
Keil MDK-ARM V4.53
GCC Sourcery CodeBench Lite 2012.09-63
さっそくプロジェクトを作る。
Output Create Executable R Create HEX File Listing R Linker Listing R Memory Map CC Define __USE_CMSIS R Enable APCS (ARM Procedure Call Standard) R Support Calls between ARM and THUMB Instruction Set R Compile Thumb Code IncludePaths .\cmsis;.\src MiscControls -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections Assembler Define R Enable ARM/Thumb Interworking Include Paths MiscControls Linker R Do not use Standard System Startup Files R Do not use Standard System Libraries R Use Math Libraries linkerScriptFile .\linker\LPC810_rom_gnu.ld IncludeLibraries IncludePaths .\linker MiscControls -nostdlib -Xlinker --gc-sections Utilities Use External Tool for Flash Programming Command fm.exe Arguments DEVICE($D,$X) ERASEUSED("!H",PROTECTISP) HEXFILE("!H",NOCHECKSUMS,NOFILL,PROTECTISP) COM(1,230400)
ソースをプロジェクトに登録
main.c system_LPC8xx.c gpio.c mrt.c printf.c printf-retarget.c spi.c uart.c startup_LPC8xxG++.s
次にソースの修正
system_LPC8xx.c
System PLL Clock Source Select Register (SYSPLLCLKSEL) を System Oscillator から IRC Oscillator に変更(1を0)
コンパイル・・・・・・・・問題ない
書き込み・・・・・・・・・エラーだ!
ERROR: Invalid parameters for DEVICE directive: DEVICE(LPC810M021,12.0)
今回 Flash Magic を新しくしたのでそのせいかも知れない。
ドキュメントを読んでみると、パラメータに flashbank が増えている。
パラメータを追加して書き込み・・・・・・・・またエラーだ。
ERROR: Invalid parameters for DEVICE directive: DEVICE(LPC810M021,12.0,0)
何がいけないんだ。
GUI版では書き込みできるのでGUI版と同じデバイス名(LPC810M021FN8)を使ってみる。
書き込み・・・・・・・・・エラーだ!
ERROR: Invalid parameters for ERASEUSED directive: ERASEUSED(.\outG++\LPC810_CodeBaseS.HEX,PROTECTISP)
今度は異なる部分のパラメータだ。
分からない。
もうだめだ。
GUI版の Flash Magic で書き込むことにする。
書き込んで Reset 。
動いている。
特に問題は無いようだ。
さて、ここで動作 Clock を調べてみよう。system_LPC8xx.c の SYSPLLCTRL_Val が 0x41で SYSAHBCLKDIV_Val が 0x1なので Main CLK が 24MHz 、System clock も 24MHz ということになる。
環境:LPC800 Mini Kit (LPC810M021FN8)
+ Keil MDK-ARM V4.53
+ LPC800 Support for version 4.60 of Keil MDK-ARM
+ GCC Sourcery CodeBench Lite 2012.09-63
+ LPC810 CodeBase
+ Flash Magic Version 7.50
LPC800 (4) LED blink (1) ― 2013年06月12日 22時01分21秒
電源を入れる前に基板をチェックする。パターンが有るのに R1 が実装して無い。回路図を見るとピンヘッダーに出力する電圧は R1 が 3.3V で R2 が 5V だ。シリアルの変換基板は 3.3V で使いたいので R2 を取り除き R1 の場所に実装する。
恐る恐るUSB ケーブルだけ接続してみる。
青 LEDが点滅する。
プログラムが書き込んであるんだ!
よしよし。
次にRS232 変換基板を接続する。
Hello, LPC810! が連続して出力される。
なるほど、今のところ問題はない。
さて、前回 Startup を用意したが、ここでは出来合いのサンプルを使うことにする。
コードサンプルは LPC810 CodeBase 。
最初はプリビルドされた tools\LPC810_Blinky_0_2.hex を書き込んでみよう。
書き込みは Flash Magic を使う。 ISP モードにするために Reset と ISP のSW を同時に押す。Reset ・ ISP の順で SW を開放する。
これで ISP モードになっているはずなので書き込みスタート。
そして Reset 。
特に問題はない。ただ、実行してみると LED の点滅速度が遅い。
まあ、いいか。
参照:
LPC800-Mini - DIP8 LPC810ボード
LPC800 Mini-Kit (LPC810M021FN8)
LPC810 CodeBase
恐る恐るUSB ケーブルだけ接続してみる。
青 LEDが点滅する。
プログラムが書き込んであるんだ!
よしよし。
次にRS232 変換基板を接続する。
Hello, LPC810! が連続して出力される。
なるほど、今のところ問題はない。
さて、前回 Startup を用意したが、ここでは出来合いのサンプルを使うことにする。
コードサンプルは LPC810 CodeBase 。
最初はプリビルドされた tools\LPC810_Blinky_0_2.hex を書き込んでみよう。
書き込みは Flash Magic を使う。 ISP モードにするために Reset と ISP のSW を同時に押す。Reset ・ ISP の順で SW を開放する。
これで ISP モードになっているはずなので書き込みスタート。
そして Reset 。
特に問題はない。ただ、実行してみると LED の点滅速度が遅い。
まあ、いいか。
参照:
LPC800-Mini - DIP8 LPC810ボード
LPC800 Mini-Kit (LPC810M021FN8)
LPC810 CodeBase
最近のコメント