PSoC™ Creator [Hands On GPIO Interrupt編]
PSoC™を初めて使用する組込ソフトウェア技術者向けにPSoC™ Creatorの基本的な機能の使用方法を説明します。
今回はGPIOを使用して割り込み処理を行うアプリケーションを構築する手順を Hands-On 形式で説明します。
アプリケーション仕様
Hands On で使用する評価ボードは、
・評価ボード名称:CY8CKIT-149
・搭載デバイス:CY8C4147AZI-S475
になります。
SWを押すと割り込み処理が行われ点灯しているLEDが消灯するアプリケーションになっています。
PSoC™ Creatorワークフロー
プロジェクトの作成
PSoC™ Creatorを立ち上げプロジェクトを作成します。
プロジェクト作成の詳細はプロジェクト作成編を参照してください。
①PSoC™ Creatorを起動します。
②File>New>Projectを選択します。
③Target DeviceをPSoC 4>PSoC 4100S Plusを選択します。
④Nextを選択します。
⑤プロジェクトを生成するワークスペース、パスおよびプロジェクト名を指定します。
Workspace name : workspace
Location : C:¥PSoC
Project name : Design04
⑥ Finish を選択します。
コンポーネントの設定
コンポーネントの挿入
使用するコンポーネントを回路図に挿入していきます。
Component Catalogから下記の各コンポーネントを選択して回路図にドラッグ&ドロップします。
①Ports and Pins>Digital Input Pin
②Ports and Pins>Digital Output Pin
③System>Interrupt
SW1の設定
①回路図の「Pin_1」をダブルクリックします。
②名称(Name)を「SW1」に変更します。
③Generalのタブを開きます。
④ Drive modeをプルダウンして
「Resistive pull up」を選択します。
⑤Initial drive stateが「High(1)」に
なっていることを確認します。
⑥HW connectionの「✔」を外します。
⑦InterruptをFalling edgeに変更します。
変更するとコンポーネントの形が変化し、
Interruptを結線できるポートが生成されます。
⑧Dedicated interruptに「✔」をつける。
⑨OKを選択します
LEDの設定
①回路図の「Pin_2」をダブルクリックします。
②名称(Name)を「LED」に変更します。
③HW connectionの「✔」を外します。
④LEDを正論理でドライブするため、
Initial drive stateは「Low (0)」に
設定します。
⑤OKを選択します。
isrの設定
①回路図の「isr_1」をダブルクリックします。
②名称(Name)を「SW_int」に変更します。
③「OK」を選択します。
コンポーネントの接続
コンポーネント設定終了後に、以下の各ピンを接続します。
① SW1のirqピンとSW_intの入力ピン
接続は、以下の手順で行います。
Wire Tool アイコンを選択して結線モードに入ります。
ポインタのシェープが + に変わります。
ポインタがコネクタの上に来た時にシェープが + から X に変わりますので、そこでクリックをして結線を固定します。
ピンの割り当て
設定した各コンポーネントにPinを割り当てていきます。
各Pin配置は「PSoC™評価ボード説明」の「ピン配置」の項をご参照ください。
①「Pins」をダブルクリックします。
②コンポーネントのPorts/Pinsを設定します。
LED : P3[4](pin22)
SW1 : P3[7](pin25)
アプリケーションの生成
ここまでの作業でPSoC™ Creatorがアプリケーションのスケルトンコード(空のmain関数、startup、必要なドライバなどのソースコード)を生成するために必要な情報がすべて入力されました。
メニューから
Build > Generate Application
を選択して、アプリケーションを生成します。
【ショートカット】
あるいは、コマンドアイコンからGenerate Application を選択してアプリケーションを生成することも可能です。
ソースコードの記述
①「main.c」をダブルクリックしてファイルを開く。
②ソースコードを作成します。最初に記述されていたテキストを全て消去してください。
下記のソースコードをコピーして貼り付けてください。
#include "project.h"
#define LED_ON (1u) /* Pin state to turn ON an active-High LED */
#define LED_OFF (0u) /* Pin state to turn OFF an active-High LED */
int SW_flag = 0 ;
CY_ISR(sw_isr)
{
SW_int_ClearPending();
SW1_ClearInterrupt();
CyDelay(50);
SW_flag =1 ;
}
int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
SW_int_StartEx(sw_isr);
//int temp ;
SW_flag = 0 ;
for(;;)
{
if (SW_flag == 1){
LED_Write(LED_OFF); /* Turn OFF Active-High LED */
}
else
{
LED_Write(LED_ON); /* Turn ON Active-High LED */
}
}
}
プロジェクトの書き込み
①プロジェクトを書き込むため、評価ボードをPCへ接続します。
②「Build」をクリックしプロジェクトをビルドします。
無事ビルドが完了すると、Output領域に「Build Succeeded」がレポートされます。
③「Program」をクリックし、ターゲットボードに書き込みを行います。
Output領域に「Device ‘デバイス名’ was successfully programmed 」がレポートされれば書き込み完了です。
動作確認
プログラム開始時はLEDが点灯しています。SW1 を押すと割り込み処理によってLEDが消灯します。
担当エンジニアからの一言
今回は、GPIO Interruptを使用したアプリケーションの作成を説明しました。
スイッチをGPIOから入力して割り込み処理を行う用途が多いと思います。
PSoC™ CreatorではPinとISRをコンポーネントから結線して簡単に設定できます。
次回は、CAPSENSE™(静電容量センサ)を使用したアプリケーションを説明します。
PSoC™ Creatorはこちらから