ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Atmega128의 타이머/카운터 및 관련 레지스터
    AVR study 2013. 1. 25. 13:23
    반응형



    ATmega 128의 타이머/카운터는 타이머/카운터0, 타이머/카운터1, 타이머/카운터2, 타이머/카운터3으로 총 4개가 있다.

    이 타이머/카운터는 비트수에 따라서 분류하는것이 일반적이다. 8비트는 타이머/카운터0, 타이머/카운터2 이고

    16비트는 타이머/카운터1, 타이머/카운터3 이다.

     

    8비트 타이머와 16비트 타이머의 큰 차이점은 8비트 타이머는 0xFF까지 셀 수 있고, 16비트 타이머는 0xFFFF까지 셀 수 있기 때문에 계수의 범위가 늘어나고 저주파 발생이 가능하다는 점이 있다.

     

    그 중에서 8비트 타이머/카운터0과 타이머/카운터2의 차이점은 외부클럭 입력을 받아들인다는 점에서 차이가 있다.

     

     


     

    타이머/카운터 관련 레지스터

     

    1. 타이머/카운터 제어 레지스터(Timer/Counter Control Register) : TCCRn (n=0,2)

    FOCn WGMn0 COMn1 COMn0 WGMn1 CSn2 CSn1

    CSn0

    FOCn : Force Output Compare

    이 비트에 1을 쓰면 파형 생성 유닛에 즉각적인 비교일치를 전달한다.

    WGMn1:0 : 파형 생성 모드를 결정하는 비트. Normal, PWM, Phase Correct, CTC, Fast PWM의 모드를 조정할 수 있다.

    COMn1:0 : 비교일치 출력 모드로서 출력핀 OCn의 동작을 제어한다. 이 비트들 중 하나 이상의 비트가 set 되면 공유하는 범용 I/O핀의 기능을 대신한다. 이 때 OCn핀을 사용하기 위해서 공유 범용 I/O 핀의 방향을 출력으로 설정해야 한다.

    CSn2:0 : 클록 선정 비트.

     

     

    위의 표와 같이 프리스케일링(분주비 설정)을 할 수 있다.

     

    2. 타이머/카운터 레지스터(Timer Counter Register) : TCNTn (n=0,2)

    TCNT7

    TCNT6

    TCNT5

    TCNT4

    TCNT3

    TCNT2

    TCNT1

    TCNT0

    타이머/카운터 레지스터로 실제로 시스템 내부 클럭수에 따라서 카운팅 하는 레지스터이다.

    비트를 적절하게 설정해서 시작 카운팅 숫자를 지정해줄 수 있다. 8비트 타이머/카운터 에서는 0~255까지의 숫자 범위 안에서

    시작 카운팅 숫자를 지정할 수 있다. 예를 들어 TCNT0=0x06 이라고 레지스터 값을 지정해주면 6부터 카운팅이 시작된다.

     

    3. 출력 비교 레지스터(Output Compare Register) : OCRn (n=0,2)

    OCR7

    OCR6

    OCR5

    OCR4

    OCR3

    OCR2

    OCR1

    OCR0

    타이머/카운터 레지스터 TCNT 값과 비교해서 OC2 단자에 출력을 발생하기 위한 8비트 값을 저장하는 레지스터이다.

    OCR 레지스터에서 주의할 점은 이중 버퍼 구조로 되어 있어서 사용자가 동작 중에 값을 수정한다 하더라도 바로 바뀌지 않고

    TOP혹은 BOTTOM에 도달했을 때 변경된다. 따라서 Glitch가 발생하지 않는다. 그런데 항상 그런것은 아니다. PWM모드가 아닌 일반 CTC 모드에서는 이중 버퍼링 구조로 작동하지 않으므로 글리치가 발생할 수도 있다.

     

    4. 타이머/카운터 인터럽트 플래그 레지스터(Timer/Counter Interrupt Flag Register) : TIFR

    OCF2

    TOV2

    ICF1

    OCF1A

    OCF1B

    TOV1

    OCF0

    TOV0

    OCFn : 출력 비교 플래그. 타이머값 TNCTn과 비교 레지스터 값 OCRn이 같을 때 플래그 OCFn이 SET된다. 이 플래그는 해당 인터럽트 서비스루틴이 수행되면 자동으로 CLEAR된다.

    TOVn : 타이머값 TCNTn에 오버플로우가 발생하면 플래그 TOVn이 SET된다. 이 플래그는 해당 인터럽트 서비스루틴이 수행되면 자동으로 CLEAR된다.

     

    5. 타이머/카운터 인터럽트 마스크 레지스터(Timer/Counter Interrupt Mask Register) : TIMSK

    OCIE2

    TOIE2

    TICIE1

    OCIE1A

    OCIE1B

    TOIE1

    OCIE0

    TOIE0

    OCIEn : 출력 비교일치 인터럽트 허용. (Output Compare Match Interrupt Enable)

    OCIEn 비트와 SREG의 1비트가 SET 되면 출력 비교일치 인터럽트를 사용할 수 있게 된다.

    TOIEn : 타이머 오버플로 인터럽트 허용 (Timer/Counter Overflow Interrupt Enable)

    TOIEn 비트와 SREG의 1비트가 SET 되면 타이머 오버플로 인터럽트를 사용할 수 있게 된다.

     

    6. 비동기 상태 레지스터(Asynchronous Status Register) : ASSR (타이머/카운터 0 에만 존재)

    -

    -

    -

    -

    AS0

    TCN0UB

    OCR0UB

    TCR0UB

    외부 클럭에 의하여 비동기 모드로 동작하는 경우에 관련된 기능을 수행한다.

     

    7. 특수기능 IO 레지스터(Special Function IO Register) : SFIOR

    TSM

    -

    -

    -

    ACME

    PUD

    PSR0

    PSR321

     

     

    이외에도 SREG(AVR Status REGister)가 있는데 최상위 bit(I bit)을 SET 시키면 모든 인터럽트를 허용하게 된다.

     

    반응형
Designed by Tistory.