AVR INTERRUPT

cdm·2023년 12월 3일
0

AVR

목록 보기
4/8

각 MCU마다 interrupt의 종류 및 우선순위가 다름.
'Interrupt Vector Table' 참고.

Atmega328의 경우 총 26개의 interrupt 제공.

  • Vector No. 가 작을수록 우선순위.
  • 전체 잠금 설정(Global Interrupt Enable) : MCU의 interrupt 허용 여부
    sei() 함수 : Set Global Interrupt, 모든 인터럽트 허용
    cli() 함수 : Clear Enalbe Interrupt, 모든 인터럽트 잠금
  • 개별 잠금 설정 : 개별 interrput 허용 여부
    ex) 개별 interrupt를 사용하려고 했지만 개별 잠금 설정이 '잠금'상태이라면 사용 X

인터럽트를 사용을 허용할 때는 반드시 모든 초기화가 끝나고 설정 변경

각 MCU마다 인터럽트 발생 논리 변화가 다름.
(Falling Edge, Rising Edge)

  • EIMSK(External Interrupt Mask Register) : external interrupts 개별 허용 여부, '1' 허용

  • EICRA(External Interrupt Control Register A) : external interrupts 발생 조건
    -ISCNn(Interrupt n Sense Control) : N(인터럽트 번호), n(비트)

컴파일러마다 인터럽트 함수 구현 방식 다름.

ISR(Interrupt Service Routine) : 인터럽트 이름
WINAVR/AVR Studio
ex) ISR(인터럽트 이름){인터럽트 내용}

  • volatile unsigned char state = 0;
    상태 변수는 전역으로 지정.

아두이노 우노 보드에서 PD2가 INT0번에 해당하기 때문에 0V 상태였다가 버튼을 누를 때 5V를 흘려보내고 손을 뗄 때의 falling edge에 인터럽트를 발생시키는 동작을 함.

0개의 댓글