timer.c
上传用户:yyhongfa
上传日期:2013-01-18
资源大小:267k
文件大小:6k
开发平台:

C/C++

  1. /****************************************************************************
  2. uart.c
  3. ****************************************************************************/
  4. #ifndef TIMER_C
  5. #define TIMER_C
  6. #include  "config.h"
  7. //#include "IAP.h"
  8. ////#include "ffs.h"
  9. #include "uart.h"
  10. #include "timer.h"
  11. /*
  12.    create by skier 2005.01.17
  13.    */
  14.    sys_timeout  g_sys_timer[MAX_SYS_TIMER];
  15.    sys_time system_time;
  16.    
  17. //delete a timer from system
  18. void sys_timer_stop(sys_timeout_handler h, void *arg)
  19. {
  20.       int i;
  21. //DEBUG_FUNCTION("sys_timer_stop()")
  22.       for(i = 0; i < MAX_SYS_TIMER; i++)
  23.        {
  24.             if(g_sys_timer[i].h  EQ h)
  25.             {
  26.                   g_sys_timer[i].ms_time = 0;
  27.     g_sys_timer[i].h  = NULL;
  28.     g_sys_timer[i].arg = NULL;
  29.    break;
  30.             }
  31.        }
  32.       if(i EQ MAX_SYS_TIMER)
  33.       {
  34.            DEBUG_EVENT("Do not find timer, unexpect error!");
  35.       }
  36. }
  37. //add a timer to system
  38. void  sys_timer_start(u32_t msecs, sys_timeout_handler h, void *arg)
  39. {
  40.         int i;
  41. //DEBUG_FUNCTION("sys_timer_start()")
  42. sys_timer_stop(h, arg);
  43.  for(i = 0; i < MAX_SYS_TIMER; i++)
  44.         {
  45.             if(g_sys_timer[i].h   EQ NULL)
  46.             {
  47.                   g_sys_timer[i].ms_time = msecs;
  48.     g_sys_timer[i].h  = h;
  49.     g_sys_timer[i].arg = arg;
  50.    break;
  51.             }
  52.        }
  53. if(i EQ MAX_SYS_TIMER)
  54.       {
  55.            DEBUG_ERR("Old timer do not delete from list, unexpect error!");
  56.       }
  57. }
  58. u32_t  sys_jiffies(void)
  59. {
  60.     return system_time.ms_tick ;
  61. }
  62. /*
  63. *Interrupted Every SYS_TICK ms
  64. *support basic time
  65. *check user timer,eg:PPP/TCP
  66. */
  67. void sys_time_tick(void)
  68. {
  69.        int i;
  70.    //updata system time
  71.    system_time.ms_tick+= SYS_TICK;
  72.    
  73.   if((system_time.ms += SYS_TICK) >= 1000)
  74.   {
  75.        system_time.ms = 0;
  76. system_time.sec_tick++;
  77.  
  78. if(++system_time.sec EQ 60)
  79. {
  80.        system_time.sec = 0;
  81.    
  82. if(++system_time.min EQ 60)
  83. {
  84.      system_time.min = 0;
  85.      if(++system_time.hour  EQ 24)
  86.      {
  87.           system_time.hour = 0;
  88.    system_time.day++;
  89.      }
  90. }
  91. }
  92.   }
  93. //check timer
  94.  for(i = 0; i < MAX_SYS_TIMER; i++)
  95.         {           
  96.      if(g_sys_timer[i].h   NEQ NULL)
  97.             {
  98.                   if(g_sys_timer[i].ms_time  > SYS_TICK)/*this timer is untimeout*/
  99.               g_sys_timer[i].ms_time -= SYS_TICK;
  100.     else                                                            /* this timer is timeout*/
  101. g_sys_timer[i].ms_time = 0;
  102.             }    
  103.        }
  104. }
  105. //check whether a timer is timeout, if true, run it
  106. void check_sys_timer(void)
  107. {
  108.         int i;
  109.  for(i = 0; i < MAX_SYS_TIMER; i++)
  110.  {
  111.       if((g_sys_timer[i].h   NEQ NULL)
  112.                 AND (g_sys_timer[i].ms_time  EQ 0) )
  113.             {
  114.                     g_sys_timer[i].h (g_sys_timer[i].arg);
  115.             }
  116.  }
  117. }
  118. /************************************
  119.  initialize the sytem time
  120.  ***********************************/
  121.  void sys_timer_init(void)
  122.  {
  123.        int i;
  124.       for(i = 0; i < MAX_SYS_TIMER; i++)
  125.        {
  126.              g_sys_timer[i].ms_time = 0;
  127.       g_sys_timer[i].h  = NULL;
  128.       g_sys_timer[i].arg = NULL;
  129.        }
  130. //initialize system time
  131. system_time.sec_tick = 0;
  132. system_time.ms_tick = 0;
  133. system_time.day = 0;
  134. system_time.hour = 0;
  135. system_time.min = 0;
  136. system_time.sec = 0;
  137. system_time.ms = 0;
  138. lpc2104_timer1_start(SYS_TICK);
  139. }
  140. /*
  141.  * return the time of seconds ,
  142.  *which is ticked every second from system reset
  143. */
  144. u32_t get_sys_tick(void)
  145. {
  146.    return system_time.sec_tick;
  147. }
  148. /*
  149. * return the time of system
  150. */
  151. sys_time  get_sys_time(void)
  152. {
  153.     return system_time;
  154. }
  155. /*
  156. *add system run time to the head of DEBUG information
  157. */
  158. void debug_sys_time(void)
  159. {
  160.        const  CHAR ascTable[11] = {"0123456789"};
  161. sys_time time = get_sys_time();
  162.        sendString_2_user("rnrn<");
  163. //day
  164. sendByte_2_user(ascTable[time.day/10000]);  
  165. sendByte_2_user(ascTable[(time.day%10000)/1000]);  
  166. sendByte_2_user(ascTable[(time.day%1000)/100]);   
  167. sendByte_2_user(ascTable[(time.day%100)/10]);  
  168. sendByte_2_user(ascTable[time.day%10]); 
  169.        sendString_2_user("-");
  170.        //hour
  171. sendByte_2_user(ascTable[time.hour/10]);  
  172. sendByte_2_user(ascTable[time.hour%10]);
  173.        sendString_2_user(":");
  174.    
  175. //minute
  176. sendByte_2_user(ascTable[time.min/10]);
  177. sendByte_2_user(ascTable[time.min%10]);
  178. sendString_2_user(":");
  179. //second
  180. sendByte_2_user(ascTable[time.sec/10]);
  181. sendByte_2_user(ascTable[time.sec%10]);
  182.        sendString_2_user(":");
  183.    
  184. //ms
  185. sendByte_2_user(ascTable[time.ms/100]);
  186. sendByte_2_user(ascTable[(time.ms%100)/10]);
  187. sendByte_2_user(ascTable[time.ms%10]);
  188.        sendString_2_user(">");
  189.     
  190. }
  191. //int flag = 0;
  192. //#define   LEDCON 0x00003c00
  193. void __irq IRQ_timer1(void)
  194. {
  195.     sys_time_tick();
  196.    /*if(flag%2 == 0)
  197. IOCLR = LEDCON;
  198.    else
  199.             IOSET = LEDCON;
  200.    flag++;*/
  201.    T1IR = 0x01;
  202.    VICVectAddr = 0x00;
  203. }
  204. void lpc2104_timer1_start(u16_t ms)
  205. {
  206.    T1PR = 0;
  207.    T1MCR = 0x03;
  208.    T1MR0 = 11059*ms;
  209.    T1TCR = 0x03;
  210.    T1TCR = 0x01;  
  211.  VICIntSelect = 0x00;/*IRQ interrupt*/
  212.  VICVectCntl2 = 0x25;/*Enable interrupt, the source of interrupt is TIMER1*/
  213.  VICVectAddr2 = (int)IRQ_timer1;
  214.  VICIntEnable |= 0x00000020;/*Enable timer1 interrupt*/
  215. }
  216. /*****************************
  217.   STOP_TIMER1
  218.  ****************************/
  219.  void lpc2104_timer1_stop(void)
  220. {
  221.       DEBUG_FUNCTION("rn-----stop timer1");
  222.   
  223.       T1TCR = 0x00;
  224.       T1IR = 0x01;   
  225. }
  226. /*****************************
  227.   STOP_TIMER0
  228.  ****************************/
  229.  void lpc2104_timer0_stop(void)
  230. {
  231.       DEBUG_FUNCTION("rn-----stop timer0");
  232.   
  233.       T0TCR = 0x00;
  234.       T0IR = 0x01;   
  235. }
  236. #endif