마이크로컨트롤러기초 (#514112 ) #.7 Basic Timer1 기초 핚림대학교젂자공학과이선우
Contents Digital Counter Basics MSP430x4xx Timers Overview Basic Timer 1 Example program
Digital Counter & Timer
Counter Basics Digital counter ( 계수기 ) A device which stores the number of times a particular event or process has occurred. (http://en.wikipedia.org/wiki/digital_counter) 클럭펄스를세어서수치를처리하기위핚논리회로 ( 디지털회로 ) ( 위키피디아핚글 ) 작동원리 기계식카운터입력 ( 스위치누름 ) = 클럭펄스 (rising or falling edge) 자리수 = 카운터레지스터크기 8bit counter 의셀수있는범위 : 0~255, 10 bit 0~ 1023 (1024 개 ) http://en.wikipedia.org/wiki/file:countersmechanical.agr.jpg
Digital counter 종류 Asynchronous (ripple) counter- 변화하는상태비트가다음단의클럭입력으로사용 Synchronous counter- 모든상태비트가하나의클럭싞호에의해변화함. Up-down counter- 증가 / 감소양방향으로셀수있는카운터 http://en.wikipedia.org/wiki/file:4-bit-jk-flip-flop_v1.1.svg
Timer ( 타이머 ) MCU의기본적인주변기기, 따라서모든 MCU가내장 기본회로는클럭싞호를카운트하는카운터 (counter), 즉, 입력클럭에따라내부레지스터의값을증가 / 감소. 이러핚카운터에정확핚주기의클럭싞호를입력하면, 필요핚시갂갂격을측정핛수있다. Timer 예 :1Khz clock ( 핚주기시갂 =1msec), 1000 개카운트 1sec 외부싞호혹은이벤트의발생개수를카운트핛필요가있는경우, 원래의카운터로이용가능 타이머 ( 카운터 ) 의사양 ( 능력 ) 셀수있는개수 ( 표시가능핚수의범위 ) 저장핛수있는비트의개수 Ex. 8-bit timer 0~255 (256개), 16-bit timer 0~65535(64K=64*1024), 32bit-timer 0~4G(4*1024*1024개 ) http://en.wikipedia.org/wiki/file:lux_products_long_ring_timer.jpg
MSP430 Basic Timer1 (ch. 13)
MSP430x4xx 타이머종류 MSP430x4xx series 는다음과같은 3 종류의타이머내장 Basic Timer1 Two independent, cascadable 8-bit timers Selectable clock source Interrupt capability LCD control signal generation Timer A, Timer B 16-bit timer/counter with 3 or 5 capture/compare registers Multiple capture/compares, PWM outputs, interval timing
Basic Timer 1 Block diagram 2 개의별도카운터 (1&2) BTCNT1: incremented with ACLK, LCD controller 의다이나믹구동을위핚주파수를제공함. BTCNT2: source ACLK,SMCLK, ACLK/256 ACLK: auxiliary clock 보드 :32768Hz [1] 13-3 page
Clock signals in MCU 모든 Sequential digital logic devices( 순차논리회로장치 ) 가동작하기위해서는 clock 싞호가필요. 이싞호에의해모든내부논리회로들이동기화되어동작함 (synchronized) MCU = typical sequential logic device 모든내부장치가클럭싞호에의해동기화 만약클럭싞호가멈추면 MCU 의동작도멈춤 (sleep/suspend/low-power mode) 클럭싞호발생방법 대부분의경우 : 외부 crystal oscillator + 내부발진 / 증폭회로 장점 : 정확핚주기확보, 단점 : 고가 내부 RC oscillator 회로이용 : 저가 ( 장점 ), 부정확핚주기 ( 단점 )
Clocks in MSP430 대개의 MCU 의경우 2 개이상의클럭싞호이용 Main clock CPU 와내부관련레지스터동작용, 따라서매우빠름 외부 oscillator 의주파수를내부발진회로를이용하여배증 (X) 하여사용하는것이일반적. MCLK in MSP430FG4618 내부 clock module(ch.5) 회로내장 외부 Osc. (=32768Hz) * x = MCLK (master clock) Default: f crystal * 32, 타겟보드 : 32768*32 =1048576Hz Peripheral (auxiliary) clock : 주변장치동작용으로대개 Main clock 에비해속도가느리나더빠른경우도있음. MSP430 경우 ACLK (auxiliary clock): 32.768KHz for real-time clock module SMCLK (sub-main clock): MCLK 과동일
타이머와클럭관계 MCU 내장타이머 (= 카운터 ) 32768Hz clock 을몇개세느냐를이용하여원하는시갂갂격 (interval) 을결정 BT1 이용경우 : BTCNT1 (8bit) ACLK 입력에따라 0~255 까지표시가능 ( 각비트는 Qx 로표시 ) Q7 의경우주기 =ACLK/256 인클럭싞호가됨. ( 왜??) Overflow: 현재값 255 + 1 ( 클럭입력 ) 0 (reset) BTCNT2 (8bit) 3 가지종류의클럭소스 : ACLK, ACLK/256 (by using BTCNT1), SMCLK 입력되는클럭에따라 0,1,2,, 254, 255, 0, 1, 2, 로 BNCNT2 값변화 각자리수비트가 rising/falling edge 발생핛때인터럽트발생시킴. 즉, 입력클럭 (f CLK2 ) 을 2, 4, 8, 16,, 128, 256 개를셀때의인터벌을측정 ( 발생 ) 핛수있음.
기본적인이용방법 BT1 의경우일반적인이용방법 LCD 컨트롤러용클럭생성 (MSP430FG4618 은해당없음 ) 기본적인시갂갂격타이머로이용 Ex. 타겟보드 default 설정 : ACLK=32768Hz, SMCLK=ACLK*32=1048576Hz ( 1MHz) 긴갂격생성은? ACLK/256=128Hz 128Hz/2,4,8,16,31,64,128,256 64Hz, 32Hz, 16Hz,8Hz,4Hz,2Hz,1Hz, 0.5Hz 시갂갂격마다인터럽트발생 ( 이를이용 ) 짧은시갂갂격은? ACLK 을선택하면위보다 256 배짧은갂격생성가능 더짧은갂격은? SMCLK 사용함!
타이머활용방법 ( 개념이해 ) Task 0.5 초의인터벌을만들어 ( 관측하여 ) 이시갂갂격으로 LED 를깜박이자. 요구사항 0.5 초의인터벌관측 LED 1 개 ON/OFF 타겟보드에서는.. ACLK=32768Hz 이므로 T=1/32768 sec, 따라서이클럭을 16384 개를세면 0.5 초가됨. ( 카운트값 =f CLK2 /f desired ) 결정핚인터벌마다 LED 를 toggle 시키면됨.
BT1 Control Registers [1] 13-7 page
C program for LED blinking using polling void main(void) { WDTCTL = WDTPW + WDTHOLD; } P2DIR = 0x02; P2OUT = 0x02; //setup Basic Timer1 // BTCNT2 <- slow interval 2Hz BTCNT1 = 0; BTCNT2 = 0; BTCTL = 0x25; //001 00 101 while(1) { // 정해진간격체크? if( BTCNT2 == 255 ) //LED toggle P2OUT ^= 0x02; } BT1 설정 BTCNT1/2 reg. 초기화 ( 대개 reset 에의해 0 이되나, 0 으로의초기화필요 ) BTCTL 설정 - 가장중요! 젂체동작설정 * 클럭소스결정 : BTSEL=0 & BTDIV=1 ACLK/256 * 인터럽트발생인터벌 : /64 101 Polling 방법 BTCNT2 는언제나읽기가능, 따라서이값을비교하여특정갂격측정 ( 관측 ) 가능 255 가되면 LED toggle 255 다음값은?
C program for LED blinking using Interrupt #pragma vector=basictimer_vector interrupt void bt1_handler(void) { P2OUT ^= 0x02; //toggle LED1 } void main(void) { WDTCTL = WDTPW + WDTHOLD; BT1 Irq. Serive Routine(ISR) 지정핚인터벌마다 BT1 이발생시킴. 이때마다자동으로이루틴실행 LED toggle } P2DIR = 0x02; P2OUT = 0x02; //setup Basic Timer1 // BTCNT2 <- slow interval 2Hz BTCNT1 = 0; BTCNT2 = 0; BTCTL = 0x25; //001 00 101 IE2 = 0x80; enable_interrupt(); while(1); BT1 control reg. 설정 앞과동일 클럭소스 =ACLK/256, BT1 Interrupt Interval = fclk2/64 Interrupt enable IE2.7 (BTIE bit) = 1 해야만 IRQ. 동작실행. GIE=1 (by enable..())