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.
