PSoC6 BLE Prototyping KitをPSoC CreatorでLチカ

PSoC6のメモ
PSoC6には、いままで(PSoC3/4/5LP)用の開発環境**PSoC Creator**とは別に**ModusToolbox**というeclipseベースの開発環境が用意されている。
が、今までのPSoCユーザーにとってはPSoC Cratorのほうがとっつきやすいので、PSoC CreatorでLチカするまでをまとめる。

# 開発ボード
[CY8CPROTO-063-BLE PSoC6 BLE Prototyping Kit](https://www.cypress.com/documentation/development-kitsboards/psoc-6-ble-prototyping-kit-cy8cproto-063-ble)
KitProg2が載っているのでライターを別途用意する必要はない。

備考:[CY8CPROTO-062-4343W PSoC 6 Wi-Fi BT Prototyping Kit](https://www.cypress.com/documentation/development-kitsboards/psoc-6-wi-fi-bt-prototyping-kit-cy8cproto-062-4343w)は現状**PSoC Creatorに対応しておらず、ModusToolboxのみでの開発になるので注意。**

# 環境構築

1. PSoC Creator 4.2
1. PSoC PDL 3.1.0
1. PSoC Programmer 3.28.3

## PSoC Creatorを導入する
[PSoC Creator](https://japan.cypress.com/products/psoc-creator-integrated-design-environment-ide)
ダウンロードにはCypressのアカウント取得/ログインが必要。
2019/6/8時点では4.2が最新。

## PSoC PDLを導入する
[Peripheral Driver Library](https://japan.cypress.com/documentation/software-and-drivers/peripheral-driver-library-pdl)
コンポーネント類や各種ミドルウェアが含まれる。
PSoC Creatorと同様にダウンロードにはログインが必要。
2019/6/8時点では3.1.0が最新

###追記
PSoC Creatorを開き、**Tools->Find new devices**を選んでやると、PSoC6のBLE対応IC群がPSoC Creatorで選べるようになる。
この手順を踏まないとデバイス一覧にCYBLE_416045-02が出てこないので注意。
**追記ここまで**


PDLをインストールしたらPSoC Creatorを開き、**Tools->Option->Project Manegement**タブの**PDL v3(PSoC 6 devices) location**にインストールしたPDLのディレクトリを入れてやる。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264634/782be209-b5c0-437a-f7e7-d9a2880403c8.png)
参考:[PSOC CREATOR ADDS SUPPORT FOR PSOC 63-BASED EZ-BLE™ BLUETOOTH MODULE](https://www.cypress.com/blog/technical/psoc-creator-adds-support-psoc-63-based-ez-ble-bluetooth-module)

## PSoC Programmerを導入する
[PSoC Programmer](https://japan.cypress.com/products/psoc-programming-solutions)
このページより、PSoC Programmerを落とす。
Cypress ProgrammerはModusToolbox用の書き込みアプリケーションらしい。
2019/6/8時点では3.28.3が最新。

## 注意
PSoC既存ユーザーの場合、上記3点セットがすでに導入されている場合がある。
その場合、**PSoC Creatorは4.2、PSoC PDLは3.0以上、PSoC Programmerは3.27.3以上**でないと何かしらでエラーを吐く。
筆者はPSoC Programmerのアップデートを忘れて1時間溶かした。

#Lチカ
PSoC6 BLE Prototyping Kitには赤と緑2つのユーザーLEDが実装されている。
今回はM0+で緑のLEDを、M4で赤のLEDをチカチカさせる。

##TopDesign
TopDesignは以下のようにする。
Digital Outputを2つ並べ、LED_1/2とラベルを付ける。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264634/dd47132d-2ec5-358a-c1fc-cfe5d34336b3.png)
データシートを見ればわかるが、この開発ボードのLEDの実装は上の図のようにsinkになっている。実際のOutputとLEDの点灯が反転するので注意。

##Pinアサイン
Pin設定は以下のようにする。
緑のLEDが7.1、赤のLEDが6.3ピンなのでそのように割り当てる。
実際のボードにもピン番号がシルクで振ってあってわかりやすい。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264634/cddfac65-2a97-6c22-4bb9-8785b21d6847.png)

##M0+のコード
```C:main_cm0p.c
#include "project.h"

int main(void)
{
    __enable_irq(); /* Enable global interrupts. */
    /* Enable CM4.  CY_CORTEX_M4_APPL_ADDR must be updated if CM4 memory layout is changed. */
    Cy_SysEnableCM4(CY_CORTEX_M4_APPL_ADDR); 

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */

    for(;;)
    {
        /* Place your application code here. */
        Cy_GPIO_Inv(LED_1_0_PORT,LED_1_0_NUM);
        Cy_SysLib_Delay(1000);
    }
}
```

for文無限ループ外のコードは自動生成されたものそのままでOK。
`Cy_GPIO_Inv(LED_1_0_PORT,LED_1_0_NUM);`はLED_1ピンの出力を反転させる。
`Cy_GPIO_Write(LED_1_0_PORT,LED_1_0_NUM,1);`などで制御してもよい。
`Cy_SysLib_Delay():`の引数はms。

##M4のコード
```C:main_cm4.c
#include "project.h"

int main(void)
{
    __enable_irq(); /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */

    for(;;)
    {
        /* Place your application code here. */
        Cy_GPIO_Inv(LED_2_PORT,LED_2_NUM);
        Cy_SysLib_Delay(500);
    }
}
```

M4側は`Cy_SysLib_Delay(500);`でM0+側の倍の速さでチカチカさせることにする。

###コンパイル/プログラミング
**Build->Build [Design名]**よりプログラムをコンパイルする。

無事コンパイルが通ったら、PCと開発ボードを接続し、**Debug->Program**で書き込みを行う。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264634/48eea131-6ae6-2678-534d-638bdccfa430.png)
上のような画面が出るので、どちらかのコアを選択し**OK/Connect**で書き込みが行われる。
今回は選ぶのはどちらでもOK。デバッガを走らせる場合はどちらのコアを監視するかで選択が必要らしい？

書き込みが成功すれば、緑と赤のLEDがチカチカし始めたはず。