📄 timer.c
字号:
tm.tm_sec , tm.tm_ms ); if(kbd_hit()) { ch = get_byte(); if(ch == KEY_ESC) { break; } } } if(dev == '1') { TimerReset(1); } else { TimerReset(0); }// Disable_Int(nGLOBAL_INT); /* disable interrupt source */}/*************************************************************************//* *//* NAME : TimerInit(timer device, time periode) *//* *//* FUNCTIONS : Initialize the TIMER0,1. *//* *//* EXAMPLES : *//* TimerInit(TIMER_DEV0,ONE_SECOND/TICKS_PER_SECOND); *//* *//* Where, the TIMER_DEV0 means timer0. *//* ONE_SECOND = 1000, *//* TICKS_PER_SECOND = 100, *//* then timer0 timer periode become to 10ms. *//* *//* VARIABLES USED *//* *//* *//* HISTORY *//* *//* NAME DATE REMARKS *//* *//* in4maker 06-07-1999 Created initial version 1.0 *//* *//*************************************************************************/void TimerInit(int num, int ms) { if(num == 1) {/* for TIMER 1 */ Disable_Int(nTIMER1_INT); SysSetInterrupt(nTIMER1_INT, tm1isr); TDATA1 = t_data_ms(ms); /* unit is [ms] */ TCNT1 = 0x0; #ifdef TIMER_TOUT TMOD |= TMOD1_TOGGLE; /* Toggle pulse will be out to port */#else TMOD &= ~TMOD1_TOGGLE; /* Interval mode */#endif Enable_Int(nTIMER1_INT); /* Timer interrupt enable */ Enable_Int(nGLOBAL_INT); /* enable global interrupt */ } else if(num == 0) {/* for TIMER0 */ Disable_Int(nTIMER0_INT); /* disable interrupt source */ SysSetInterrupt(nTIMER0_INT, tm0isr);/* set timer ISR */ TDATA0 = t_data_ms(ms); /* timer period */ TCNT0 = 0x0; /* timer 0 counter */#ifdef TIMER_TOUT TMOD |= TMOD0_TOGGLE; #else TMOD &= ~TMOD0_TOGGLE; /* Interval mode */#endif Enable_Int(nTIMER0_INT); /* Enable interrupt source */ Enable_Int(nGLOBAL_INT); /* enable global interrupt */ }}// return 1 if timer num enabled, else return 0int TimerEnabled(int num) {/* Timer 0 enable */ if( ((num == 0) && (TMOD & TMOD0_EN) != 0 && (INTMASK & TIMER0_INT) == 0) || ((num == 1) && (TMOD & TMOD1_EN) != 0 && (INTMASK & TIMER1_INT) == 0) ) { /* timer enabled, int enabled */ return(1); } else { return(0); } }/*************************************************************************//* *//* NAME : tmReset(timer device ) *//* *//* FUNCTIONS : Clear and initialize the TIMER0 or TIMER1 *//* *//* EXAMPLES : *//* tmReset(TIMER_DEV0); *//* *//* Where, the TIMER_DEV0 means timer0. *//* *//* VARIABLES USED *//* *//* *//* HISTORY *//* *//* NAME DATE REMARKS *//* *//* in4maker 06-07-1999 Created initial version 1.0 *//* *//*************************************************************************/void TimerReset(int num){ if(num == 1) { TMOD &= ~TMOD1_EN; /* Clear Timer mode register */ TDATA1 = 0; /* Clear Timer data register */ TCNT1 = 0xffffffff; /* Clear timer counter register *//* clear timer 1 variables */ tm1.tm_ms = 0; /* millisecond */ tm1.tm_sec = 0; /* second */ tm1.tm_min = 0; /* minute */ tm1.tm_hour = 0; /* hour */ tm1.tm_mday = 0; /* month day */ tm1.tm_mon = 0; /* month */ tm1.tm_year = 0; /* year */// clk_tick1 = 0; /* timer tick */ }else if(num == 0) { TMOD &= ~TMOD0_EN; /* Clear Timer mode register */ TDATA0 = 0; /* Clear Timer data register */ TCNT0 = 0xffffffff; /* Clear timer counter register *//* clear timer 0 variables */ tm0.tm_ms = 0; /* millisecond */ tm0.tm_sec = 0; /* second */ tm0.tm_min = 0; /* minute */ tm0.tm_hour = 0; /* hour */ tm0.tm_mday = 0; /* month day */ tm0.tm_mon = 0; /* month */ tm0.tm_year = 0; /* year */// clk_tick0 = 0; /* timer tick */ }}/*************************************************************************//* *//* NAME : PrtSysTime(timer device, timer display string) *//* *//* FUNCTIONS : Hour:Minutes:second of the timer device will be displyed *//* *//* EXAMPLES : *//* PrtSysTime(TIMER_DEV0,"Total test time"); *//* *//* Print: Total test time is 3:30:20.8 *//* *//* VARIABLES USED *//* *//* HISTORY *//* *//* NAME DATE REMARKS *//* *//* in4maker 06-07-1999 Created initial version 1.0 *//* *//*************************************************************************/void GetSysTime(int num, TIME * tm){ if(num == 1) { /* get time from timer 1 */ tm->tm_ms = (clk_tick1%TICKS_PER_SECOND); /* millisecond */ tm->tm_sec = tm1.tm_sec; /* second */ tm->tm_sec += (int)(clk_tick1/TICKS_PER_SECOND); tm->tm_min = tm1.tm_min; /* minute */ tm->tm_hour = tm1.tm_hour; /* hour */ tm->tm_mday = tm1.tm_mday; /* month day */ tm->tm_mon = tm1.tm_mon; /* month */ tm->tm_year = tm1.tm_year; /* year */ } else if(num == 0) {/* get time from timer 0 */ tm->tm_ms = (clk_tick0%TICKS_PER_SECOND); /* millisecond */ tm->tm_sec = tm0.tm_sec; /* second */ tm->tm_sec += (int)(clk_tick0/TICKS_PER_SECOND); tm->tm_min = tm0.tm_min; /* minute */ tm->tm_hour = tm0.tm_hour; /* hour */ tm->tm_mday = tm0.tm_mday; /* month day */ tm->tm_mon = tm0.tm_mon; /* month */ tm->tm_year = tm0.tm_year; /* year */ }}int TimerWaitMs(int tn, U32 mswait){ int enabled; U32 msstart; // start millisecond U32 mscur; // current millisecond TIME tm; // TIME struct if(tn < 0 || tn > 1) { // check timer num return(0); } enabled = TimerEnabled(tn); if(enabled == 0) { // timer num not started => start TimerReset(tn); // reset timer 0 TimerInit(tn,(ONE_SECOND/TICKS_PER_SECOND));// init timer 0 TimerStart(tn); // start timer 0 } Enable_Int(nGLOBAL_INT); /* enable global interrupt */ GetSysTime(tn, & tm); mscur = msstart = tm.tm_ms + (tm.tm_sec + tm.tm_min * 60) * 1000; while(mscur < msstart + mswait) { GetSysTime(tn, & tm); mscur = tm.tm_ms + (tm.tm_sec + tm.tm_min * 60) * 1000; } if(enabled == 0) { // restore timer state TimerStop(tn); } return(1);} /*************************************************************************//* *//* NAME : tm0isr() *//* *//* FUNCTIONS : Timer0 interrupt service routine. *//* *//* EXAMPLES : *//* *//* SysSetInterrupt(nTIMER0_INT, tm0isr); *//* *//* VARIABLES USED *//* *//* HISTORY *//* *//* NAME DATE REMARKS *//* *//* in4maker 06-07-1999 Created initial version 1.0 *//* *//*************************************************************************/void tm0isr(void){ clk_tick0++; if(clk_tick0 >= TICKS_PER_SECOND) { clk_tick0 = 0; if(tm0.tm_sec++ > 59) { tm0.tm_sec = 0; if(tm0.tm_min++ > 59) { tm0.tm_min = 0; if(tm0.tm_hour++ > 23) { tm0.tm_hour = 0; if(tm0.tm_mday++ > 30) { tm0.tm_mday = 0; if(tm0.tm_mon++ > 11) { tm0.tm_mon = 0; tm0.tm_year++; } } } } } } }/*************************************************************************//* *//* NAME : tm1isr() *//* */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -