これは、PSoC Advent Calendar 2018の3日目に突っ込まれた記事です。
##ModusToolbox登場
PSoC 6 MCUの開発環境として、新しくModusToolboxという統合開発環境(IDE)が発表されました。といっても、この記事を書いている2018年12月3日時点では、一般公開されたわけではありません。現在はEarly Adapter Program (EAP)参加者だけにベータ版が公開されている段階です。この記事では、EAP番のModusToolboxを使って使い勝手を紹介します。
##やりたいこと
まず、何をするかといえば、やっぱりLチカでしょう。ここでは、PSoCの流儀に従って、ソフトウェアには極力仕事をさせない方法でLチカを実現します。回路図で描くとこんな感じでしょうか。
クロックをPWMで分周して、LEDを2Hzで点滅させます。
##使用するハードウェアはCY8CPROTO-063-BLE
本記事で使用する機材は、PSoC 6 BLE Prototyping Kitです。
この評価ボードでは、CYBLE-416045-02 EZ-BLE™ CREATOR MODULEモジュールが使用されているため、同モジュールを使ったアプリケーションのプロトタイプを作成するのに適しています。基板上に赤と緑の二つのLEDが搭載されているので、Lチカには十分です。
他の評価ボードと同様にプログラマとしてPSoC 5LPが搭載されています。この評価ボードの場合、デフォルトのファームウェアとしてKitProg2が書き込まれています。
##ModusToolboxを開く
それでは、ModusToolboxを開いてみましょう。その前にインストールをしなくてはなりませんが、インストール方法については、どなたかが書いてくれるでしょう。
ModusToolboxは、eclipseをベースとしたIDEです。そのため、作業場所としてWorkspaceを指定しなくてはなりません。ModusToolboxを開いたときに最初にあらわれるのが、Workspaceを指定するダイアログです。
ModusToolboxでは、複数のプロジェクトを作成してひとつのアプリケーションにまとめ上げるという方法でバイナリを作成します。そのため、アプリケーションごとにWorkspaceを作成した方が使いやすいようです。この記事でも、Lチカアプリケーションのために"C:\MTW\LChika"というWorkspaceを作成します。
LaunchをクリックするとIDE画面が開きます。
最初は、"Welcome"というタブが全面をおおっていますが、必要ないので閉じてしまいましょう。これで作業画面が出てきます。
##ターゲットとベースアプリケーションを指定する
次にアプリケーションを作成します。画面左下にある"Quick Panel"タブにある"New Application"をクリックします。
すると、"ModusToolbox IDE Application"というダイアログが開きます。
このダイアログでは最初にターゲットとなるハードウェアを指定します。本来であれば、上にある"Dev/Eval Kit"をクリックして評価ボードを選ぶべきなのですが、今回使用するCY8CPROTO-063-BLEは、ModusToolboxに登録されていません。そのため、下の"Custom Hardware"をクリックしモジュールを探すという手順になります。なんで、差別されるんかな。
リストからモジュールCYBLE-416045-02を選んだら、"Next"ボタンをクリックします。
次は、ベースになるアプリケーションを選択します。ModusToolboxでは、ベースになるアプリケーションから目的のアプリケーションに仕上げていくという手法を考えています。そのため、このステップで目的に一番近いアプリケーションを探します。
とは言っても、この記事では使い勝手を確認するのが目的ですから、何もしないアプリケーションである"EmptyPSoC6App"を選択します。また、"Name:"フィールドにはこれから作成するアプリケーションの名前を入れます。ここでは、"LChika"という名前にしました。
"Next"をクリックすると最終確認ダイアログに変化します。ここで、"Finish"をクリックしてしばらくすると、アプリケーションが作成されます。
左上の"Project Explorer"タブを見ると、作成されたアプリケーションには、5個のプロジェクトが存在するのがわかります。
##出力端子を設定する
PSoCでプロジェクト作成直後にやるのは、ハードウェアの設定です。
作成されたプロジェクトのうち、"LChika_config"には、"design.modus"という名前のファイルが有ります。
このファイルをクリックすると、ハードウェアを設定するための外部プログラムである"Device Configurator"が開きます。
設定を行うためのタブがいくつかあります。しばらくModusToolboxを使ってみた所、最初は"Pins"タブを開いて端子の設定をするのがよさそうです。
このアプリケーションでは、評価ボードの赤色LEDを点滅させるためにP6[3]を使用します。まず、P6[3]の隣にあるチェックボックスにチェックをいれて、端子の名前を記述します。ここでは、"Pin_LEDR"という名前をつけました。
次に画面右側の"Parameters"タブの設定を行います。
- "General: Drive Mode"を"Strong Drive, Input buffer off"に設定して、LEDを駆動できるようにします。
- "Terminals: Digital Output"を"TCPWM[0] 32-bit Counter 1 pwm_n"に設定して、PWM出力をこの端子から出力できるようにします。
PSoC 6 MCUでは、端子に割り当てられる機能がかなり制限されています。そのため、LEDが接続された端子に対して割り当て可能なPWM出力を選択するという順序で行った方が便利です。
##PWMを設定する
次は、PWMの設定です。さきほど"TCPWM[0] Counter 1"を設定した"Digital Output"の欄に鎖のアイコンが出てきました。
このアイコンをクリックすると、直接PWMの設定画面に飛ぶことができます。
端子の設定と同様にチェックボックスにチェックを入れて、名前を付けます。ここでは、"PWM_2Hz"としました。
次に画面右側の"Parameters"タブの設定を行います。
- "Period"の値を500000に設定します。まだ設定をしていませんが、このPWMには1MHzのクロックを使用する予定です。そのため、500,000分周して0.5sec周期のPWM出力を得ようとしています。
- "Compare"の値を250000に設定します。"Period"の半分の値に設定することによって、PWM出力のデューティー比は50%になります。
- "Clock Signal"を"8 bit Divider 0 clk"に設定します。上述のように1MHzのクロックを出力するためのクロック源を指定します。どのクロックも使用可能です。
また、"Clock Signal"の欄に鎖のアイコンが現れました。このアイコンをクリックして、今度はクロックの設定を行います。
##クロックを設定する
クロック設定タブでは、すでにチェックボックスにチェックが入っています。
名前を付けたら、画面右側の"Parameters"タブの設定を行います。
- "Divider"に72を設定する。
72MHzの"CLK_PERI"から1MHzのクロックを作成するので、"Divider"に72を設定します。"CLK_PERI"を変えたら、忘れずに"Divider"を設定し直さなくてはなりません。なんて不便なんだ。
以上で三つのブロックの設定と相互接続ができました。"Device Configurator"のメニューから"File→Save"を選択して"design.modus"を保存します。保存ができたら"Device Configurator"を"File→Exit"で終了させます。
##ソフトウェア
このアプリケーションでは、Cortex-M4側ですべての処理を行わせます。このため、"LChika_mainapp"プロジェクトの"main.c"ファイルにソフトウェアを書きます。
ソフトウェアと言っても、PWMを起動する処理だけです。以下のように3行書くだけでPWMが起動して分周を始めます。
int main(void)
{
/* Set up the device based on configurator selections */
init_cycfg_all();
__enable_irq();
Cy_TCPWM_PWM_Init(PWM_2Hz_HW, PWM_2Hz_NUM, &PWM_2Hz_config);
Cy_TCPWM_PWM_Enable(PWM_2Hz_HW, PWM_2Hz_NUM);
Cy_TCPWM_TriggerStart(PWM_2Hz_HW, PWM_2Hz_MASK);
for(;;)
{
}
}
##プログラムしようとしたのだけど
以上で、設定とプログラムはおしまいです。あとは、PSoC 6 MCUに書き込むだけです。
左下の"Quick Start"タブの一番下に"LChika Program (KitProg3)"という項目があります。評価ボードを接続し、ここをクリックすると、アプリケーションのビルドとターゲットデバイスへの書き込みまでをしてくれます。クロックすると、コンソールに何やら赤いエラーが現れました。
「CMSIS-DAPが見つからない」
この評価ボードの初期設定は、KitProgモードになっています。"CMSIS-DAP"を使用するには、SW3(MODE)を押して、モードを切り替えます。すると、LED2(STATUS)が点灯から消灯に切り替わります。これで、"CMSIS-DAP"が使えるようになります。もういちど、"LChika Program (KitProg3)"をクリックします。
「KitProgファームウェアが古いので、fw-loaderを使って最新版アップデートせよ」
このエラーは、PSoC 5LPにKitProg2が書かれているのが原因です。ModusToolboxで使用するためには、KitProg3が必要になってきます。書き換えるためには、fw-loaderというプログラムを使用する必要があります。
fw-loaderは、実行ファイルが"C:\Users<user id>\ModusToolbox_1.0\tools\fw-loader-1.0\bin"に有りますが、コンソールから開く必要があります。
- 実行ファイルのあるフォルダでコマンドラインを立ち上げます。
- SW3(MODE)を押して、KitProgモードに入れます。
- "fw-loader --device-list"を実行します。
C:\ .. \bin>fw-loader --device-list
Cypress Firmware Updater, Version: 1.0.0.505
(C) Copyright 2018 by Cypress Semiconductor
All Rights Reserved
Info: Start API initialization
Info: Connected - KitProg2-1B14156503068400
Info: Hardware initialization complete (713 ms)
Connected supported devices:
1: KitProg2-1B14156503068400 FW Version 1.5.0
この出力結果の"KitProg2-1B14156503068400"の部分がCY8CPROTO-063-BLEに搭載されたKitProgのIDです。これを使って、ファームウェアをKitProg3にアップグレードします。
C:\ .. \bin>fw-loader --update-kp3 "KitProg2-1B14156503068400"
Cypress Firmware Updater, Version: 1.0.0.505
(C) Copyright 2018 by Cypress Semiconductor
All Rights Reserved
Info: Start API initialization
Info: Connected - KitProg2-1B14156503068400
Info: Hardware initialization complete (721 ms)
Device 'KitProg2-1B14156503068400' opened successfully
Info: Kit FW is 'KitProg2' ver. 1.05 b000. Upgrade file is 'KitProg3' ver. 1.01 b158
Info: Disconnected - KitProg2-1B14156503068400
Info: Connected - KitProg Bootloader-1B14156503068400
Info: Bootloader Version: Major 1, Minor 1, Build 40
Info: FW Upgrade to version: 1.01 b158
Info: Bootloading ...
Info: Verifying ...
Info: FW Upgrade completed
Info: Connected - KitProg3 CMSIS-DAP BULK-1B14156503068400
FW update completed successfully
Info: Disconnected - KitProg Bootloader-1B14156503068400
これで、KitProg3に書き換えられました。もう一度SW3(MODE)を押してCMSIS-DAPが使えるモードにします。
##再び、プログラム
もういちど、"LChika Program (KitProg3)"をクリックすると、こんどは、うまく書き込めました。LEDも点滅しています。
ただのLチカなのに、18kBも必要なんですね。
##関連サイト
PSoC 6 BLE Prototyping Kit
ModusToolbox™ Software Environment