drivers/timer/timer.c File Reference

Go to the source code of this file.

Functions

void F_TimerInitial (void)
void F_TimerTimerSet (INT8U TimerNumber, INT32U Frequence)
void F_TimerTimer1IsrHook (void)

Variables

INT8U TimeTick
INT32U SystemTime
volatile INT32U Timer2Counter = 0


Function Documentation

void F_TimerInitial ( void   ) 

Definition at line 17 of file timer.c.

00017                          {
00018     rTCON   =0x00000000;             // disable all timers...timer0~4 all off
00019     rTCFG0 &=0xffffff00;            // set prescaler0 to 0x04 for timer 0,1
00020     rTCFG0 |=4;                     // set prescaler0 to 0x04 for timer 0,1
00021     rTCFG0 &=0xffff00ff;            // set prescaler1 to 0x01 for timer 2,3,4
00022     rTCFG0 |=1<<8;                  // set prescaler1 to 0x01 for timer 2,3,4
00023     rTCFG1  =0;                    // set all divider to {2}
00024     TimeTick=0;
00025     SystemTime=0;
00026 }

void F_TimerTimer1IsrHook ( void   ) 

Definition at line 96 of file timer.c.

00096                                 {
00097     TimeTick=1;
00098     SystemTime++;
00099     if(Timer2Counter!=0) Timer2Counter--;
00100     if(XmodemCtrl.Timer!=0) XmodemCtrl.Timer--;
00101     if(ShellCtrl.Timer!=0) ShellCtrl.Timer--;
00102     //if(ShellTaskTimer!=0) ShellTaskTimer--;
00103     //if(TestTaskCtrl.Timer!=0) TestTaskCtrl.Timer--;
00104     //if(Test1TaskCtrl.Timer!=0) Test1TaskCtrl.Timer--;
00105     if(EthernetTaskCtrl.Timer!=0) EthernetTaskCtrl.Timer--;
00106     //if(Dm9000Ctrl.Timer!=0) Dm9000Ctrl.Timer--;
00107     //if(SdCtrl.Timer!=0) SdCtrl.Timer--;
00108     if(OsSchedulerCtrl.TaskSwitchTimer!=0) OsSchedulerCtrl.TaskSwitchTimer--;
00109     #if(OS_RUN_ENABLE==1)
00110         if(OSRunning==TRUE){
00111             OS_ENTER_CRITICAL();
00112             #if(OS_TIME_EVENT_ENABLE==1)
00113                OsTimeTickHandler();
00114             #endif
00115             if(OsSchedulerCtrl.TaskSwitchTimer==0){
00116                 #if(OS_INT_LEVEL_CSW_ENABLE==1)
00117                     OsSchedulerFindNextIsr();
00118                 #endif
00119             }
00120             OS_EXIT_CRITICAL();
00121         }
00122     #endif
00123 }

void F_TimerTimerSet ( INT8U  TimerNumber,
INT32U  Frequence 
)

Definition at line 27 of file timer.c.

00027                                                         {
00028     if(TimerNumber==0){
00029         rTCFG0  =119;
00030         rTCFG1 &=0xfffffff0;                //
00031         rTCFG1 |=0x00000003;                 // set MUX input to 1/16...for PWM time0
00032         //rTCNTB0=F_ClockApbClockGet()/(2*2*Frequence);
00033         rTCNTB0=52083;                      // timer0 counter buffer
00034         rTCON  &=0xfffffff0;
00035         rTCON  |=0x00000002;                 // set manual update
00036         rTCON   =0x00000009;                // set timer0 auto reload,output inverter off
00037                                                     // clear manual update ,timer starts
00038         //rTCON  |=0x0000000b;              // set timer0 auto reload,output inverter off,manual update on,timer starts
00039         //rTCON  &=0xfffffffd;             // clear timer0 manual update bit
00040         HandleTimer0=(INT32U)F_IsrTimer0;   // set timer0 isr hook function
00041     }
00042     else if(TimerNumber==1){
00043         rTCFG1 &=0xffffff0f;                   //
00044         rTCFG1 |=0x00000000;                // set MUX input to 1/2...for PWM timer1
00045         // rTCNTB1=F_ClockApbClockGet()/(5*2*Frequence);
00046         // 16bit down timer 50M/(5*2*1000)=5000...
00047         // 5=prescaler+1,2 for timer divider,1000timetick/sec
00048         rTCNTB1=5000;                      //1ms
00049         //rTCMPB1=0; //this register is for pwm use
00050         rTCON  &=0xfffff0ff;              //
00051         rTCON  |=0x00000b00;               // set timer1 auto reload,output inverter off,manual update on,timer starts
00052         rTCON  &=0xfffffdff;              // clear timer1 manual update bit
00053         HandleTimer1=(INT32U)F_IsrTimer1;   // set timer1 isr hook function
00054 
00055         /*rTCFG1 &=0xffffff0f;            //
00056         rTCFG1 |=0x00000030;               // set MUX input to 1/16...for PWM time1
00057         //rTCNTB1=F_ClockApbClockGet()/(2*2*Frequence);
00058         rTCNTB1=52083;                  // timer1 counter buffer
00059         rTCON  &=0xffff0fff;            //
00060         rTCON  |=0x00000b00;            // set timer1 auto reload,output inverter off,manual update on,timer starts
00061         vrTCON  &=0xfffffdff;            // clear timer1 manual update bit
00062         pISR_TIMER1=(INT32U)Timer1;   // set timer1 isr hook function
00063         */
00064     }
00065     else if(TimerNumber==2){
00066         rTCFG1 &=0xfffff0ff;            //
00067         rTCFG1 |=0x00000300;             // set MUX input to 1/16...for PWM time2
00068         //rTCNTB2=F_ClockApbClockGet()/(2*2*Frequence);
00069         rTCNTB2=52083;                  // timer2 counter buffer
00070         rTCON  &=0xffff0fff;            //
00071         rTCON  |=0x0000b000;            // set timer2 auto reload,output inverter off,manual update on,timer starts
00072         rTCON  &=0xffffdfff;            // clear timer2 manual update bit
00073         HandleTimer2=(INT32U)F_IsrTimer2;   // set timer2 isr hook function
00074     }
00075     else if(TimerNumber==3){
00076         rTCFG1 &=0xffff0fff;            //
00077         rTCFG1 |=0x00003000;            // set MUX input to 1/16...for PWM time3
00078         //rTCNTB3=F_ClockApbClockGet()/(2*2*Frequence);
00079         rTCNTB3=52083;                  // timer3 counter buffer
00080         rTCON  &=0xffff0fff;            //
00081         rTCON  |=0x000b0000;            // set timer3 auto reload,output inverter off,manual update on,timer starts
00082         rTCON  &=0xfffdffff;            // clear timer3 manual update bit 
00083         HandleTimer3=(INT32U)F_IsrTimer3;   // set timer3 isr hook function 
00084     }
00085     else if(TimerNumber==4){
00086         rTCFG1 &=0xfff0ffff;            //
00087         rTCFG1 |=0x00030000;             // set MUX input to 1/16...for PWM time4
00088         //rTCNTB4=F_ClockApbClockGet()/(2*2*Frequence);
00089         rTCNTB4=52083;                  // timer4 counter buffer
00090         rTCON  &=0xff0fffff;            //
00091         rTCON  |=0x00700000;            // set timer4 auto reload,output inverter off,manual update on,timer starts
00092         rTCON  &=0xffdfffff;            // clear timer4 manual update bit
00093         HandleTimer4=(INT32U)F_IsrTimer4;   // set timer4 isr hook function
00094     }
00095 }


Variable Documentation

INT32U SystemTime

Definition at line 13 of file timer.c.

volatile INT32U Timer2Counter = 0

Definition at line 15 of file timer.c.

INT8U TimeTick

Definition at line 11 of file timer.c.


Generated on Tue Sep 2 08:45:41 2008 for A Simple operation System using S3C2410 by  doxygen 1.5.6