1.먼저 장치 클럭에 전원을 공급한다.
PMC_PCER =1<<PIOA;
2. PIO안에 값이 AIC로 들어가는 것을 막기 위하여 OUT DISABLE REGISTER를 사용한다. 바로 PIO_ODR를 사용한다.
핀 15번을 사용하기 때문에 헤더파일에 INT_PIN 15로 정의 함.
밑에 활성화를 다시한다. 반드시 기억할 것은 먼저 비활성화하여 값을 깨끗이
한 다음, 활성화 시킨다. 그래서 여기서 먼저 핀을 비활성화 시킨후 아래에
활성화를 시킨다.
PIO_ODR =1<<INT_PIN; //pin out disable비활성화
3. 핀을 활성화 시키는 부분이다.INT_PIN이 15번이므로 스위치를 15번 자리에 장착하여 사용하는데 핀 15번을 사용하기 위해서는 이 15번 자리를 활성화 한다.
PIO_PER =1<<INT_PIN; //pin enable
4.인터럽트 값이 남아있을지 모르므로 이 부분을 비활성화시키는 레지스터인
PIO_IDR를 사용한다. 비활성화의 이유는 reset개념으로 생각한다.
PIO_IDR=1<<INT_PIN;//pin 15 interrupt disable
5.당연히 AIC 또한 인터럽트 비활성화를 시켜서 리셋한다.
AIC_IDCR =1<<PIOA;//aic interrupt disable
6.ARM칩에 풀업저항기능을 하는 회로가 존재한다. 그 기능을 활성화하기 위해서
풀업저항의 관련된 레지스터인 PIO_PUER을 사용한다.
PIO_PUER =1<<INT_PIN;// pull up register enable 회로안에 풀업저항 활성화
AIC_SVR[PIOA]= (unsigned int)Aic_Handler;
// 타이머 카운터 0 인터럽트 핸들러 등록(AIC_SVR[AT91C_ID_TC0],Timer_Handler)
AIC_SMR [PIOA]=(0<<PRIOR)|( 1<<SRCTYPE);
// 타이머 카운터 0 인터럽트 모드 설정(AIC_SMR[TC0],AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,AT91C_AIC_PRIOR_LOWEST)
아래표를 참고하면은 일단 풀업저항이므로 클럭을 생각했을때, high신호가 된다.
스위치를 누르면, low edge가 되면서, led가 반응하므로 negative edge를 사용한다.
AIC_ICCR = 1<<PIOA; // 장치번호 PIOA를 비활성화.
스위치 내부에는 버튼을 눌렀다 뗐다했을 때, 스프링 작용을 하는 것이 있다.
그 때, 눈에 보이지 않는 전류가 발생하는데, 그것을 잡음으로 본다. 그것을 제거
하기 위한 기능이 ARM칩내부에 존재하며, 그 기능을 사용하면, 일부 차단시켜준다.
그기능을 ARM에서는 glitch라고 한다. 그래서 관련된 레지스터를 사용한다.
PIO_IFER= 1<<INT_PIN;
아래는 헤더파일이다.
'코스웨어 > 13년 스마트컨트롤러' 카테고리의 다른 글
초음파센서 소스 - 석주원 (0) | 2013.05.23 |
---|---|
ARM 소스파일 - 임태형 (0) | 2013.05.23 |
초음파센서 소스 - 전영기 (3) | 2013.05.23 |
[인터럽트 요청시 사용되는 용어 명확한 설명]by 문남경 (5) | 2013.05.22 |
5월 21일 AIC_Handdler 함수만들기-송시혁 (4) | 2013.05.22 |
2013.05.20_[타이머카운터복습/인터럽트/풀업풀다운저항]_김성엽 (12) | 2013.05.22 |
[타이머/카운터와 인터럽트로 1초간격 LED 깜빡이기] - by 문남경 (10) | 2013.05.21 |
5월 13일 수업 정리 - 임기준 (11) | 2013.05.20 |