メディア
連載
» 2021年09月02日 10時00分 公開

HAL(ハードウェア抽象化レイヤー)って何?Q&Aで学ぶマイコン講座(64)(2/3 ページ)

[STマイクロエレクトロニクス,EDN Japan]

HAL(ハードウェア抽象化レイヤー)とは?

 HALとは、マイコンのプログラムを階層化する際に、上位層のプログラムから周辺機能などのハードウェアを抽象化する手法です。マイコンだけでなく、一般的なPCやスマートフォンでも使われています。

 主にプログラムの移植性を上げるために使用されますが、記述から設定内容を簡単に読み取れるのも特長です。

 もちろん、レジスタに直接書き込んで周辺機能を設定しても良いのですが、HALを利用すると設定内容を読み取りやすくなるので、プログラムの開発効率が上がり、間違いも防止できます。

レジスタ直接書き込みとHALの比較

 直接レジスタに値を書き込む記述は、俗に「レジスタ直たたき」「レジスタ直書き」などと呼ばれています。本記事では「レジスタ直たたき」と称します。

 STM32F4シリーズ*3)を例に、PA5を反転するプログラムでレジスタ直たたきとHALの比較をしてみます。

*3)https://www.stmcu.jp/stm32/stm32f4/

 レジスタ直たたきでプログラムを作るには、マニュアルのレジスタの説明に従って各ビットの役割をチェックし、変更する必要があるのか、あるとしたらどのような設定にするかなどを確認する必要があります。PA5を反転させるプログラムを想定した場合、チェックしなければならないレジスタは以下の通りです。

<汎用IOポート制御レジスタ>

 各汎用IOには、32ビットメモリマップド制御レジスタが4つあります。

1.GPIOx_MODER:I/O方向(入力、出力、代替機能、アナログ)を選択するために使用されます。

2.GPIOx_OTYPER:出力タイプ(プッシュプルまたはオープンドレイン)を選択するために使用されます。

3.GPIOx_OSPEEDR:速度を選択するために使用されます。

4.GPIOx_PUPDR:プルアップ抵抗/プルダウン抵抗を選択するために使用されます。

<汎用IOポートデータレジスタ>

 汎用IOの入出力データ関連のレジスタは、以下の2つです。

5.GPIOx_IDR:汎用IOから入力されるデータが入ります

6.GPIOx_ODR:汎用IOから出力するデータが入ります。

<マイコン全体の制御レジスタ>

 マイコン全体を制御するためのレジスタにも設定が必要です。特定の機能に特化したものではなく、マイコン全体の設定を行うレジスタです。

7.RCC_AHB1ENR:マイコン起動直後のPA5起動に使用します。(起動直後は停止状態(低消費電力モード)であるため)

 チェックしなければならないレジスタの例として、図2にリファレンスマニュアルから引用したRCC_AHB1ENRの説明を示します。RCC_AHB1ENRは、PA5などの汎用IO以外のDMAやUSB OTGなどの制御にも使われます。

図2:RCC AHB1ペリフェラルクロック有効レジスタ(RCC_AHB1ENR)
STM32F405/415リファレンスマニュアル(RM0090)から抜粋

 マイコンの起動直後は、PA5は停止状態なので、起動する必要があります。PA5を起動するには、汎用IOのAを有効にするLSBのGPIOAENビットを「1」に設定します。具体的な操作としてはRCC_AHB1ENRに”0000 0000 0000 0000 0000 0000 0000 0001”(2進数)を書き込みます。

 レジスタ直たたきの場合、次のようになります。

RCC_AHB1ENR = 0x00000001;

 これをHALで記述すると、次のようになります。

__GPIOA_CLK_ENABLE();

 この2つを見比べると、レジスタ直たたきでは直接「汎用IOのAの有効化」を読み取ることができませんが、HALでは「GPIOA_CLK」と「ENABLE」の記述から、“GPIOA”から「汎用IOのA」を、“ENABLE”から「有効化」を読み取ることができます。ここでは、ハードウェアのレジスタが抽象化されており、見えていません。

 レジスタ直たたきの場合は、先ほどリストアップした1〜6のレジスタでも、同じようにマニュアルのレジスタの説明に従って各ビットをチェックし、適切な値を設定する必要があります。図3に、HALとレジスタ直たたきの記述の比較を示します。左側がHALの記述で、右側にHALの機能説明とそれに対応するレジスタ直たたきの記述を記載しています。

図3:HALとレジスタ直たたきの比較(各レジスタの設定)

 ここに示されたレジスタ以外は初期値で使用するため、設定は不要です。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.