블로그 이미지
송시혁

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 31

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

2013. 6. 2. 10:58 임베디드/Arm2567SAM

main()함수


먼저 main()함수에서 relay_init()을 호출한다.

아래 그림의 relay_init()함수를 주목한다.

realay.c



헤더파일에서 RELAY_PIN은 1로 정의하였다. 이것은 1번핀을 relay와 arm칩을 연결하기 위해서이다.






p248


init ()함수에서 

PIO_OER =1<<RELAY_PIN; -> 출력 활성화 레지스터에  1번자리에 1을 넣어 출력 활성화한다.

P250참고





P251참고


PIO_PER = 1<<RELAY_PIN;-> 핀을 활성화 레지스터. 1번핀을 사용하기 위해 핀 활성화 레지스터 1번 자리에 1을 넣는다.

PIO_SODR =1<<RELAY_PIN;->출력 데이터 레지스터 자리에 1을 넣어 high값으로 만든다.


P254참고


main()함수에서 init()함수가 호출되고 셋팅되어 아래 반복문이 실행된다.

dbgu 하이퍼 터미널과 연결이 되어 3번을 누르는 순간, 딸깍하는 소리가 나야 한다. 그러기 위해서 

relay_toggle()함수


static unsigned int uiState=0; 전역변수 선언. 전역변수는 한 번만 초기화 한다.

다음 조건에 만즌 if문이 실행된다. 

PIO_CODR=1<<RELAY_PIN; -> 출력데이터를 0v로 만드는 레지스터에 1번 자리에 1을 넣어 출력데이터를 0v로 만든다.

p255참고



uiState = 1; 그리고 uistat를 1로 만든다.

그러면 if문이 종료되고 함수가 종료된다.



다시 main()에서 반복문에 의해 실행되고 한번 더 3번으 누르면, relay_toggle()함수가 호출된다.

uiState가 if문에서 종료직전에 1을 넣었기 때문에 else문으로 가서 실행된다.


PIO_SODR=1<<RELAY_PIN; ->출력 데이터 레지스터 자리에 1을 넣어 high값으로 만든다.

p250참고

uiState = 0; ->다시 0을 넣는다.


이런방식으로 계속해서 반복하여 '딸깍'소리를 낼수 있게 동작한다.

그리고 relay를 결선시 아래그림을 참고하여 결선.




posted by 송시혁