본문 바로가기
Study/ESP8266(WIFI),ESP32(BLE,WIFI)

ESP32 타이머 인터럽트

by Answer Choi 2019. 12. 13.
반응형

ESP32에도 인터럽트들이 있는데, 이번에는 타이머 인터럽트입니다.

 

타이머 인터럽트는 일정 시간이 지난 후 자동으로 실행되는 인터럽트입니다.

1
2
3
//Interrupt
volatile bool interruptCounter=false;
hw_timer_t * timer = NULL;
cs

Line 2 : 타이머 인터럽트가 걸렸을때 체크할 변수입니다.

인터럽트 안에서 사용할 변수는 volatile을 사용해야 합니다.

 

Line 3 : 타이머 인터럽트로 사용 할 하드웨어 타이머입니다.

 

1
2
3
4
5
6
void interrupt_init(){  //timer interrupt freq is 80Mhz
  timer = timerBegin(080true);  //division 80=1Mhz
  timerAttachInterrupt(timer, &onTimer, true);
  timerAlarmWrite(timer, 1000000true);    //count 1000000 = 1sec,1000=1msec
  timerAlarmEnable(timer);
}
cs

타이머 인터럽트 초기화 부분입니다.

Line 2 : 타이머 주파수가 기본적으로 80Mhz입니다. 

 

여기서 몇분주로 할건지 초기화 합니다. 80으로 해주면 1Mhz의 주파수가 됩니다.

 

Line 3 : 인터럽트가 걸리면 어느 함수를 호출할 것인지 선업합니다.

 

Line 4 : Line 1에서 1Mhz 즉 0.000001초마다 카운트를 하는데 몇번 카운트 할것인지 정합니다.

 

Line 5 : 타이머를 동작합니다.

 

1
2
3
void IRAM_ATTR onTimer() {
  interruptCounter=true;
}
cs

이 부분은 위에서 설정한 0.000001초마다 카운트를 1000000번했을경우

즉 1초마다 이 함수를 호출하는데, 호출한 함수안에서 volatile변수의 값을 변경합니다.

 

1
2
3
4
5
6
void chk_interrupt(){
    if (interruptCounter) { 
        interruptCounter=false;
        debug.println("1 sec");
   }
}
cs

이제 loop문에서 위에서 설정한 변수가 바뀌는 것을 캐치해주면 됩니다.

1초마다 바뀌도록 세팅을 해서 디버깅문을 넣었습니다.

 

1초마다 출력되는 것을 확인하실 수 있습니다.

 

 

반응형

'Study > ESP8266(WIFI),ESP32(BLE,WIFI)' 카테고리의 다른 글

ESP32 ADC  (2) 2020.03.12
ESP32 Sleep Mode와 Wake up  (0) 2019.12.28
ESP32 하드웨어 시리얼 변경  (0) 2019.12.13
ESP32 PWM사용하기  (0) 2019.12.11
ESP8266 OTA(Over The Air) 사용하기 - 업데이트하기  (11) 2019.03.18

인기글