ARMコアマイコン利用メリット検証の2回目は、テンプレート開発で気がついたCortex-M0+とM0の差分を示します。
GPIOセット/クリアレジスタの有無
32ビットマイコンのCortex-M0/M0+は、GPIOレジスタに対して、ビット単位のセット/クリア処理が必要です。レジスタのビット位置が、IOピンの操作に対応しており、ピン単位の入出力方向や初期値設定を行うからです。
後発のCortex-M0+のLPC820には、GPIOポートセットレジスタ:SET0、クリアレジスタ:CLR0、トグルレジスタ:NOT0が追加されました。これらは、先に開発されたCortex-M0のLPC1114にはありません。
これら追加レジスタを使うと、特定ビットを変更するビット演算時に、ソフト記述が簡単です。例を示します。
ARMマイコン | Cortex-M0+ / LPC820 | Cortex-M0 / LPC1114 |
ビット演算例 | ||
説明 | ビットクリア、セットともにビット演算子「|=」を使う | ビットクリア時は、演算子「&=~」、ビットセット時は、演算子「|=」を使う |
このように、LPC820は、同じオペランド「|=」を使って、ビット単位のセット/クリア/トグルを表現できます。一方、LPC1114は、セット時は「|=」、クリア時は、「&=~」を使い分ける必要があります。
これらレジスタは、Cortex-M0+の特徴の1つ、「Single-cycle fast I/O access port」の実現手段かもしれませんが、ここでは、ソフト記述の容易さに着目して差分を説明しました。
I2C APIの差
これは、前回記事に記載したように、LPCOpen版数の差に起因していると思いますので、簡単に現状での差分を示します。
ARMマイコン | Cortex-M0+ / LPC820 | Cortex-M0 / LPC1114 |
I2C APIマスタライト例 | |
|
主観評価
販売中のテンプレートで使った差分を示しました。これ以外はそのまま使えるので、差分がデメリットになるほど労力がいらないこと、後発マイコンCortex-M0+には、ソフト記述が容易になるようなレジスタが追加されたことがお判りになったと思います。
つまり、GPIOの場合、Cortex-M0からM0+への移植:ポーティングは、LPC1114でポート番号が0~3あったものが、LPC820では0のみになったことに注意すれば、殆どそのまま使えます。但し、新たに追加されたGPIOセット/クリア/トグルレジスタを活用すれば、より簡単にソフトが記述できます。LPC8xxテンプレートも、これらレジスタを活用しています。
新しいCortex-M0+マイコンほど、よりソフト開発が容易なっていると言えるでしょう。