MSPM0マイコン用のサンプルプログラムのビルド手順

超久しぶりにブログを書いてみる。

最初に断っておくと、私はまだ MSPM0マイコンのターゲットを何も持っていない。LaunchPadのひとつもあればいいけど持っていない。なので、以下は「開発環境でサンプルプログラムがビルドできました」という内容です。

TIが新しく発売を始めた、MSPM0マイコンは、今まで似た名前の、MSP430シリーズが独自の16bit CPUコアだったのに対して、ARM Cortex-M0+ CPUを内蔵したマイクロコントローラのシリーズだ。32bitになったのに、価格が安いのが特徴。 TIの人や代理店の話では、TIが自社工場で製造しているので価格のコントロールがしやすいのだそうだ。 (対するMSP430の方は、FRAMもあってプロセスの関係で自社工場に引き取るのはちょっとむずかしいのだとか。)

私はMSP430のプログラムをCCS (Code Composer Studio)を使ってコーディング、ビルド、ターゲットマイコンへの書き込みは経験しているので、MSPM0も同じようにできるだろうと思って試してみたらできなかった。
具体的には、CCSをインストールして (もちろんインストール時にMSPM0マイコンを使う選択をする)、FileメニューでNew→CCS Projectで新しいプロジェクトを作り、チップはMSPM0xxxxなど適当に選び、 Empty Project (with main.c) を選んで、空っぽに近い main.c のソースができたら、そのまま Build Project する。
これではエラーが出て、ビルドできなかった。

(ちなみに、MSP430だとこの手順でビルドの通るプロジェクトが作れる)

では、どうやればできるのか。
ここは素直に、まずは TIから用意されたサンプル・プログラムをそのままビルドしてみることにした。

まず CCSで、Getting Started の画面を出す。(起動直後には出ているが、表示されていなければ、メニューの View → Getting Statedで表示される)
Browse and Import Example を選ぶ。

すると、Create New Project の画面になるので、まずはターゲットボードか、デバイス (チップ)の型番を入れる。持ってないけれど LaunchPad の LP-MSPM0C1104を選んでみよう。途中までキー入力すると候補が出る。

ターゲットを選ぶと、その下に Choose a template that you would like… と出るので、下へスクロールしていって、
gpio_toggle_output というサンプルを選ぶ。名前からして、多分これがいわゆる 「Lチカ」だろう。



すると画面下に、Configure selected projectとでているが、ここで Compilerの欄はコンパイラを選択する必要がある。IARは、IAR Embedded workbenchを使う人用だと思うので、それ以外の、GCC か CCS-TI Arm Clangのどちらかにする。どちらを選んでもいい。
その後、右端の “CREATE”ボタンを押す。



デバイスは何か、とあらためて問われるので、MSPM0C1103を選ぶ。


この後であるが、

・MSPM0シリーズに必要な SDK などが、自動的にダウンロードされるなどの処理が始まる。
・そのあとで、サンプルプログラムの gpio_toggle_outputをダウンロードするかとダイアログが出るのでダウンロードを選ぶ。

ここまでやると、サンプルソースを含んだ、新しい Project ができあがる。gpio_toggle_output.c を見てみると、それらしい内容が書かれている。

メニューバーから Project → Build Project を選んでビルドしてみると、エラーも無く **** Build Finished **** がコンソールに出れば、無事、成功である。



さて、サンプルプログラムの場合はこれでよいとして、
自作プログラムをスクラッチで書きたい場合、空っぽのテンプレートをまず用意するには、どうすればいいのか? という疑問がわいてくる。

それについては、サンプルプログラムを選んだ画面で、上の方には
empty_mspm0xxxx という、空のプロジェクトのひな型が並んでいるリストがあるので、使用するターゲットデバイスのものを選んでプロジェクトを作れば、main() がほぼ空っぽのソースのプロジェクトが作れる。
この手順を踏んで、ソースの中身を書いていけばよさそうである。


観察していると気づくが、この empty project は “using DriverLib” と書かれている。
DriverLibは、MSP430のときにも提供されていた。ADCやタイマーやシリアルI/Oなど、色々な機能を利用するときに便利に使える関数群で、MSPM0でも同様の物であると推測される。

MSP430のときは、DriverLibを利用するとコンパイル後のコードサイズが大きくなってしまい、Flashメモリの少ないデバイスでは使いづらかった場合もあったが、MSPM0では利用するのが前提みたいな感じなのだろうか? (恐らくは利用しないやり方もあるのだと思うが、それは追々調べることにする)

という訳で、ここまでの解説が誰かのお役に立てば幸いです。