블로그 이미지
송시혁

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. 6. 3. 08:26 임베디드/Atmega



TCCRnA레지스터 TCCRnB레지스터

n은 번호 0~5까지 사용가능.


TCCRnA= 타이머 카운트를 0~2까지 동작모드를 설정하고, 비교출력신호의 출력방식 설정.

TCCRnB= 타이머 카운트를 0~2까지 동작모드를 설정하고, 분주비 설정(P419)






TCCR0A의 비트를 보면, WGMn비트가 있다. 이것은 타이머카운트의 동작모드를 설정하는 것.

normal mode= 일반 모드를 사용하기 위해서, WGM2=0, WGM1=0, WGM0=0을 쓴다.

(0<<WGM0)



COM0A비트는 비교출력방식을 설정하는 부분.

병렬 입출력(I/O)포트로 동작시키기 때문에 아래 COM0A1=0,COM0A0=0으로 설정.

밑에 TALBLE74는 PWM모드인 경우 사용한다. 현재 사용하지 않으므로 TABLE73을 사용한다.





CS00비트는 분주비를 설정하는 레지스터, 분주비 계산결과 오차가 가장적은 64를 사용한다.

CS02=0, CS02=1CS02=1 로 설정하면, 64PRESCALER의 분주비를 사용한다.




FOC0A와 FOC0B는 특별한 경우가 아니라면, 0으로 둔다. (강제로 출력단자에 OCnA와 OCnB를 출력비교 매치되도록하는 레지스터). , 인터럽트를 발생하는것도 아니기때문에 사용하지 않는다.



다시 돌아와서 TIMER_INIT 함수를 본다.




TCCR0A와 TCCR0B에는 각비트들의 어떤기능을 하는지 알아보고 설정해야 한다. 



데이트시트P194, 책P174참조

PWM모드가 아닐 경우에 비트를 1로하면, OCNX단자의 강제로 출력비교가 매치된다.

그러나 강제로 만들어진, 출력단자 OCNX단자에 신호만 출력한다. (인터럽트를 발생하지 않는다.)

일반적인 경우 0으로 설정한다.



TIMSK0= 인터럽트 마스크 레지스터

TOIEn비트는  overflow방식으로 인터럽트를 방식이다. 현재 이것을 사용하기 위해서 1로 설정하면, 된다.

OCIE0A, OCIE0B는 각각 비교방식인터럽트, OCIE0A의 1을 넣으면, 타이카운트가 

나머지는 0으로 해준다.



SREG= 책 30페이지를 참고하면, SREG에 관한 설명이 나온다. I(7번비트)는 인터럽트를 전체 허용할 수 있도록 만들어 주는 레지스터. 그래서 해당자리인 7번 비트에 1을 넣어서 인터럽트를 켠다.




다음은 벡터 함수.

ARM에서는 인터럽트를 발생시킬 수 있는 주소를 가지는 특정레지스터가 있고, 사용자가 임의로 이름을 정하여 함수를 만들어 사용이 가능했다.

그러나 ARTMEGA에서는 마찬가지로 인터럽트를 발생시키는 주소를 가지고 있으나, 사용자가 임의로 이름을 정할 수 없다. 즉, 정해진 이름의 함수가 있다. 위의 __VECTOR_23과 아래 보이는 헤더파일의 원형은 우리가 만든것이 아니라, 이 칩을 구성할 때, 정해져 나온것이다.


헤더파일에 VECTOR 23을 주목한다.




어쨌든  VECTOR_23()함수에서 전역변수인 ++UICTIC은 한 번만 초기화 되고 함수가 호출 할 때마다 1씩 증가한다.

그리고 타이머가 이것을 카운트 한다.





지연함수. 전역변수 UICTIC을 0으로 초기화.

이것을 타이머가 카운트한다.

그리고 WHILE문에서 인자인 UIMS보다 커지면, WHILE문을 탈출하여 함수가 종료된다. 그와 동시에 인터럽트가 완료된다.





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

6월 3일 usart  (0) 2013.06.11
5월 30일 lcd에 숫자를 출력하는 함수.  (0) 2013.06.10
5월 30일 atmega 문자출력  (0) 2013.05.31
5월 29일 LCD결선  (0) 2013.05.29
5월 28일 atmega2560 컴파일  (0) 2013.05.28
posted by 송시혁