/* * 1-3 GPIO 入力 * * OS: T-Kernel * */ #include /* T-Kernel ヘッダ */ #include /* tm_printf() など */ #include /* ハードウェア定義 */ /* オブジェクト ID 番号 */ LOCAL ID tidA; /* タスク A の ID */ /* タスク A */ LOCAL void taskA(INT stacd, void *exinf) { INT s[2]; /* SW3 (PA3), SW4 (PE7) から入力する(読む)ように設定する PIO_IE(@)は、P@ Input Enable Register 読むとき1 書くとき0 にする PIO_CR(@)は、P@ Control Register 読むとき0 書くとき1 にする PIO_@@@@()はマクロ定義 (実際にはポインタ) */ PIO_IE(A) |= (1 << 3); // 00001000とOR : 3ビット目を1にする PIO_CR(A) &= ~(1 << 3); // 11110111とAND : 3ビット目を0にする PIO_IE(E) |= (1 << 7); // 10000000とOR : 7ビット目を1にする PIO_CR(E) &= ~(1 << 7); // 01111111とAND : 7ビット目を0にする for (;;) { /* GPIO 入力値を読み出す */ /* SW3 (PA3) を押しているあいだ、PIO_DATA(A)の3ビット目が1になる */ s[0] = (PIO_DATA(A) & (1 << 3)) != 0; /* SW4 (PE7) を押しているあいだ、PIO_DATA(E)の7ビット目が1になる */ s[1] = (PIO_DATA(E) & (1 << 7)) != 0; tm_printf((UB*)"SW3: %d, SW4: %d\n", s[0], s[1]); /* 500 ミリ秒待つ (ディレイ) */ tk_dly_tsk(500); } /* このタスクは終了しない */ } /* 初期化処理 */ EXPORT INT usermain(void) { T_CTSK ct; /* タスク A を生成する */ ct.exinf = (void*)('t' | 's' << 8 | 'k' << 16 | 'A' << 24); /* 拡張情報 */ ct.tskatr = TA_HLNG | TA_RNG0; /* タスク属性 */ ct.task = taskA; /* タスク起動アドレス */ ct.itskpri = 1; /* タスク起動時優先度 */ ct.stksz = 1024; /* スタックサイズ */ tidA = tk_cre_tsk(&ct) ; /* タスク A を生成 */ if (tidA < E_OK) return tidA; /* タスク生成失敗時 */ tk_sta_tsk(tidA, 0); /* タスク A を起動 */ /* タスクの第1引数の値は 0 とする.*/ return E_OK; }