본문 바로가기
코스웨어/14년 스마트컨트롤러

20140528 양태영 업무일지 16번

by 알 수 없는 사용자 2014. 5. 28.
728x90
반응형

70일차










-------------------------

ATMega2560  PCINT

-------------------------



--- Start Interrupt

어제 7 Segment에 숫자가 멈추는 것까지 하였고

이번엔 숫자가 다시 시작하는 것을 구현합니다.












--- Interrupt의 처리 방식


Interrupt 처리 방식에는 2가지가 있습니다.




첫번째는

인터럽트가 발생할 때 인터럽트를 요청한 장치가

CPU에게 인터럽트 벡터를 전송하는 방식.




두번째는

주번 장치가 별개의 인터럽트 신호선이 있어 인터럽트 발생시
CPU는 각각의 인터럽트에 따라 정의된 벡터 루틴을 찾아가는 방식.




두번째는 Reset, external, .. 등등 인터럽트들 이고,

첫번째는 PIN CHANGE INTERRUPT 라고 이번에 배울 인터럽트 입니다.









--- Pin change Interrupt


말 그대로 pin에 값이 변했을 때 인터럽트를 발생시킵니다.

전에 배운 external interrupt는 low 일 때, low → high 일 때, high → low 일 때, 값이 변했을 때

총 4가지 동작 설정을 할 수 있었지만 PCINT는 값이 변했을 때 인터럽트가 발생하는 것 밖에 없습니다.


PCINT0 ~ PCINT23 번까지 총 24개 있습니다.




- 벡터 테이블




PCINT0 가  0 ~ 7 PIN Interrupt 발생시 호출.

PCINT1 가  8 ~ 15 PIN Interrupt 발생시 호출.

PCINT2 가  16 ~ 23 PIN Interrupt 발생시 호출.






- PCINT 관련 Reg




PCIE0 에 1이 되면  0 ~ 7 PIN Interrupt 발생하도록 설정.

PCIE1 에 1이 되면  8 ~ 15 PIN Interrupt 발생하도록 설정.

PCIE2 에 1이 되면  16 ~ 23 PIN Interrupt 발생하도록 설정.





0 ~ 7 PIN Interrupt 발생되면 PCIE0 에 1.

8 ~ 15 PIN Interrupt 발생되면 PCIE1 에 1.

16 ~ 23 PIN Interrupt 발생되면 PCIE2 에 1이 됩니다.







0 ~ 23번 까지 각각 인터럽트를 발생시킬지 안시킬지 설정하는 Reg 입니다.









--- 실습


사용할 인터럽트는 9번을 사용해 보기로 했습니다.

Pin 번호는 회로도를 참고하여 63번.





- int.h 에서

PCINT 관련 Reg 추가








- int.c 에서

초기화





- smart.h

PCINT9가 PORTJ 라서 PORTJ 관련 Reg 추가





- smart.c

벡터 함수 추가






















728x90