timer.c
上传用户:yyhongfa
上传日期:2013-01-18
资源大小:267k
文件大小:6k
- /****************************************************************************
- uart.c
- ****************************************************************************/
- #ifndef TIMER_C
- #define TIMER_C
- #include "config.h"
- //#include "IAP.h"
- ////#include "ffs.h"
- #include "uart.h"
- #include "timer.h"
- /*
- create by skier 2005.01.17
- */
- sys_timeout g_sys_timer[MAX_SYS_TIMER];
- sys_time system_time;
-
- //delete a timer from system
- void sys_timer_stop(sys_timeout_handler h, void *arg)
- {
- int i;
- //DEBUG_FUNCTION("sys_timer_stop()")
- for(i = 0; i < MAX_SYS_TIMER; i++)
- {
- if(g_sys_timer[i].h EQ h)
- {
- g_sys_timer[i].ms_time = 0;
- g_sys_timer[i].h = NULL;
- g_sys_timer[i].arg = NULL;
- break;
- }
- }
- if(i EQ MAX_SYS_TIMER)
- {
- DEBUG_EVENT("Do not find timer, unexpect error!");
- }
- }
- //add a timer to system
- void sys_timer_start(u32_t msecs, sys_timeout_handler h, void *arg)
- {
- int i;
- //DEBUG_FUNCTION("sys_timer_start()")
- sys_timer_stop(h, arg);
-
- for(i = 0; i < MAX_SYS_TIMER; i++)
- {
- if(g_sys_timer[i].h EQ NULL)
- {
- g_sys_timer[i].ms_time = msecs;
- g_sys_timer[i].h = h;
- g_sys_timer[i].arg = arg;
- break;
- }
- }
- if(i EQ MAX_SYS_TIMER)
- {
- DEBUG_ERR("Old timer do not delete from list, unexpect error!");
- }
- }
- u32_t sys_jiffies(void)
- {
- return system_time.ms_tick ;
- }
- /*
- *Interrupted Every SYS_TICK ms
- *support basic time
- *check user timer,eg:PPP/TCP
- */
- void sys_time_tick(void)
- {
- int i;
- //updata system time
- system_time.ms_tick+= SYS_TICK;
-
- if((system_time.ms += SYS_TICK) >= 1000)
- {
- system_time.ms = 0;
- system_time.sec_tick++;
-
- if(++system_time.sec EQ 60)
- {
- system_time.sec = 0;
-
- if(++system_time.min EQ 60)
- {
- system_time.min = 0;
- if(++system_time.hour EQ 24)
- {
- system_time.hour = 0;
- system_time.day++;
- }
- }
- }
- }
- //check timer
- for(i = 0; i < MAX_SYS_TIMER; i++)
- {
- if(g_sys_timer[i].h NEQ NULL)
- {
- if(g_sys_timer[i].ms_time > SYS_TICK)/*this timer is untimeout*/
- g_sys_timer[i].ms_time -= SYS_TICK;
- else /* this timer is timeout*/
- g_sys_timer[i].ms_time = 0;
- }
- }
- }
- //check whether a timer is timeout, if true, run it
- void check_sys_timer(void)
- {
- int i;
-
- for(i = 0; i < MAX_SYS_TIMER; i++)
- {
- if((g_sys_timer[i].h NEQ NULL)
- AND (g_sys_timer[i].ms_time EQ 0) )
- {
- g_sys_timer[i].h (g_sys_timer[i].arg);
- }
- }
- }
- /************************************
- initialize the sytem time
- ***********************************/
- void sys_timer_init(void)
- {
- int i;
- for(i = 0; i < MAX_SYS_TIMER; i++)
- {
- g_sys_timer[i].ms_time = 0;
- g_sys_timer[i].h = NULL;
- g_sys_timer[i].arg = NULL;
- }
- //initialize system time
- system_time.sec_tick = 0;
- system_time.ms_tick = 0;
- system_time.day = 0;
- system_time.hour = 0;
- system_time.min = 0;
- system_time.sec = 0;
- system_time.ms = 0;
- lpc2104_timer1_start(SYS_TICK);
- }
- /*
- * return the time of seconds ,
- *which is ticked every second from system reset
- */
- u32_t get_sys_tick(void)
- {
- return system_time.sec_tick;
- }
- /*
- * return the time of system
- */
- sys_time get_sys_time(void)
- {
- return system_time;
- }
- /*
- *add system run time to the head of DEBUG information
- */
- void debug_sys_time(void)
- {
- const CHAR ascTable[11] = {"0123456789"};
- sys_time time = get_sys_time();
- sendString_2_user("rnrn<");
- //day
- sendByte_2_user(ascTable[time.day/10000]);
- sendByte_2_user(ascTable[(time.day%10000)/1000]);
- sendByte_2_user(ascTable[(time.day%1000)/100]);
- sendByte_2_user(ascTable[(time.day%100)/10]);
- sendByte_2_user(ascTable[time.day%10]);
- sendString_2_user("-");
- //hour
- sendByte_2_user(ascTable[time.hour/10]);
- sendByte_2_user(ascTable[time.hour%10]);
- sendString_2_user(":");
-
- //minute
- sendByte_2_user(ascTable[time.min/10]);
- sendByte_2_user(ascTable[time.min%10]);
- sendString_2_user(":");
-
- //second
- sendByte_2_user(ascTable[time.sec/10]);
- sendByte_2_user(ascTable[time.sec%10]);
- sendString_2_user(":");
-
- //ms
- sendByte_2_user(ascTable[time.ms/100]);
- sendByte_2_user(ascTable[(time.ms%100)/10]);
- sendByte_2_user(ascTable[time.ms%10]);
- sendString_2_user(">");
-
- }
- //int flag = 0;
- //#define LEDCON 0x00003c00
- void __irq IRQ_timer1(void)
- {
- sys_time_tick();
- /*if(flag%2 == 0)
- IOCLR = LEDCON;
- else
- IOSET = LEDCON;
- flag++;*/
- T1IR = 0x01;
- VICVectAddr = 0x00;
- }
- void lpc2104_timer1_start(u16_t ms)
- {
- T1PR = 0;
- T1MCR = 0x03;
- T1MR0 = 11059*ms;
- T1TCR = 0x03;
- T1TCR = 0x01;
- VICIntSelect = 0x00;/*IRQ interrupt*/
- VICVectCntl2 = 0x25;/*Enable interrupt, the source of interrupt is TIMER1*/
- VICVectAddr2 = (int)IRQ_timer1;
- VICIntEnable |= 0x00000020;/*Enable timer1 interrupt*/
- }
- /*****************************
- STOP_TIMER1
- ****************************/
- void lpc2104_timer1_stop(void)
- {
- DEBUG_FUNCTION("rn-----stop timer1");
-
- T1TCR = 0x00;
- T1IR = 0x01;
- }
- /*****************************
- STOP_TIMER0
- ****************************/
- void lpc2104_timer0_stop(void)
- {
- DEBUG_FUNCTION("rn-----stop timer0");
-
- T0TCR = 0x00;
- T0IR = 0x01;
- }
- #endif