BOOTLOADER
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
timer.c
Go to the documentation of this file.
1 /******************************************************
2 * Function: s3c2440 timer driver
3 *
4 * File: timer.c
5 * Author: Book Chen
6 * Date: 2008.07.18
7 *******************************************************
8 */
9 #include "includes.h"
10 
11 unsigned char TimeTick=0;
12 volatile unsigned int Timer2Counter=0;
13 void F_TimerInit(void);
14 void F_TimerSvc(void);
15 void F_TimerTimerSet(INT8U TimerNumber,INT32U Frequence);
16 void __irq Timer0Isr(void);
17 void __irq Timer1Isr(void);
18 void __irq Timer2Isr(void);
19 void __irq Timer3Isr(void);
20 void __irq Timer4Isr(void);
21 
22 void F_TimerInit(void)
23 {
24  rTCON =0x00000000; // disable all timers...timer0~4 all off
25  rTCFG0 &=0xffffff00; // set prescaler0 to 0x04 for timer 0,1
26  rTCFG0 |=4; // set prescaler0 to 0x04 for timer 0,1
27  rTCFG0 &=0xffff00ff; // set prescaler1 to 0x01 for timer 2,3,4
28  rTCFG0 |=1<<8; // set prescaler1 to 0x01 for timer 2,3,4
29  rTCFG1 =0; // set all divider to {2}
30 }
31 void F_TimerSvc(void){}
32 void F_TimerTimerSet(INT8U TimerNumber,INT32U Frequence){
33  if(TimerNumber==0){
34  rTCFG0 =119;
35  rTCFG1 &=0xfffffff0; //
36  rTCFG1 |=0x00000003; // set MUX input to 1/16...for PWM time0
37  //rTCNTB0=F_ClockApbClockGet()/(2*2*Frequence);
38  rTCNTB0=52083; // timer0 counter buffer
39  rTCON &=0xfffffff0;
40  rTCON |=0x00000002; // set manual update
41  rTCON =0x00000009; // set timer0 auto reload,output inverter off,clear manual update ,timer starts
42  //rTCON |=0x0000000b; // set timer0 auto reload,output inverter off,manual update on,timer starts
43  //rTCON &=0xfffffffd; // clear timer0 manual update bit
44  pISR_TIMER0=(INT32U)Timer0Isr; // set timer0 isr hook function
45  }
46  else if(TimerNumber==1){
47  rTCFG1 &=0xffffff0f; //
48  rTCFG1 |=0x00000000; // set MUX input to 1/2...for PWM timer1
49  // rTCNTB1=F_ClockApbClockGet()/(5*2*Frequence);
50  // 16bit down timer 50M/(5*2*1000)=5000...
51  // 5=prescaler+1,2 for timer divider,1000timetick/sec
52  rTCNTB1=5000; //1ms
53  //rTCMPB1=0; //this register is for pwm use
54  rTCON &=0xfffff0ff; //
55  rTCON |=0x00000b00; // set timer1 auto reload,output inverter off,manual update on,timer starts
56  rTCON &=0xfffffdff; // clear timer1 manual update bit
57  pISR_TIMER1=(INT32U)Timer1Isr; // set timer1 isr hook function
58 
59  /*rTCFG1 &=0xffffff0f; //
60  rTCFG1 |=0x00000030; // set MUX input to 1/16...for PWM time1
61  //rTCNTB1=F_ClockApbClockGet()/(2*2*Frequence);
62  rTCNTB1=52083; // timer1 counter buffer
63  rTCON &=0xffff0fff; //
64  rTCON |=0x00000b00; // set timer1 auto reload,output inverter off,manual update on,timer starts
65  rTCON &=0xfffffdff; // clear timer1 manual update bit
66  pISR_TIMER1=(INT32U)Timer1Isr; // set timer1 isr hook function
67  */
68  }
69  else if(TimerNumber==2){
70  rTCFG1 &=0xfffff0ff; //
71  rTCFG1 |=0x00000300; // set MUX input to 1/16...for PWM time2
72  //rTCNTB2=F_ClockApbClockGet()/(2*2*Frequence);
73  rTCNTB2=52083; // timer2 counter buffer
74  rTCON &=0xffff0fff; //
75  rTCON |=0x0000b000; // set timer2 auto reload,output inverter off,manual update on,timer starts
76  rTCON &=0xffffdfff; // clear timer2 manual update bit
77  pISR_TIMER2=(INT32U)Timer2Isr; // set timer2 isr hook function
78  }
79  else if(TimerNumber==3){
80  rTCFG1 &=0xffff0fff; //
81  rTCFG1 |=0x00003000; // set MUX input to 1/16...for PWM time3
82  //rTCNTB3=F_ClockApbClockGet()/(2*2*Frequence);
83  rTCNTB3=52083; // timer3 counter buffer
84  rTCON &=0xffff0fff; //
85  rTCON |=0x000b0000; // set timer3 auto reload,output inverter off,manual update on,timer starts
86  rTCON &=0xfffdffff; // clear timer3 manual update bit
87  pISR_TIMER3=(INT32U)Timer3Isr; // set timer3 isr hook function
88  }
89  else if(TimerNumber==4){
90  rTCFG1 &=0xfff0ffff; //
91  rTCFG1 |=0x00030000; // set MUX input to 1/16...for PWM time4
92  //rTCNTB4=F_ClockApbClockGet()/(2*2*Frequence);
93  rTCNTB4=52083; // timer4 counter buffer
94  rTCON &=0xff0fffff; //
95  rTCON |=0x00700000; // set timer4 auto reload,output inverter off,manual update on,timer starts
96  rTCON &=0xffdfffff; // clear timer4 manual update bit
97  pISR_TIMER4=(INT32U)Timer4Isr; // set timer4 isr hook function
98  }
99 }
100 void __irq Timer0Isr(void){
102 }
103 void __irq Timer1Isr(void){
105  TimeTick=1;
106  if(Timer2Counter!=0) Timer2Counter--;
107  if(ShellCtrl.Timer!=0) ShellCtrl.Timer--;
108  if(XmodemCtrl.Timer!=0) XmodemCtrl.Timer--;
109 }
110 void __irq Timer2Isr(void){
112 }
113 void __irq Timer3Isr(void){
115 }
116 void __irq Timer4Isr(void){
118 }
119 
120 
121 
122 
123