Keil MDK-ARM v5.00 (1) ― 2013年11月25日 20時18分55秒
しばらく目を離している間に MDK-ARM は v5.00 になっていた。
サイズは小さくなって 300Mbytes 程度になっている。
しかし、Startup だとか include file 、SFD、Boards、Examples はなくなってしまった。
調べてみるとデフォルトで扱えるのは EFM32 XMCx000 LPC1800 LPC800 STM32xx のみで、これらも Pack された物を必要な分だけ Install する形をとっている。
サイズが大きくなりすぎたので過去の遺産をばっさり切り捨てたのだろうか?
ところで、従来の LPC1114 だとか MB9BF618T を扱うためにはどうすればよいのだろう?
MDK5 Software Packs には含まれてないのでほかを探してみる。
MDK Version 5 - Legacy Support に Legacy Support for Cortex-M Devices と Legacy Support for ARM7 & ARM9 があった。
この二つをインストールすることにより MDK-ARM v4.73 と同等になるらしい。
今の所めんどくさいだけのような気がする。
サイズは小さくなって 300Mbytes 程度になっている。
しかし、Startup だとか include file 、SFD、Boards、Examples はなくなってしまった。
調べてみるとデフォルトで扱えるのは EFM32 XMCx000 LPC1800 LPC800 STM32xx のみで、これらも Pack された物を必要な分だけ Install する形をとっている。
サイズが大きくなりすぎたので過去の遺産をばっさり切り捨てたのだろうか?
ところで、従来の LPC1114 だとか MB9BF618T を扱うためにはどうすればよいのだろう?
MDK5 Software Packs には含まれてないのでほかを探してみる。
MDK Version 5 - Legacy Support に Legacy Support for Cortex-M Devices と Legacy Support for ARM7 & ARM9 があった。
この二つをインストールすることにより MDK-ARM v4.73 と同等になるらしい。
今の所めんどくさいだけのような気がする。
KPIT GNUARM-RZ ― 2013年08月19日 21時56分14秒
KPIT から ARM のコンパイラががそろそろ出てきそうだ。
名前は GNUARM-RZ 。
HEW から使えればいいのだけどサポートする IDE は e²studio になるらしい。
残念だ。
特に変わった所はない。
名前は GNUARM-RZ 。
HEW から使えればいいのだけどサポートする IDE は e²studio になるらしい。
残念だ。
特に変わった所はない。
KPIT GNUARM-RZ ELF v13.01 toolchain is built using: Binutils 2.23.1 GCC 4.7.2 Newlib 2.0.0 GDB 7.5.1
e²studio ― 2013年08月18日 15時54分09秒
RenesasRulz を見ていて Renesas の e²studio を知った。
Eclipse ベースの IDE だ。KPIT Eclipse もあるから Eclipse が二つ存在することになる。
さて、Renesas には IDE がたくさんあるが、残念ながら全てのコンパイラをサポートしているものは無い。
結果、複数の IDE を導入しなければならなくなる。
少しでも IDE の数を減らすために e2studio もいいかな?と思ったが、これも以下の通り半端な感じだ。
参照:
e²studio
e² studio forum (English 表示)
Eclipse ベースの IDE だ。KPIT Eclipse もあるから Eclipse が二つ存在することになる。
さて、Renesas には IDE がたくさんあるが、残念ながら全てのコンパイラをサポートしているものは無い。
CubeSuite+ V2.01.01 Renesas V850, RX, RL78, 78K0R, 78K0 PM+ V6.32 Renesas V850, 78K0R, 78K0, 78K0S HEW V.4.09.01 Renesas SuperH, RX, R8C, M32R, M16C, H8SX, H8S, H8, 740 Families KPIT GNUSH, GNURX, GNUH8, GNUM16CM32C KPIT Eclipse v3.04.01 Renesas SuperH, RX, KPIT GNUSH, GNURX, GNUH8, GNUV850中でも HEW は多くをサポートしているが今後はアップデートの予定が無いらしい。
結果、複数の IDE を導入しなければならなくなる。
少しでも IDE の数を減らすために e2studio もいいかな?と思ったが、これも以下の通り半端な感じだ。
e²studio 2.1.0.5 Renesas SuperH, RX, KPIT GNUSH, GNURX, GNUV850, GNURL78, GMUARM-RZ IAR RX, RL78, V850 Green Hills V850使うかどうか分からないが、メモだけしておこう。
参照:
e²studio
e² studio forum (English 表示)
フリーの ARM 開発環境 (6) ― 2013年07月20日 11時48分07秒
フリーの ARM 開発環境 (1) で紹介したが情報が古くなってしまったのでもう一度掲載しておこう。
というのは、最近 YAGARTO を見ていて emIDE を知ったので書き加えたいと思ったのだ。
そして Raisonance の Ride7 + RKit-ARM も free でなくなってしまってからずいぶん時間がたった。
私はまだ使っているが、新たに手に入れようと思っても手に入らない。
手に入るものだけを列挙しよう。
そういえば Renesas Technology も ARM をリリースしたので Kpit もそのうち加わるかもしれない。
その gcc は (GNU Tools for ARM Embedded Processors) だ。そのうちプロジェクトを作って使い勝手を確かめてみよう。
というのは、最近 YAGARTO を見ていて emIDE を知ったので書き加えたいと思ったのだ。
そして Raisonance の Ride7 + RKit-ARM も free でなくなってしまってからずいぶん時間がたった。
私はまだ使っているが、新たに手に入れようと思っても手に入らない。
手に入るものだけを列挙しよう。
そういえば Renesas Technology も ARM をリリースしたので Kpit もそのうち加わるかもしれない。
Keil µVision + GCC Supported processors:ARM7/ARM9/Cortex-M0-M4 CooCox CoIDE + GCC Supported processors:Cortex-M0-M4 Atollic TrueSTUDIO Lite Supported processors:ARM7/ARM9/Cortex-M0-M4 32KB code-size limitation (8KB on Cortex™-M0 and Cortex-M1). Eclipse + GCC emIDE Supported processors:ARM7/ARM9/Cortex-M0-M4 Em::Blocks Supported processors:PIC18/PIC32/dsPIC/Cortex-M0-M3さて、emIDE と EmBlocks は TrueSTUDIO Lite と同じように gcc も含んでいる。
その gcc は (GNU Tools for ARM Embedded Processors) だ。そのうちプロジェクトを作って使い勝手を確かめてみよう。
LPC800 (18) API ROM driver (3) ― 2013年07月18日 21時51分54秒
LPCOpen platform は下記のボードをすぐ使うためのライブラリのようだ。
従って、今回のように LPC800 Mini Kit を使う場合などはボード情報を新たに作成しなければならない。
当然、CQ出版の TRZ1104A(LPC1114/301) を使う場合も同じだろう。
ドキュメントも一緒にダウンロードしていたので読んでみることにする。
と思ったが、ドキュメントの形式が html で、しかも量が半端ではない。
読む前に気持ちが萎えてしまった。
さて、問題の ROMapi は
Power profiles API function
I2C driver routines functions
UART driver routines function
があり、ヘッダーだけ読み込めば使えるようになっている。(と、思う)
まずは \lpcopen\applications\lpc8xx\examples\periph\periph_uart_rom のサンプルを使ってみよう。
コンパイルして、書き込み。
動いている。
さて、ここまで来ると ROMapi を使った物と LPC810 CodeBase を比較してみたいね。
参照:
LPCOpenプラットフォーム
LPCOpen Platform
環境: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
+ lpcopen_v1.03.zip
+ lpc21isp Version 1.92
+ KPIT Cummins GNU-Archive Editor v1.1
+ KPIT Cummins GNU-Map Viewer v1.0
NXP Xpresso LPC812 NXP Xpresso LPC11C24 NXP Xpresso LPC11U14 NXP Xpresso LPC1347 NXP Xpresso LPC1769 Embedded Artists LPC1788-DEV-KIT Embedded Artists LPC4088-DEV-KIT Hitex Evaluation Board LPC1850 Hitex Evaluation Board LPC4350 Keil MCB1857 Keil MCB4357 NGX LPC1830-Xplorer NGX LPC4330-Xplorer
従って、今回のように LPC800 Mini Kit を使う場合などはボード情報を新たに作成しなければならない。
当然、CQ出版の TRZ1104A(LPC1114/301) を使う場合も同じだろう。
ドキュメントも一緒にダウンロードしていたので読んでみることにする。
と思ったが、ドキュメントの形式が html で、しかも量が半端ではない。
読む前に気持ちが萎えてしまった。
さて、問題の ROMapi は
Power profiles API function
I2C driver routines functions
UART driver routines function
があり、ヘッダーだけ読み込めば使えるようになっている。(と、思う)
まずは \lpcopen\applications\lpc8xx\examples\periph\periph_uart_rom のサンプルを使ってみよう。
コンパイルして、書き込み。
動いている。
さて、ここまで来ると ROMapi を使った物と LPC810 CodeBase を比較してみたいね。
参照:
LPCOpenプラットフォーム
LPCOpen Platform
環境: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
+ lpcopen_v1.03.zip
+ lpc21isp Version 1.92
+ KPIT Cummins GNU-Archive Editor v1.1
+ KPIT Cummins GNU-Map Viewer v1.0
LPC800 (17) API ROM driver (2) ― 2013年07月17日 21時22分36秒
まずは LPCOpen platform を使ってみよう。
①最初にすることは LPC800 Mini-Kit のボード情報を作成すること。
lpc_boards_8xx と書かれているが実際は LPCXpresso LPC812 にカスタマイズされているので、この部分を新規作成する。
\lpcopen\software\lpc_core\lpc_board\boards_8xx\nxp_xpresso_812 の中身を
\lpcopen\software\lpc_core\lpc_board\boards_8xx\nxp_mini-kit_810 にコピーして修正だ。
②ライブラリを作成する。
\lpcopen\software\lpc_core\lpc_board\boards_8xx\nxp_mini-kit_810
\lpcopen\software\lpc_core\lpc_chip\chip_8xx
\lpcopen\software\lpc_core\lpc_ip
上記ディレクトリの中身を集めてライブラリ作成。(lib_board_nxp_mini-kit_810.a)
上のスクリーンショットがライブラリの中身だ
③startup と Linker script を用意する。
\lpcopen\applications\lpc8xx\startup_code の中に入れる。
以前用意したものでよいだろう。
④アプリケーションプログラム
\lpcopen\applications\lpc8xx\examples\periph\periph_blinky ここにあるものをそのまま使う。
そして、ライブラリとスタートアップとリンカースクリプト
blinky.c
startup_LPC8xxG++.s
LPC810_rom_gnu.ld
lib_board_nxp_mini-kit_810.a
これをコンパイルして出来上がり。
走らせて見ると LED が点滅する。
うむ。
よしよし。
あ、でもこれではまだ ROMapi 使ってないね。
参照:
LPCOpenプラットフォーム
LPCOpen Platform
環境: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
+ lpcopen_v1.03.zip
+ Flash Magic Version 7.50
+ KPIT Cummins GNU-Archive Editor v1.1
+ KPIT Cummins GNU-Map Viewer v1.0
①最初にすることは LPC800 Mini-Kit のボード情報を作成すること。
lpc_boards_8xx と書かれているが実際は LPCXpresso LPC812 にカスタマイズされているので、この部分を新規作成する。
\lpcopen\software\lpc_core\lpc_board\boards_8xx\nxp_xpresso_812 の中身を
\lpcopen\software\lpc_core\lpc_board\boards_8xx\nxp_mini-kit_810 にコピーして修正だ。
②ライブラリを作成する。
\lpcopen\software\lpc_core\lpc_board\boards_8xx\nxp_mini-kit_810
\lpcopen\software\lpc_core\lpc_chip\chip_8xx
\lpcopen\software\lpc_core\lpc_ip
上記ディレクトリの中身を集めてライブラリ作成。(lib_board_nxp_mini-kit_810.a)
上のスクリーンショットがライブラリの中身だ
③startup と Linker script を用意する。
\lpcopen\applications\lpc8xx\startup_code の中に入れる。
以前用意したものでよいだろう。
④アプリケーションプログラム
\lpcopen\applications\lpc8xx\examples\periph\periph_blinky ここにあるものをそのまま使う。
そして、ライブラリとスタートアップとリンカースクリプト
blinky.c
startup_LPC8xxG++.s
LPC810_rom_gnu.ld
lib_board_nxp_mini-kit_810.a
これをコンパイルして出来上がり。
走らせて見ると LED が点滅する。
うむ。
よしよし。
あ、でもこれではまだ ROMapi 使ってないね。
参照:
LPCOpenプラットフォーム
LPCOpen Platform
環境: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
+ lpcopen_v1.03.zip
+ Flash Magic Version 7.50
+ KPIT Cummins GNU-Archive Editor v1.1
+ KPIT Cummins GNU-Map Viewer v1.0
LPC800 (16) API ROM driver (1) ― 2013年07月15日 10時45分24秒
先日、少し触れたが LPC81x では ROMapi が使えるようなので調べてみることにする。
ROMapi と言えば、Luminary の LM3Sxxxx を思い出すが CMSIS との相性が悪かった。
調べていてすぐに出てきたのが LPCOpen Platform 。このライブラリ 2012 年にリリースされているのでかなり新しい物だ。
サポートしているデバイスは LPC8 LPC11 LPC13 LPC17 LPC18 LPC40 LPC43 となっている。(ついでに、LPC2x シリーズもサポートしてくれればいいのに...)
異なるデバイスでもライブラリを共通に使うのが目的らしい。mbed に似てる気がする。
で、問題の ROMapi は従来のライブラリではサポートしていなかったがこのライブラリからサポートを始めたようだ。
さっそくダウンロード。
でかいね。もちろん LPC8x 以外のライブラリも入っているからだけど。
サポートしているツールチェーンは IAR Keil LPCXpresso
参照:
LPCOpen Platform for NXP LPC Microcontrollers
LPCOpenを使う その1~LPCOpenのサポート状況の確認 & LPCXpresso LPC11U14プロジェクトのインポートとビルド~
LPCOpenを使う その2~ドキュメントを確認する:ライブラリ構成、Example内容/構成、ボード設定~
LPCOpen Platform
ROMapi と言えば、Luminary の LM3Sxxxx を思い出すが CMSIS との相性が悪かった。
調べていてすぐに出てきたのが LPCOpen Platform 。このライブラリ 2012 年にリリースされているのでかなり新しい物だ。
サポートしているデバイスは LPC8 LPC11 LPC13 LPC17 LPC18 LPC40 LPC43 となっている。(ついでに、LPC2x シリーズもサポートしてくれればいいのに...)
異なるデバイスでもライブラリを共通に使うのが目的らしい。mbed に似てる気がする。
で、問題の ROMapi は従来のライブラリではサポートしていなかったがこのライブラリからサポートを始めたようだ。
さっそくダウンロード。
でかいね。もちろん LPC8x 以外のライブラリも入っているからだけど。
サポートしているツールチェーンは IAR Keil LPCXpresso
参照:
LPCOpen Platform for NXP LPC Microcontrollers
LPCOpenを使う その1~LPCOpenのサポート状況の確認 & LPCXpresso LPC11U14プロジェクトのインポートとビルド~
LPCOpenを使う その2~ドキュメントを確認する:ライブラリ構成、Example内容/構成、ボード設定~
LPCOpen Platform
system_LPCxxxx ― 2013年07月14日 15時46分21秒
system_LPC8xx.c の不具合が分かってそれはそれでよかったのだが、何をベースにしたのか気になった。
ベースは EM77x か LPC12xx では無いかと思う。
というわけで system_LPC11xx.c と system_LPC13xx.c も修正が必要だ。
しかし、NXP も Keil もなぜ気がつかないんだ。
model watchdog oscillator analog output frequency EM77x 0.5 MHz to 3.4 MHz LPC11xx 0.6 MHz to 4.6 MHz LPC12xx 0.5 MHz to 3.4 MHz LPC13xx 0.6 MHz to 4.6 MHz LPC17xx なし
ベースは EM77x か LPC12xx では無いかと思う。
というわけで system_LPC11xx.c と system_LPC13xx.c も修正が必要だ。
しかし、NXP も Keil もなぜ気がつかないんだ。
LPC800 (15) Watchdog Oscillator (2) ― 2013年07月13日 13時57分36秒
それにしても Watchdog Oscillator を使うとシリアルがおかしくなるのは使い勝手が悪い。
何とかならないものかと思いドキュメントを調べてみることにする。
ドキュメントの中でまず目に付いたのが LPC800 USART API ROM driver routines 。
節約のためかROMが使えるようだ。
次に、LPC800 USART0/1/2 に目を通す。
特に Baud Rate and Clocking Generation のソースに Watchdog Oscillator を使ってはいけないという記述も無い。
さらに LPC800 Windowed Watchdog Timer (WWDT) と読み進む。
ここにも特に変わった記述は無い。
最後は Watchdog oscillator control register の FREQSEL 。
wdt_osc_clk は 9.3 kHz to 2.3 MHz と書いてある。
収穫らしいものは何もなかった。
またエディタに戻って system_LPC8xx.c を眺めていると wdt_osc_clk の計算が合わない。
どういうことかというと、ドキュメントには 9.3 kHz to 2.3 MHz と書いてあるのに、 system_LPC8xx.c の数字で計算すると 7.8 kHz から 1.7MHz になるのだ。
ドキュメント(UM10601.pdf Rev. 1.2) と system_LPC8xx.c を比べてみると明らかに数字が異なる。おそらく以前の system_LPCxxxx.c を流用したためこのようなことになってしまったのだろう。
ドキュメントに従って system_LPC8xx.c を修正。(修正する部分は3ブロックある)
やっとシリアルも動いた。
分かってみると単純なことだった。
少し満足して、そして脱力感いっぱいの今日この頃。
system_LPC8xx.c
環境: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 USART API ROM driver routines 。
節約のためかROMが使えるようだ。
次に、LPC800 USART0/1/2 に目を通す。
特に Baud Rate and Clocking Generation のソースに Watchdog Oscillator を使ってはいけないという記述も無い。
さらに LPC800 Windowed Watchdog Timer (WWDT) と読み進む。
ここにも特に変わった記述は無い。
最後は Watchdog oscillator control register の FREQSEL 。
wdt_osc_clk は 9.3 kHz to 2.3 MHz と書いてある。
収穫らしいものは何もなかった。
またエディタに戻って system_LPC8xx.c を眺めていると wdt_osc_clk の計算が合わない。
どういうことかというと、ドキュメントには 9.3 kHz to 2.3 MHz と書いてあるのに、 system_LPC8xx.c の数字で計算すると 7.8 kHz から 1.7MHz になるのだ。
ドキュメント(UM10601.pdf Rev. 1.2) と system_LPC8xx.c を比べてみると明らかに数字が異なる。おそらく以前の system_LPCxxxx.c を流用したためこのようなことになってしまったのだろう。
ドキュメントに従って system_LPC8xx.c を修正。(修正する部分は3ブロックある)
やっとシリアルも動いた。
分かってみると単純なことだった。
少し満足して、そして脱力感いっぱいの今日この頃。
system_LPC8xx.c
環境: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 (14) Watchdog Oscillator (1) ― 2013年07月12日 22時35分31秒
今回は Watchdog Oscillator を main clock として試してみる。
使い方は簡単だ。
system_LPC8xx.c の MAINCLKSEL を WDT Oscillator にして、FREQSEL を 3.4 MHz にする。
コンパイルして、書き込み、Reset 。
青LED が点灯したままだ。
ターミナルに文字出力も無い。
どうしたものかと思っていると青LED が一瞬消えた。
よく観察してみると、約100秒に一回 LED が消えるタイミングがある。
ソースを見ると、LED を点灯させた後シリアルに文字を出力している。
もしかすると文字出力にものすごく時間がかかっているのかもしれない。
ためしに、printf を削除してみると、LED は普通に点滅する。
どうやら Watchdog Oscillator を使うとシリアルがおかしくなるらしい。
環境: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
使い方は簡単だ。
system_LPC8xx.c の MAINCLKSEL を WDT Oscillator にして、FREQSEL を 3.4 MHz にする。
コンパイルして、書き込み、Reset 。
青LED が点灯したままだ。
ターミナルに文字出力も無い。
どうしたものかと思っていると青LED が一瞬消えた。
よく観察してみると、約100秒に一回 LED が消えるタイミングがある。
ソースを見ると、LED を点灯させた後シリアルに文字を出力している。
もしかすると文字出力にものすごく時間がかかっているのかもしれない。
ためしに、printf を削除してみると、LED は普通に点滅する。
どうやら Watchdog Oscillator を使うとシリアルがおかしくなるらしい。
環境: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
最近のコメント