본문 바로가기
코스웨어/14년 스마트컨트롤러

20140715 일일보고서 9번 김해성

by 알 수 없는 사용자 2014. 7. 15.
728x90
반응형

타이머 카운터에 대해




cpu 4Hz에 분주비 2일때

48000000        1/48000000 * 48000000 = 1초

AVR할 때도 알겠지만 주파수 등등 이외에는 다 비슷비슷하다.

 분주비 계산이다 참고바람.

20140715 분주비계산.xlsx

 

 


 


본격적으로 data sheet를 참고 하며 구현해보자.


 

1. TC0에 전원공급하기

 TC0에 전원을 공급한다.


 

2. TC CCR(Channel Control Register)


CCR은 카운터 클럭에 관여하는 레지스터이다.

우선, 카운터 클럭을 비활성화 시켜야 하기 때문에 CLKDIS를 1로 밀어준다.

 

3. AIC 인터럽트 비활성화

 

 

 IDCR을 이용하여 AIC 인터럽트를 비활성화 시킨다.


 

 

 

 


 

보다시피 TC1 : TC5 이외에 외부타이머 카운트가 세 개가 있다.

오른쪽 위의 CLKSTA, CLKEN, CLKDIS가 클럭 공급에 관여한다.

오른쪽 밑의 반달은 INT는 Interrupt이다. 인터럽트 관여하는 레지스터는 CPCS LOVRS         COVFS 등등의 값을    가지고 있다.

이것들에 관여하는 레지스터는 TC_IDRx 레지스터이다.



4. TC_IDRx 레지스터에서 모든 인터럽트에 관여하는 것들을 꺼준다.


보다시피 각각 1을 밀어주면 비활성화 된다.

 


5. TC 인터럽트 상태 레지스터

샘플 프로그램에 따르면 한번 읽어주면 초기화가 된다고 되어 있다.

레지스터에 접속해서 한번 읽어들이기만 하면 된다.

 

 

6. TC CMR(Channel Mode Register) 설정



우리는 TIMER_CLOCK4(MCK/128)을 선택하기 위해서 TCCLKS를 0x3으로

설정하여 리셋시키고, RC를 비교하기 전에 카운터를 시작한다.

 

 

7. 분주비 128일 때 375번 카운트

 분주비가 128일 때 375까지 카운트되면 인터럽트 주기가 1ms단위로 T/C인터럽트가 발생한다.

 

9. TC0의 핸들러 함수를 AIC에 등록하고, 엣지 우선순위로 할당하기

AIC에 TC0_Handler함수를 등록하고, 인터럽트 모드 레지스터에서 상승엣지,

우선순위를 가장 낮게 설정한다. 

 

여기서부터는 위에서 구현했던 소스와 반대로 활성화 시키는 것이기 때문에 설명만 덧붙이겠다.

 

 

10. 인터럽트 명령 클리어 시키기

TC0의 인터럽트 명령을 클리어 시켜준다.

 


11. RC 비교 인터럽트 활성화 시키기

RC compare 인터럽트를 활성화 시킨다.

 

12. AIC 인터럽트 활성화 시키기

 AIC 인터럽트를 활성화 시킨다.

 

13. Counter Clock 활성화 시키기 

 

카운터 클럭을 활성화 시킴.

 

 

14. Counter Clock Strat

13번 그림 참조

카운터 클럭 갯수를 세기 시작한다.

 

 

TC.c의 모든 소스코드이다.

설명은 주석으로 대신하겠다.

 

 

메인 함수이다. 이런식으로 각각 호출하여 딜레이를 1초로 두었고, 이를 실행하니.....

 

결과 

 

자~~알 된다!!!

 

main.zip

 

 

 

 

 

 

 오예~드디어 끝!!

 

 

728x90