타이머 카운터에 대해
cpu 4Hz에 분주비 2일때
48000000 1/48000000 * 48000000 = 1초
AVR할 때도 알겠지만 주파수 등등 이외에는 다 비슷비슷하다.
분주비 계산이다 참고바람.
본격적으로 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번 그림 참조
카운터 클럭 갯수를 세기 시작한다.
설명은 주석으로 대신하겠다.
결과
자~~알 된다!!!
오예~드디어 끝!!
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
20140718 일일보고서 박영주 (15) | 2014.07.21 |
---|---|
20140717일일보고서 문대영 (12) | 2014.07.17 |
2014.07.17 uSonic 소스코드 (0) | 2014.07.17 |
20140716 수요일 업무일지 김화린 [출석번호10번] (15) | 2014.07.16 |
ARM 타이머 카운트 (0) | 2014.07.15 |
2014.07.14 일일보고서 번호8번 김진철 (13) | 2014.07.14 |
Interrup LED 켜기 (0) | 2014.07.14 |
업무일지 출석번호 7번 김재성 (12) | 2014.07.11 |