ATMEGA32L은 3개의 외부 인터럽트(INT0,INT1,INT2)가 존재한다. 위 인터럽트 발생 조건은 다음과 같다.

  1. 하강 엣지
  2. 상승 엣지
  3. 로우레벨
  4. 논리적인 변화

*엣지(edge) : 뭐 내가 하드웨어적인 이해가 부족한 가운데 이 용어에 대해서 이해한 바로는 “어떤 신호가 변화되는 시점”이라 생각한다. 다시 풀이하자면 어떤 신호가 HIGH 레벨( 이진세계에서는 1 )로 계속 발생되고 있는 가운데 변화가 이루어지는 순간 이라고 할수 있다. (이진 세계에서는 1의 변화는 0 이다 ).

3번 로우 레벨 조건은 대충 신호가 일정시간 Low 레벨로 발생 되었을 때 발생한다고 한다. 그 일정시간 수치는 어디에서 어떻게 측정하는지는 모르겠다. 4번 같은 경우는 이건 모르겠다. 인터럽트 발생조건에서 INT2 는 1번과 2번의 엣지에 관련한 조건으로만 인터럽트가 발생한다.

MCUCR 레지스터는 인터럽트 발생조건을 이 레지스터에서 지정할 수 있다. 이 레지스터의 3,2,1,0비트에서 조건을 지정할수 있다.( 0 base ) 이 3,2비트는 INT1 에 관한 조건을 설정을 하고, 1, 0비트는 INT0 에 관해 조건을 설정한다.

  • 0  0 : 로우레벨
  • 0  1 : 논리조건
  • 1  0 : 하강엣지
  • 1  1 : 상승엣지

MCUCRS 레지스터에서는 INT2 인터럽트 조건을 지정한다. 이 레지스터의 6비트에 조건을 설정한다.

  • 0 : 하강엣지
  • 1 : 상승엣지

GICR 레지스터는 INT0, INT1, INT2 레지스터 중 사용할 레지스터를 선택할 수 있는 레지스터이다. 각 7,6,5비트에 INT1, INT0, INT2 순서대로 설정(1)할 경우 각 인터럽트들을 사용할 수 있다.

GIFR 레지스터 각 인터럽트가 발생했을 경우 각 비트에 1로 셋 된다고 하는데 그냥 패쓰…

SREG 레지스터의 7비트는 Global Interrupt 를 사용할 건지 안할건 지 설정하는 부분이 이 부분을 설정해줘야 인터럽트가 발생할 수 있다.

(……..여기까지 이해한 부분……)



'프로그래밍 > 마이컴' 카테고리의 다른 글

I2C 통신  (0) 2013.08.14

+ Recent posts