임베디드/Arm2567SAM

5월 23일 ultra1(진행중)

송시혁 2013. 5. 23. 22:53

1. 트리거 펄스 함수.

    실제로 타이밍도를 보면 펄스를 보내주는 부분.

즉, 우리가 손댈수 있는 부분은 펄스(신호를 보내는 부분)

은 펄스밖에 없다. 그러나 과정은 복잡하다!!!!

서론은 끝내고 본론으로 들어가겠다.



트리거 init함수에서

1. 핀 출력 레지스터 활성화

2.핀 활성화

3.핀 출력 데이터를 클리어(GND, 혹은 레지스터에 혹시 모를 쓰레기값 지움)



트리거 pulse 함수(상승엣지 부분)

처음에 low상태 (AT91C_BASE_PIOA->PIO_SODR =1<<TRG_PIN)였다가

 set output data register를 사용한다.

AT91C_BASE_PIOA->PIO_CODR=1<<TRG_PIN;


밑에 for문은 low상태에 신호가 지연됨으로서 상승되는 클럭을

의미한다. 정확히는 클럭의 길이라고 보면 된다. 보통 2~4클럭.


그리고 일정시간이 흐르면 다시 핀14번을 꺼서 유지상태로 만듬.

AT91C_BASE_PIOA->PIO_CODR =1<<TRG_PIN;(핀을 0v상태로 만든다,

즉, 더 이상 상승하지 않는다는 의미로 상승 종료)







ECHO_INIT()함수- 외부 인터럽터(AIC), 거리측정

그대로 끌고와서 이름만 변형한 것.





단, 주의점은 풀업저항 부분은 주석처리 한다. 




핸들러 함수. 인터럽트를 발생시키는 부분이다. 인터럽트를 발생시켜서

하강하는 엣지를 찾기위하여 인터럽트를 사용한다.






AT91C_BASE_PIOA->PIO_ISR;= 인터럽트 상태레지스터를 읽는다.






++uIctic;= 타이머가 거리를 측정하는 부분이다. 1클럭당 1cm씩 세고

계속해서 증가시킨다. 결국, 증가하면서 거리를 측정하고있다.