MyプログラムをどのCortex-M マイコンでも共通に動かすポイント

第3部
第
ご購入はこちら
8章
CPU コアもソフト構造も共通のご利益にあやかってみる
My プログラムをどの Cortex-M
マイコンでも共通に動かすポイント
石岡 之也
ユーザ・アプリケーション・プログラム
ユーザは
GPIO2をH→L
などと命令
CMSIS-CORE
ライブラリ
ARM社が
マイコン・
メーカに提供
ARM提供の標準ヘッダ・ライブラリ
Cortex-M0/0+/3/4/7用
ユーザはマイコ
ン・メーカから,
マイコンごとに
入手する
マイコンメーカ固有定義
66番ピンをH→Lに
ソフトウェア
ハードウェア
Cortex-Mコア
SysTick
タイマ
GPIO
UART
SPI
ADC
ペリフェラル
Cortex-Mマイコン
66番ピン(GPIO2)が
H→Lになる
図 1 CMSIS ソフトウェア規格の中でも特に重要な CMSIS-CORE
の移植のポイントを解説
第 7 章ではプログラム移植を簡単にする Cortex-M
用ソフトウェア・インターフェース規格 CMSIS の仕
組みを紹介しました.
かつて,CMSIS が提供される前の Cortex-M マイコ
ン間の移植は,マイコン・メーカから出されるデータ
シートに記されたメモリ・マップやレジスタのアドレ
スから,各自で自分たちが使用するデバイスのアドレ
スやビットのオフセット値などを手作業でマクロで定
義していました.
時 は 過 ぎ て,CMSIS 規 格 の 概 念 の 下 で CMSISCORE に対応したソースコードが提供されてからは,
Cortex-M マイコン間の移植がしやすくなりました.
以上の経緯から,Cortex-M 系マイコンの移植で最
初に行わなければならない「CMSIS-CORE」の移植例
のポイントを紹介します(図 1).
2016 年 4 月号
移植の要注意ポイント①…
ベクタ・テーブル
Cortex-M 系マイコンの起動直後にアクセスされる
のが,ベクタ・テーブルです.ベクタ・テーブルは
startup_Device.s ファイル内に置かれています
(図 2)
.
リスト 1 は,IAR EWARM 用のベクタ・テーブル
部分の抜粋です.sfe(CSTACK)が 0x00000000 番地
に配置され(リスト 1 の①)
,以降,4 バイトごとにハ
ンドラのアドレスが配置されます.
ARM から提供されるテンプレートでは Cortex-M
コ ア 固 有 の 16 個 分 が 記 述 さ れ, そ れ 以 降 は _IRQ
Handler で省略されていますが,実際のマイコン対
応の startup_Device.s では,使用するマイコン
が持つデバイスそれぞれのハンドラがベクタ・テーブ
ルへ列記されています.
● 基本 SysTick タイマ割り込みの例
ここでは Cortex-M 系マイコンが共通して持ち注 1,
プログラム作成時にベースとなる時間を生成する
SysTick タイマの割り込み(リスト 1 の②)の使い方を
説明します.
▶ SysTick_Handler の実処理を定義している箇
所はプログラムが暴走しない記述になっている
startup_Device.s のさらに後方へソース表示
を 進 め る と リ ス ト 2 の ③ の よ う に SysTick_
Handler の実処理を定義している箇所が現れます.
テンプレートでは,このままのコードを利用しても
プログラムが暴走しないよう各割り込み(例外)ハン
ドラは呼び出されると自身のアドレスへジャンプする
無限ループとなっています(リスト 2 の④)
.
注 1:Cortex-M0/M0+ でオプション扱いになっている SysTick
タイマが,実際には多くの M0/M0+ で採用されているの
で共通と記している.
93