반응형
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(0, 80, true); //division 80=1Mhz
timerAttachInterrupt(timer, &onTimer, true);
timerAlarmWrite(timer, 1000000, true); //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 |