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);
}

詳細 戻る (back)


Please log in to post comments.