[FreeScale]/KINETIS2013. 10. 20. 23:00

[FRDM-KL25Z] Kinetis - Timer 테스트

[FRDM-KL25Z] Kinetis - Timer 테스트




KL25Z 타이머 테스트 정리

Timer

-Six channel Timer/PWM (TPM)

-Two 2-channel Timer/PWM (TPM)

-Periodic interrupt timers

-16-bit low-power timer (LPTMR)

-Real-time clock




KL25Z 타이머 레지스터

PIT_LDVALn

Timer Start Value

Sets the timer start value. The timer will count down until it reaches 0, then it will generate an interrupt and

load this register value again. Writing a new value to this register will not restart the timer; instead the

value will be loaded after the timer expires. To abort the current cycle and start a timer period with the new

value, the timer must be disabled and enabled again.



PIT Lower Lifetime Timer Register (PIT_LTMR64L)

Freescale 사의 Kinetis 시리즈에서 특이한점으로 64비트 타이머가 있다.

타이머 0, 1을 이용하여 64비트 타이머로 사용할 수 있다고 한다. 레지스터 LTMR64H를 먼저 읽고 LTMR64L를 읽으면 된다.




KL25Z 타이머  초기화 함수

void Timer1_Init(void)

{

    SIM_SCGC6 |= SIM_SCGC6_PIT_MASK; // enable PIT module

    

    //Enable PIT Interrupt in NVIC

    enable_irq(INT_PIT - 16);

    

//MCR레지스터의 MDIS(BIT30)비트가 0이 되면 Timer Enable 된다.

    Cbi(PIT_MCR, BIT30);

    PIT_TCTRL1 = 0x00; // disable PIT0

//타이머 시작값

    PIT_LDVAL1 = 48000;  

// enable PIT0 and interrupt

    PIT_TCTRL1 = PIT_TCTRL_TIE_MASK; 

    // clear flag

PIT_TFLG1 = 0x01; 

    

//Start Timer

Sbi(PIT_TCTRL1, PIT_TCTRL_TEN_MASK);

}





KL25Z 타이머  인터럽트 핸들러

#undef  VECTOR_038

#define VECTOR_038 Pit1_isrv


extern void Pit1_isrv(void);


//-----------------------------------------------------------------------------

// Timer1 Interrupt Handler

void Pit1_isrv(void)

{  

    PIT_TFLG1 = 0x01; // clear flag

gTimerTick1_1ms++;

}

//-----------------------------------------------------------------------------





KL25Z 타이머  테스트 예제코드

KL25Z 의 타이머를 이용하여 1초단위로 Led를 On/Off 하는 예제

int main (void)

{

_SystemInit();

Led1Init();

Led1Off();

Led2Init();

Led2On();

DebugInit(BAUD_115200);

DebugPrint("LKM25 Timer Test\r\n");

Timer1_Init();

while(1)

    {

if(gTimerTick1_1ms>1000)

{

gTimerTick1_1ms = 0;

Led1Toggle();

}

}

}



Posted by nexp

댓글을 달아 주세요