?? timer.c
字號:
/************************************************************************/
/* PROGRAMER: CHAE, BYOUNG-CHEOL */
/* PROGRAM : TIMER.C */
/* COMPILER : BORLAND C/C++ 3.1 FOR DOS */
/************************************************************************/
#include ".\header\main.h"
void __interrupt far INT_Timer0(void);
void __interrupt far INT_Timer1(void);
void __interrupt far INT_Timer2(void);
unsigned int Timer1, Timer2, Timer3;
/************************************************************************/
/* NAME : */
/* FUNCTION : */
/* ARGUMENT : */
/* RETURNS : */
/************************************************************************/
void static __interrupt INT_Timer0(void)
{
OSIntEnter();
OSTimeTick();
outpw(INT_EOI, EOITYPE_TMR0);
OSIntExit();
}
/************************************************************************/
/* NAME : */
/* FUNCTION : */
/* ARGUMENT : */
/* RETURNS : */
/************************************************************************/
void static __interrupt INT_Timer1(void)
{
OSIntEnter();
outpw(INT_EOI, EOITYPE_TMR1);
OSIntExit();
}
/************************************************************************/
/* NAME : */
/* FUNCTION : */
/* ARGUMENT : */
/* RETURNS : */
/************************************************************************/
void static __interrupt INT_Timer2(void)
{
OSIntEnter();
outpw(INT_EOI, EOITYPE_TMR2);
OSIntExit();
}
/***********************************************************************/
/* NAME : TIMER_initialize */
/* FUNCTION : */
/* ARGUMENT : NONE */
/* RETURN : NONE */
/***********************************************************************/
void TIMER_Initialize(void)
{
poke(0x0000, ITYPE_TMR0*4, FP_OFF(INT_Timer0));
poke(0x0000, ITYPE_TMR0*4+2,FP_SEG(INT_Timer0));
//poke(0x0000, ITYPE_TMR0*4, FP_OFF(OSTickISR));
//poke(0x0000, ITYPE_TMR0*4+2,FP_SEG(OSTickISR));
poke(0x0000, ITYPE_TMR1*4, FP_OFF(INT_Timer1));
poke(0x0000, ITYPE_TMR1*4+2,FP_SEG(INT_Timer1));
poke(0x0000, ITYPE_TMR2*4, FP_OFF(INT_Timer2));
poke(0x0000, ITYPE_TMR2*4+2,FP_SEG(INT_Timer2));
outpw(INT_TMR, inpw(INT_TMR) | INT_PRI7);
// CPU clock = 40Mhz
// Timer reference = 40/10 = 10MHz
// TIMER 0,1 are prescaled by TIMER2
TIMER_Control1(TIMER0, TMR_START | TMR_INT | TMR_CONT | TMR_2PRES,
0x00, 1000/OS_TICKS_PER_SEC, 1000/OS_TICKS_PER_SEC);
// TIMER1 is prescaled by TIMER2
TIMER_Control1(TIMER1, TMR_START | TMR_INT | TMR_CONT | TMR_2PRES,
0x00, 50, 50); // 50ms
TIMER_Control1(TIMER2, TMR_START | TMR_INT | TMR_CONT,
0x00, 0x2710, 0xFFFF); // 1ms
//TIMER_Control2(TIMER0, 0);
//TIMER_Control2(TIMER1, 1);
//TIMER_Control2(TIMER2, 1);
}
/***********************************************************************/
/* NAME : */
/* FUNCTION : */
/* ARGUMENT : NONE */
/* RETURN : NONE */
/***********************************************************************/
void TIMER_Control1(int ch, word ctrl, word count, word MaxA, word MaxB)
{
switch (ch)
{
case TIMER0:
outpw(TMR0_CTL, ctrl);
outpw(TMR0_CNT, count);
outpw(TMR0_MAXA, MaxA);
outpw(TMR0_MAXB, MaxB);
break;
case TIMER1:
outpw(TMR1_CTL, ctrl);
outpw(TMR1_CNT, count);
outpw(TMR1_MAXA, MaxA);
outpw(TMR1_MAXB, MaxB);
break;
case TIMER2:
outpw(TMR2_CTL, ctrl);
outpw(TMR2_CNT, count);
outpw(TMR2_MAXA, MaxA);
break;
}
}
/***********************************************************************/
/* NAME : */
/* FUNCTION : */
/* ARGUMENT : NONE */
/* RETURN : NONE */
/***********************************************************************/
void TIMER_Control2(int ch, int on_off)
{
disable();
switch (ch)
{
case TIMER0:
if (on_off)
outpw(TMR0_CTL, inpw(TMR0_CTL) | TMR_START);
else
outpw(TMR0_CTL, inpw(TMR0_CTL) & ~TMR_START);
break;
case TIMER1:
if (on_off)
outpw(TMR1_CTL, inpw(TMR1_CTL) | TMR_START);
else
outpw(TMR1_CTL, inpw(TMR1_CTL) & ~TMR_START);
break;
case TIMER2:
if (on_off)
outpw(TMR2_CTL, inpw(TMR2_CTL) | TMR_START);
else
outpw(TMR2_CTL, inpw(TMR2_CTL) & ~TMR_START);
break;
}
enable();
}
/***********************************************************************/
/* NAME : TIMER_Delay */
/* FUNCTION : delay ?? miliseconds */
/* ARGUMENT : value - delay value */
/* RETURN : NONE */
/***********************************************************************/
void TIMER_Delay(unsigned int value)
{
TMR_ON();
TIMER_Control2(TIMER2, 1);
Timer3 = value;
while (Timer3) ;
TIMER_Control2(TIMER2, 0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -