⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 本source code 為s3c4510的bootloader
💻 C
📖 第 1 页 / 共 3 页
字号:
      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 + -