
ストロベリーリナックス社のサイプレスPSoC(CY8C27443-PXI)を使用したマイコンボードキットです。LCD表示とタイマーを使用しタイマー1で青色LEDを点灯した画面です。
制御にはタイマーは必要不可欠ですがPSoC CPUのタイマーは使えないと思っていましたが試行錯誤の結果、KIさんのホームページでタイマーは使用できることがわかりました。LCDはすんなり表示でき表示画面は参考資料のままです。
Timer16のParametersをこのようにし、Periodを3276(32.768KHz/10)で100msecとします。

boot.asmの ljmp _Timer16_1_ISRをljmp _int_timer16_1に変更します
org 24h ;PSoC Block DBB01 Interrupt Vector
//ljmp _Timer16_1_ISR ljmp _int_timer16_1
reti
タイマーとLCDのプログラムです
#include <m8c.h> // part specific constants and macros#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler int_timer16_1 //ここが必要
unsigned int timer_1;
unsigned int timer_2;
unsigned int timer_3;
void int_timer16_1()
{
//PRT0DR ^= 0x0F; //点滅テスト用
if(timer_1 != 0){ //
timer_1--;
}
if(timer_2 != 0){ //
timer_2--;
}
if(timer_3 != 0){ //
timer_3--;
}
}
void main()
{
// Insert your main routine code here.
//port0 all out mode(001)
//PRT0DM0 = 0xff; //
//PRT0DM1 = 0x00; //
//PRT0DM2 = 0x00; //
//port1 all out mode(001)
PRT1DM0 = 0xff; // PRT1DM1 = 0x00; //
PRT1DM2 = 0x00; //
Timer16_1_EnableInt(); //割り込みマスク1 Enable
M8C_EnableGInt; //CPU 全体の割り込み許可
Timer16_1_Start(); //これがないとタイマーは機能しませんでした(詳細不明)
lcd_disp(); //LCD表示
Loop1: timer_1=10;
Loop2:
if(timer_1 == 0){
PRT1DR = 0x01;
}
else{
goto Loop2;
}
timer_2=10;
Loop3:
if(timer_2 == 0){
PRT1DR = 0x02;
}
else{
goto Loop3;
}
timer_3=10;
Loop4:
if(timer_3 == 0){
PRT1DR = 0x04;
}
else{
goto Loop4;
}
goto Loop1;
}
void lcd_disp()
{
char str[ ] = "User Module"; // Define "RAM" based string
LCD_1_Start(); // Initialize LCD hardware
LCD_1_Position(0,4); // Position cursor @ row 0, col 4
LCD_1_PrCString("PsoC LCD"); // Print a constant "ROM" string
LCD_1_Position(1,2); // Position cursor @ row 1, col 2
LCD_1_PrString(str); // Print "RAM" based string.
}