コメを噛め

コメを噛め

rerofumi の電子工作メモ

hatena bookmark


できあがった PSoC3 の簡易テストボードが動作することを確認するために簡単なLEDチカチカコードを作った。
開発に使う PSoC Creater も 1.0SP3 となっており昔とは若干勝手が異なっているため、その辺を手探りしながらの作製。


まずはトップレベルデザイン。
今回は 5つの LED を順番に光らせていくテストをしたいので、1bit の出力pinを 5つ用意する。それぞれに LED1-5 と名前をつけ、1bit幅であることを指定し、「ハードウェアに接続」をしないで CPU から操作できるようにしておく。


リソースの Pins タブで出力先となるピンアサインを設定。先ほどは LED1 といった抽象化されたポート名だったが、それを実際のピンに紐づけていく。

チカチカのタイミングを得るためにデジタルハードウェアブロックのタイマーを1つ置く。
PSoC3 は専用のタイマーも持っているが 8/16bit 幅なので UDB ブロックを使って 24bit timer としている。

PSoC1 の時は割り込みは各モジュール毎に割り込み設定があった感じだけれども、PSoC Creater では「割り込みポート」なるものがあって、そこにモジュールからのシグナルを繋いでやることで割り込みが利用できる。
つまり割り込みもモジュールとして扱うということですな。


リソースの Interrupts タブでは割り込みモジュールの優先度順位が設定できる。

ソフトウェア上で割り込みを実装するにはどうやるかというと、これは変なところで PSoC1 の流儀そのままだったりする。
つまり、割り込みモジュールが生成したライブラリコードの中に記述するのですな。
ユーザーが追加したコードはライブラリコード再生成の時に消してしまわない様 IDE が便宜を計ってくれる。

今回 irt_timer1 という割り込みモジュール名にしたので、ライブラリソースは irt_timer1.c|h という名前で生成されている。
irt_timer1.c を開くと CY_ISR(irt_timer1_Interrupt) という関数があるので、この中を割り込み処理としてユーザーが記述するらしい。


CY_ISR(irt_timer1_Interrupt)
{
/* Place your Interrupt code here. */
/* `#START irt_timer1_Interrupt` */
my_isr_timer1();
/* `#END` */

/* PSoC3 ES1, ES2 RTC ISR PATCH */
#if(CYDEV_CHIP_FAMILY_USED == CYDEV_CHIP_FAMILY_PSOC3)
#if((CYDEV_CHIP_REVISION_USED < = CYDEV_CHIP_REVISION_3A_ES2) && (irt_timer1__ES2_PATCH )) irt_timer1_ISR_PATCH(); #endif #endif }

こんな感じで #START と #END の間に記述する。
M8C では割り込みからCの関数を呼べなかったが今回は大丈夫な模様。

ポートはピンのどこに割り当てたかをモジュールライブラリが吸収してくれるので、ビットシフトとかを考えなくて良い。
LED2 というモジュールを 1bit で生成したら ON するコードは

LED2_Write(1);

と書くだけで良い。実際に P2-4 に出力するための

staticBits | ((value < < LED1_SHIFT) & LED1_MASK)

はライブラリの中でやってくれる。
わかりやすいかどうかはともかく、従って置いた方が色々面倒がなくてよさそうだ。

Download: PSoC3_TEST_LED.zip (343kb)
PSoC Creator1.0 のプロジェクト一式。

Leave a Reply