00001 /******************* 00002 *Project: 80X86 32BIT MULTI TASKING OPERATING SYSTEM 00003 *Description:driver for 8254 programable interval timer (PIT) 00004 * 00005 *File:timer.c 00006 *Author: Book Chen 00007 *Date: 2010.01.01 00008 ******************** 00009 */ 00010 #include "includes.h" 00011 00012 TIMER_CONTROL TimerCtrl; 00013 00014 void TimerInit(void){ 00015 PicIrqDisable(IRQ0_TIMER); 00016 TimerCtrl.Timer=0; 00017 OutByte(TIMER_MODE,RATE_GENERATOR); 00018 OutByte(TIMER0,(U8)(TIMER_FREQ/HZ)); 00019 OutByte(TIMER0,(U8)((TIMER_FREQ/HZ)>>8)); 00020 InterruptIrqHandlerSet(IRQ0_TIMER,TimerHandler); 00021 PicIrqEnable(IRQ0_TIMER); 00022 } 00023 00024 void TimerHandler(void){ 00025 if(TimerCtrl.Timer!=0) TimerCtrl.Timer--; 00026 if(KeyboardCtrl.Timer!=0) KeyboardCtrl.Timer--; 00027 if(ShellCtrl.Timer!=0) ShellCtrl.Timer--; 00028 if(XmodemCtrl.Timer!=0) XmodemCtrl.Timer--; 00029 if(Fdc1Ctrl.Timer!=0) Fdc1Ctrl.Timer--; 00030 if(TaskbCtrl.Timer!=0) TaskbCtrl.Timer--; 00031 if(TaskcCtrl.Timer!=0) TaskcCtrl.Timer--; 00032 if(OsSchedulerCtrl.TaskSwitchTimer!=0) OsSchedulerCtrl.TaskSwitchTimer--; 00033 if(OsRunning==true){ 00034 #if(OS_TIME_EVENT_ENABLE==1) 00035 OsTimeEventHandler(); 00036 #endif 00037 if(OsSchedulerCtrl.TaskSwitchTimer==0){ 00038 #if(OS_INT_LEVEL_CSW_ENABLE==1) 00039 OsSchedulerNextTaskFind(); 00040 #endif 00041 } 00042 } 00043 }
1.5.9