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씩 세고
계속해서 증가시킨다. 결국, 증가하면서 거리를 측정하고있다.
'임베디드 > Arm2567SAM' 카테고리의 다른 글
5월 27일 LCD에 한글이름 찍기 (0) | 2013.05.27 |
---|---|
5월 23일 ULTRA 2. (0) | 2013.05.24 |
5월 22일 소스 define방법 (0) | 2013.05.22 |
5월 21일 ultra(수정중) (0) | 2013.05.21 |
5월 21일 AIc 2.(수정중) (0) | 2013.05.21 |