/* RTP_sp_5-4 */ /* * アラームハンドラによるLED消灯 * * OS: T-Kernel * */ #include /* T-Kernel ヘッダ */ #include /* ハードウェア定義 */ /* オブジェクト ID 番号 */ LOCAL ID almA; /* アラームハンドラ A の ID */ /* アラームハンドラ A */ LOCAL void almhdrA(void *exinf) { /* LED3 消灯 */ PIO_DATA(F) |= (1 << 3); } /* 割込みハンドラ A */ LOCAL void inthdrA(UINT intno) { /* LED3 点灯 */ PIO_DATA(F) &= ~(1 << 3); /* 3 秒後にアラームハンドラ A を起動する */ tk_sta_alm(almA, 3000); /* 割込みをクリアする */ CLKCTRL_CGICRCG = intno; ClearInt(intno); } /* 初期化ルーチン */ LOCAL void init(void) { /* LED3 に出力するように設定する */ PIO_IE(F) &= ~(1 << 3); PIO_CR(F) |= (1 << 3); /* LED3 消灯 */ PIO_DATA(F) |= (1 << 3); /* SW3 (PA3) から入力するように設定する */ PIO_CR(A) &= ~(1 << 3); PIO_IE(A) |= (1 << 3); /* SW3 (INT3) の割込みのモード設定を行う : 立ち下がりエッジ(1→0) */ CLKCTRL_CGIMCGA = (CLKCTRL_CGIMCGA & ~(7 << (8 * 3 + 4))) | (2 << (8 * 3 + 4)); /* SW3 (INT3) の割込みを許可する */ CLKCTRL_CGIMCGA |= (1 << (8 * 3)); ClearInt(3); EnableInt(3, INTPRI_GROUP(5, 0)); } /* 初期化処理 */ EXPORT INT usermain(void) { ER er; T_CALM ca; T_DINT di; /* アラームハンドラ A を生成する */ ca.exinf = (void*)('a' | 'l' << 8 | 'm' << 16 | 'A' << 24); /* 拡張情報 */ ca.almatr = TA_HLNG; /* アラームハンドラ属性 */ ca.almhdr = almhdrA; /* アラームハンドラアドレス */ almA = tk_cre_alm(&ca); /* アラームハンドラ A を生成 */ if (almA < E_OK) { er = almA; goto e2; } /* アラームハンドラ生成失敗時 */ /* 割込みハンドラ A を定義する */ di.intatr = TA_HLNG; /* 割込みハンドラ属性 */ di.inthdr = inthdrA; /* 割込みハンドラアドレス */ er = tk_def_int(3, &di); /* 割込みハンドラ A を定義 */ if (er < E_OK) goto e1; /* 初期化ルーチンを呼び出す */ init(); return E_OK; e1: tk_del_alm(almA); e2: return er; }