![]()
今回はスイッチ入力で割り込みを発生させ、LEDを光らせる。PSoC Designerでは(使い勝手が悪いものの)比較的簡単にポート割り込みを実装できるようにできている。
![]()
PSoC Designerを起動したら「Config」メニューの「Interconnect」から画面を切り替える。
![]()
ここでポートの設定をする。「Port_1_4」の「Drive」を「Pull Down」、「Interrupt」を「ChangeFromRead」にする。この「Interrupt」の項目が割り込みの設定になる。ここではスイッチが押し下げられたときと、上がったときの両方で割り込みが起きるようにした。ちなみに今回使うスイッチはONのときに5Vになるので、押し下げられたときのみ割り込みを起こしたいときは「FallingEdge」、ボタンから指を離したときは「RisingEdge」に設定すればいい。
さらに「Port_2_0」の「Drive」を「Strong」にする。これはLEDを光らせるための設定だ。
設定が済んだら「View」メニューの「Application Editor」でソースコードを書く画面に切り替える。
![]()
普段であれば「main.c」を編集してソースコードを書き始めるところだが...今回はまずビルドを行う。
![]()
すると編集に必要なソースコードが生成される。この作業は「Device Editor」の画面で「Config」メニューの「Generate Application」から行うこともできる。
ソースコードが自動生成されたら「Library Source」の「psocgpioint.asm」を開く。
![]()
そして「PSoC_GPIO_ISR:」の下に「ljmp _GPIO_INT」という命令を追加する。ここでは後ほど用意する関数名に「_」(アンダースコア)を付加したラベルへのジャンプ命令にする。
![]()
そして「Souce Files」の「main.c」に処理を書く。
//----------------------------------------------------------------------------#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules#pragma interrupt_handler GPIO_INT
void GPIO_INT(void)
{
if(PRT1DR & 0x10)
PRT2DR |= 0x01;
else
PRT2DR &= ~0x01;
}
void main()
{
M8C_EnableGInt;
M8C_EnableIntMask(INT_MSK0, INT_MSK0_GPIO);while(1)
{
}
}
これでPSoCへ書き込む。するとMiniProgの横のスイッチを押すとP20のLEDが赤く光る。
今回はポート14に接続されたスイッチの割り込みを利用したが、すべてのポートに対して割り込みの設定ができる。ただし、どのポートが割り込みを発生させたのかは自分で判断しないといけない。







