Timeout - ワンショットタイマー割込み
Timeout - ワンショットタイマー割込み
Information
本ページは私家版のため、誤り等あればご指摘ください。
最新の情報は公式のドキュメントをご参照ください。
http://mbed.org/handbook/Timeout
タイマーで一定時間経過の割込みを発生させることができます。
割込みは指定した時間後の1回だけ発生します。
初期化
Timeout name;
name: 名前(自由に決めて良い)
割込み開始
name.attach(fptr, time);
fptr: 割込み処理関数のポインター
time: タイマー時間(秒)
タイマー割込みを開始します。
マイクロ秒単位の attach_us() もあります。
割込み停止
name.detach();
タイマー割込みを停止します。
例
LED2を割込みで消灯させます(LED1はウェイトを使って点滅)
#include "mbed.h" Timeout flipper; DigitalOut led1(LED1); DigitalOut led2(LED2); void flip() { led2 = !led2; } int main() { led2 = 1; flipper.attach(&flip, 2.0); // setup flipper to call flip after 2 seconds // spin in a main loop. flipper will interrupt it to call flip while(1) { led1 = !led1; wait(0.2); } }
LPCXpresso コード
タイマー比較一致割込み
LED(P1.18)点滅
#include "LPC17xx.h" #ifdef __cplusplus extern "C" { void TIMER0_IRQHandler (); } #endif void TIMER0_IRQHandler () { static volatile int n = 0; n ++; if (n & 1) { LPC_GPIO1->FIOSET = (1 << 18); // high } else { LPC_GPIO1->FIOCLR = (1 << 18); // low } LPC_TIM0->IR = 0xff; // reset flag } int main() { LPC_PINCON->PINSEL3 &= ~(3 << 4); // GPIO (00) LPC_GPIO1->FIODIR |= (1 << 18); // output LPC_SC->PCLKSEL0 &= ~(3 << 2); // PCLK_TIMER0 ck/4 (00) LPC_SC->PCONP |= (1 << 1); // PCTIM0 LPC_TIM0->TCR = (1 << 1); // reset LPC_TIM0->PR = SystemCoreClock / 4 / 1000 - 1; // prescale 1kHz LPC_TIM0->MR0 = 500 - 1; // mutch 2Hz LPC_TIM0->CTCR = 0; LPC_TIM0->MCR |= (1 << 0); // MR0I LPC_TIM0->IR = 0xff; NVIC_EnableIRQ(TIMER0_IRQn); LPC_TIM0->TCR = (1 << 0); // enable __enable_irq(); while(1); }
Please log in to post comments.