[CANTUS] Timer 테스트 - 타이머 인터럽트를 이용하여 1초 만들기
CANTUS의 Timer는 15bit Pre-scaler를 내장한 32 Bit Timer로 8채널을 가지고 있다.
엄청 많은데... 혹 다른 기능들 하고 겹치진 않겠지? (좀더 알아볼 필요가 있다.) 아무튼 스펙은 좋다.
Timer Interrupt를 사용하기 위해 Interrupt.c의 setinterrupt() 함수를 사용하면 된다.
BOOL setinterrupt(INTNUM_TIMER0, void (*fp)())
Interrupt Service Routine(ISR)이 Vector Table에 Setting되면 Interrupt를 Enable 한다.
void EnableInterrupt(INTNUM_TIMER0, TRUE);
CANTUS 타이머 제어 레지스터
Lib사용할 경우 아래 함수로 쉽게 설정 가능하다.
BOOL settimer(int nCh,U32 ms);
CANTUS의 Timer는 15bit Pre-scaler를 내장한 32 Bit Timer로 8채널을 가지고 있다.
엄청 많은데... 혹 다른 기능들 하고 겹치진 않겠지? (좀더 알아볼 필요가 있다.) 아무튼 스펙은 좋다.
Timer Interrupt를 사용하기 위해 Interrupt.c의 setinterrupt() 함수를 사용하면 된다.
BOOL setinterrupt(INTNUM_TIMER0, void (*fp)())
Interrupt Service Routine(ISR)이 Vector Table에 Setting되면 Interrupt를 Enable 한다.
void EnableInterrupt(INTNUM_TIMER0, TRUE);
CANTUS 타이머 제어 레지스터
Lib사용할 경우 아래 함수로 쉽게 설정 가능하다.
BOOL settimer(int nCh,U32 ms);
CANTUS Timer 테스트 예제코드
#include "system.h"
#include "serial.h"
volatile unsigned int gTimerTick1_1ms = 0;
//----------------------------------------------------------------------------
//Timer Interrupt Handler
void Timer0ISR(void)
{
gTimerTick1_1ms++;
}
//----------------------------------------------------------------------------
int main()
{
int flag = 0;
SystemInit();
Led1Init();
Led1On();
U0_Init(BAUD_115200);
DebugPrint("adStar EVM - Timer Test\r\n");
//Timer 초기화
InitInterrupt();
setinterrupt(INTNUM_TIMER0,Timer0ISR);
settimer(0,1);
while(1)
{
if( gTimerTick1_1ms>1000)
{
gTimerTick1_1ms = 0;
flag ^= 1;
if(flag)Led1On();
else Led1Off();
}
}
return 0;
}
반응형