Keil MDK-ARM v5.00 (2)2013年11月30日 10時15分54秒

Device Database
今回からデバイスファイルの一部がパックして供給されている。
そのパックされた部分の device database が少し変わった。
緑色で表示されていて Update も Remove もできない。
さらに、ディレクトリの指定が $$Device:(device name)$ となったと同時に SFILE の指定がなくなったのだ。
調べてみると
C:\Keil\ARM\Pack\.Web\Keil.(Device Series)_DFP.pdsc
という名前のファイルに登録内容が記述されている。
今後、C:\Keil\UV4\UV4.cdb はなくなるのかもしれない。


今のところ従来のデバイスファイルも使えるのでパーソナルデバイスの追加もできるが、新しいデバイスファイルは追加・修正が難しそうだ。

この際なので Kpit の GNUARM-RZ も登録して使ってみよう。
GNU-Tool-Prefix:arm-rz-eabi-
GNU-Tool-Folder:C:\Program Files\KPIT\GNUARM-RZv13.01-EABI\arm-rz-eabi\arm-rz-eabi\

問題なく使える~♪



参照:
 Software Pack Concept
 Pack Description (*.PDSC) Format

Keil MDK-ARM v5.00 (1)2013年11月25日 20時18分55秒

µVision5
しばらく目を離している間に 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 と同等になるらしい。
今の所めんどくさいだけのような気がする。

KPIT GNUARM-RZ2013年08月19日 21時56分14秒

KPIT から ARM のコンパイラががそろそろ出てきそうだ。
名前は 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

フリーの ARM 開発環境 (6)2013年07月20日 11時48分07秒

The free IDE for embedded programming!
フリーの ARM 開発環境 (1) で紹介したが情報が古くなってしまったのでもう一度掲載しておこう。
というのは、最近 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秒

LPC800 Mini Kit USART API ROM Example
LPCOpen platform は下記のボードをすぐ使うためのライブラリのようだ。
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秒

lib_board_nxp_mini-kit_810.a
まずは 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 (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

system_LPCxxxx2013年07月14日 15時46分21秒

system_LPC8xx.c の不具合が分かってそれはそれでよかったのだが、何をベースにしたのか気になった。
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 Analog Output Frequency を修正
それにしても 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 (14) Watchdog Oscillator (1)2013年07月12日 22時35分31秒

Watchdog Oscillator を使う
今回は 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