PSoC4でUSB-UART-Bridgeを使うメモ

この記事では，PSoC4 Prototyping Kit（CY8CKIT-043）でUSB-UART-Brigeを使う手順を示します．この手順は，Cypressの「KitProg User Guide」に記載されている内容をピックアップしたものです．

# 必要なもの

* CY8CKIT-043
* PSoC Creator

![ダウンロード.jpeg](https://qiita-image-store.s3.amazonaws.com/0/104404/5265b32b-028f-c29b-27dc-5a42d251a2c3.jpeg)


# サンプルプログラム

## プロジェクトの作成

空のプロジェクトを作成します．

もし「Target hardware」に「CY8CKIT-043」が出てこない場合は，「Target device」で「CY8C4247AZI-M485」を選択します．

## UART

回路図にUARTを追加します．

![スクリーンショット 2016-01-25 12.47.37.png](https://qiita-image-store.s3.amazonaws.com/0/104404/48f78f25-2338-78b8-7f59-0dfc5b299a92.png)

UARTの設定をします．UARTコンポーネントをダブルクリックして，通信速度などを設定します．ほとんどの場合，「Baud rate(bps)」の設定だけで十分だと思います．

![スクリーンショット 2016-01-25 12.48.49.png](https://qiita-image-store.s3.amazonaws.com/0/104404/dc6979f9-938e-1ae0-58a0-5d916129f5ae.png)

##　ビルドする

一度ビルドして，必要なソースコードなどを生成しておきます．

## ピンアサインの設定

プロジェクト名.cydwr を開いて，ピンアサインを設定します．**図のように設定をしておきます（重要）．**

![スクリーンショット 2016-01-25 12.51.59.png](https://qiita-image-store.s3.amazonaws.com/0/104404/0b561506-c2c2-0481-7952-bd9ee35b29db.png)

| Name | Port | Pin |
|:----------|:------|:---|
| UART_1:rx | P7[0] | 37 |
| UART_1:tx | P7[1] | 38 |

## main.c のサンプルプログラム

例えば，以下のようなプログラムを記述してみます．

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

        UART_1_Start();
        UART_1_UartPutString("USB-UART");
        UART_1_UartPutCRLF(1);
        for(;;)
        {
            uint8 ch = UART_1_UartGetChar();
            switch(ch){
            case 0:
                /* Nothing */
                break;
            case '?':
                UART_1_UartPutString("Sample Program. ");
                UART_1_UartPutCRLF(1);
                break;
            case '!':
                CySoftwareReset();
                break;
            }
        }    
    }

## ビルド＆書き込み

ビルドして，ボードに書き込みます．

## ターミナルソフトで接続する

TeraTermなどのターミナルソフトで接続してみます．

シリアルポートに接続します．「KitProg」と表示されているポートを選択します．

![スクリーンショット 2016-01-25 12.58.55.png](https://qiita-image-store.s3.amazonaws.com/0/104404/1af2fbd8-b2f0-530b-3cbc-7ad17bc290b9.png)

通信速度の設定をします．

![スクリーンショット 2016-01-25 13.00.39.png](https://qiita-image-store.s3.amazonaws.com/0/104404/ca54bb3f-02d6-8b86-37b1-b2cb183e13f1.png)

## 実行

実行を確認できます．「!」キーでボードのリセットが行われ，「USB-UART」と表示されます．「?」キーで「Sample Program.」と出力されます．

![スクリーンショット 2016-01-25 13.24.22.png](https://qiita-image-store.s3.amazonaws.com/0/104404/e82e93e4-85b7-bc85-c64f-a6bd5d517fa7.png)

# 参考

よく使いそうな関数を示します．XXXがコンポーネント名です．

| 関数名 | 説明 |
|-------|-----|
| void XXX_Start(void) | 通信を開始する |
| void XXX_Sleep(void) | コンポーネントをスリープモードにする |
| void XXX_Wakeup(void) | コンポーネントをスリープモードから復帰させる |
| void XXX_UartPutChar(uint32 data) | 1文字送信する |
| void XXX_UartPutString(const char8 string[]) | 文字列送信する |
| void XXX_UartPutCRLF(uint32 bytes) | 改行を送信する |
| uint32 XXX_UartGetChar(void) | 1文字受信する |
| uint32 XXX_UartGetByte(void) | 1バイト受信する |

* XXX_UartGetChar は，1文字を受信する．受信する文字がない場合は「0」が返される．
* XXX_UartGetByte は，1バイトを受信する．受信できなかった場合は，エラーコードが返される．

| XXX_UartGetByteのエラーコード | 説明 |
|-----------------------------|-----|
| XXX_UART_RX_OVERFLOW | オーバーフロー |
| XXX_UART_RX_UNDERFLOW | アンダーフロー |
| XXX_UART_RX_FRAME_ERROR | フレームエラー |
| XXX_UART_RX_PARITY_ERROR | パリティエラー |