ARMマイコンの“ベアメタルLチカ”に挑戦「mbed」で始めるARMマイコン開発入門(11)(2/3 ページ)

» 2015年08月14日 07時00分 公開
[今岡通博MONOist]

ベアメタルプログラミング

 ベアメタル(bare metal)とは辞書的には「露出金属面」の意味です。仮想化コンピューティングの分野でもこの表現がよく使われるようですが、ここではマイコン系の場合に限って解釈しますと、オペレーティングシステムやフレームワークなどの中間層を介さないで、直接ハードウェアをたたく(周辺デバイスのレジスターをアクセスする)プログラミング手法だと思ってください。OSやフレームワークなどで塗装をしていない地金を直接たたくというイメージなのかもしれません。

 ベアメタルでプログラムを書くということは、mbedのクラスライブラリを使わないで周辺デバイスを動作させる必要があります。LPC1114に内蔵されているデバイスにはそれぞれ機能が決まったレジスタが内蔵されています。このレジスタにデータシートで定められた値を書き込むことで、そのデバイスを操作することができます。またそのレジスタの値を読み出すことでデバイスの状態を知ることができます。

 例えばあるGPIOピンを出力に設定し、そのピンの値を1(電源電圧に近い電圧を出力する状態)に設定することを考えてみましょう。

 まずそのGPIOピンを入力か出力に決めるレジスタに「出力」を設定する値を書き込みます。その次に出力する値を設定するレジスタに1を書き込みます。これにより指定したGPIOピンの出力を1にすることができます。そのレジスタはどこにあるのでしょうか。ブロックダイヤグラム内では赤枠で囲んだところにあります。

photo LPC1114のブロックダイヤグラム。赤線で囲んだところがGPIOを制御するレジスタ

 LPC1114の場合プログラムを書き込むフラッシュメモリやRAM、デバイスのレジスタはメモリ空間上にマッピングされています。下図がメモリマップです。

photo LPC1114のメモリマップ

 LPC1114は32ビットのアドレス空間を持っていますので、4Gbyteのメモリ空間にマッピング(配置)されています。GPIOにかかわるレジスタは0x5000 0000から配置されています。これらのレジスタをアクセスすることによりデバイスをコントロールするのです。mbedのクラスライブラリを利用すると、これらのデバイスをレジスタやアドレスを意識することなく使えるのです。

Copyright © ITmedia, Inc. All Rights Reserved.