BOOTLOADER
Main Page
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
bootloader
drivers
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
){
101
ClearPending
(
BIT_TIMER0
);
102
}
103
void
__irq
Timer1Isr
(
void
){
104
ClearPending
(
BIT_TIMER1
);
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
){
111
ClearPending
(
BIT_TIMER2
);
112
}
113
void
__irq
Timer3Isr
(
void
){
114
ClearPending
(
BIT_TIMER3
);
115
}
116
void
__irq
Timer4Isr
(
void
){
117
ClearPending
(
BIT_TIMER4
);
118
}
119
120
121
122
123
Generated on Wed Jun 13 2012 00:03:08 for BOOTLOADER by
1.8.1.1