블로그 이미지
송시혁

calendar

1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

2013. 5. 21. 10:03 임베디드/Arm2567SAM





1. 하강엣지 설정부분(디텍터)


AIC_ICCR = 1<<PIOA;// 안전을 위해 장치를 끄고,

PIO_IFER=1<<INT_PIN;//해당 핀을 글리치(glitch)한 다음,

AIC_ISCR= 1<<PIOA; //다시 장치를 활성화 시킨다.


위에 선언된 레지스터는 전부 인터럽트 관련된 레지스터





그리고 다음과 같이 PIO와 AIC_IECR를 활성화 한다.


PIO_IER = 1<<INT_PIN;

AIC_IECR= 1<<PIOA;



Aic_Handler()함수 만들기


지역변수는 함수가 종료되면, 사라져버린다.

함수를 빠르게 호출해야 하므로 전역변수를 사용함으로서 함수가

호출될때 마다 static변수는 고정되어 있기 때문에 빠르게 실행할

수 있다. 지역변수는 함수가 호출되면 종료되고 다시 함수가 호출

되어 생성되고 , 즉 생성과 삭제가 반복이 되기 때문에 속도가 느리다

따라서 static 변수를 사용하였다.

그러나, static은 프로그램종료가 되지 않으면, 계속 존재하므로

함부로 쓰지는 않는다. 




volatile static unsigned int uipinstatus;



15번비트자리를 제외하고 모두 0으로 만들기 위해 &연산자를

사용한다. 0이 아닐때, Led_toggle()을 호출하여 스위치를 눌렀을때,

LED를 깜박이게 한다.

if(0!=(uipinstatus&(1<<INT_PIN)))

{

Led_toggle();

}


for(iCnt=0;iCnt<1000000;++iCnt);// 지연시킨다.

스위치에 잡음(?)이 남아있어 원하는 동작이 자연스럽게 나오지

않아 조금 개선하고자, 지연시켜버린다.



uipinstatus= PIO_ISR;

인터럽트 상태 레지스터.


인터럽트는 중첩을 허용할 수도 있다. 지금, 중첩을 허용하지 않기 위해

방지하는 장치가 필요하다. 아래와 같이 선언하면, 허용을 하지 않는다.

AIC_EOICR=0;




'임베디드 > Arm2567SAM' 카테고리의 다른 글

5월 22일 소스 define방법  (0) 2013.05.22
5월 21일 ultra(수정중)  (0) 2013.05.21
5월 20일 AIC  (0) 2013.05.20
5월 16일 타이머 정리2(예정)  (0) 2013.05.16
5월 15일 타이머1.(정리예정)  (0) 2013.05.15
posted by 송시혁