ESP32

ESP32 타이머 인터럽트 사용하기

달콤한숟가락 2024. 7. 22. 17:00
#include <Arduino.h>
#include "esp32-hal-timer.h"

// 타이머 포인터 변수 선언
hw_timer_t *timer = NULL;
volatile bool timerFlag = false;

// 타이머 인터럽트 서비스 루틴
void IRAM_ATTR onTimerISR() {
  timerFlag = true; // 인터럽트 발생 플래그 설정
}

void setup() {
  Serial.begin(115200); // 시리얼 통신 초기화

  // 타이머 초기화: 주파수는 1MHz (1000000 Hz)
  timer = timerBegin(1000000);
  if (timer == NULL) {
    Serial.println("Timer initialization failed!");
    return;
  }

  // 타이머 인터럽트 서비스 루틴 연결
  timerAttachInterrupt(timer, onTimerISR);

  // 타이머 알람 설정: 1초마다 (1000000 마이크로초) 인터럽트 발생
  timerAlarm(timer, 1000000, true, 0);

  // 타이머 알람 활성화
  timerStart(timer);
}

void loop() {
  // 타이머 인터럽트 발생 시 처리
  if (timerFlag) {
    timerFlag = false;
    Serial.println("Timer Interrupt Triggered!");
  }
}