LPCOpen Platform
v1.03
LPCOpen Platform for NXP LPC Microcontrollers
Main Page
Modules
Data Structures
Files
Related Pages
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
cpu_bsp.c
Go to the documentation of this file.
1
/*
2
*********************************************************************************************************
3
* uC/CPU
4
* CPU CONFIGURATION & PORT LAYER
5
*
6
* (c) Copyright 2004-2010; Micrium, Inc.; Weston, FL
7
*
8
* All rights reserved. Protected by international copyright laws.
9
*
10
* uC/CPU is provided in source form to registered licensees ONLY. It is
11
* illegal to distribute this source code to any third party unless you receive
12
* written permission by an authorized Micrium representative. Knowledge of
13
* the source code may NOT be used to develop a similar product.
14
*
15
* Please help us continue to provide the Embedded community with the finest
16
* software available. Your honesty is greatly appreciated.
17
*
18
* You can contact us at www.micrium.com.
19
*********************************************************************************************************
20
*/
21
22
/*
23
*********************************************************************************************************
24
*
25
* CPU BOARD SUPPORT PACKAGE (BSP) FUNCTIONS
26
*
27
* KEIL MCB1700 DEVELOPMENT KIT
28
*
29
* Filename : cpu_bsp.c
30
* Version : V1.25
31
* Programmer(s) : ITJ
32
*********************************************************************************************************
33
*/
34
35
36
/*
37
*********************************************************************************************************
38
* INCLUDE FILES
39
*********************************************************************************************************
40
*/
41
42
#define CPU_BSP_MODULE
43
#include "
os.h
"
44
#include "chip.h"
45
46
/*$PAGE*/
47
/*
48
*********************************************************************************************************
49
* LOCAL DEFINES
50
*********************************************************************************************************
51
*/
52
53
54
/*
55
*********************************************************************************************************
56
* LOCAL CONSTANTS
57
*********************************************************************************************************
58
*/
59
60
61
/*
62
*********************************************************************************************************
63
* LOCAL DATA TYPES
64
*********************************************************************************************************
65
*/
66
67
68
/*
69
*********************************************************************************************************
70
* LOCAL TABLES
71
*********************************************************************************************************
72
*/
73
74
75
/*
76
*********************************************************************************************************
77
* LOCAL GLOBAL VARIABLES
78
*********************************************************************************************************
79
*/
80
81
82
/*
83
*********************************************************************************************************
84
* LOCAL FUNCTION PROTOTYPES
85
*********************************************************************************************************
86
*/
87
88
89
/*
90
*********************************************************************************************************
91
* LOCAL CONFIGURATION ERRORS
92
*********************************************************************************************************
93
*/
94
95
void
OS_CSP_TickInit
(
void
)
96
{
97
CPU_INT32U
cnts;
98
CPU_INT32U
cpu_freq;
99
100
101
cpu_freq = (
CPU_INT32U
)
Chip_Clock_GetSystemClockRate
();
102
cnts = (cpu_freq /
OSCfg_TickRate_Hz
);
103
104
OS_CPU_SysTickInit
(cnts);
105
}
106
107
/*$PAGE*/
108
/*
109
*********************************************************************************************************
110
* CPU_TS_TmrInit()
111
*
112
* Description : Initialize & start CPU timestamp timer.
113
*
114
* Argument(s) : none.
115
*
116
* Return(s) : none.
117
*
118
* Caller(s) : CPU_TS_Init().
119
*
120
* This function is an INTERNAL CPU module function & MUST be implemented by application/
121
* BSP function(s) [see Note #1] but MUST NOT be called by application function(s).
122
*
123
* Note(s) : (1) CPU_TS_TmrInit() is an application/BSP function that MUST be defined by the developer
124
* if either of the following CPU features is enabled :
125
*
126
* (a) CPU timestamps
127
* (b) CPU interrupts disabled time measurements
128
*
129
* See 'cpu_cfg.h CPU TIMESTAMP CONFIGURATION Note #1'
130
* & 'cpu_cfg.h CPU INTERRUPTS DISABLED TIME MEASUREMENT CONFIGURATION Note #1a'.
131
*
132
* (2) (a) Timer count values MUST be returned via word-size-configurable 'CPU_TS_TMR'
133
* data type.
134
*
135
* (1) If timer has more bits, truncate timer values' higher-order bits greater
136
* than the configured 'CPU_TS_TMR' timestamp timer data type word size.
137
*
138
* (2) Since the timer MUST NOT have less bits than the configured 'CPU_TS_TMR'
139
* timestamp timer data type word size; 'CPU_CFG_TS_TMR_SIZE' MUST be
140
* configured so that ALL bits in 'CPU_TS_TMR' data type are significant.
141
*
142
* In other words, if timer size is not a binary-multiple of 8-bit octets
143
* (e.g. 20-bits or even 24-bits), then the next lower, binary-multiple
144
* octet word size SHOULD be configured (e.g. to 16-bits). However, the
145
* minimum supported word size for CPU timestamp timers is 8-bits.
146
*
147
* See also 'cpu_cfg.h CPU TIMESTAMP CONFIGURATION Note #2'
148
* & 'cpu_core.h CPU TIMESTAMP DATA TYPES Note #1'.
149
*
150
* (b) Timer SHOULD be an 'up' counter whose values increase with each time count.
151
*
152
* (c) When applicable, timer period SHOULD be less than the typical measured time
153
* but MUST be less than the maximum measured time; otherwise, timer resolution
154
* inadequate to measure desired times.
155
*
156
* See also 'CPU_TS_TmrRd() Note #2'.
157
*********************************************************************************************************
158
*/
159
160
#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
161
void
CPU_TS_TmrInit
(
void
)
162
{
163
CPU_INT32U
fclk_freq;
164
165
/* Use timer 0 */
166
Chip_TIMER_Init
(
LPC_TIMER0
);
167
168
/* Get timer 0 peripheral clock rate */
169
#if defined(CHIP_LPC175X_6X)
170
fclk_freq = (
CPU_INT32U
)
Chip_Clock_GetPeripheralClockRate
(SYSCTL_PCLK_TIMER0);
171
#else
172
fclk_freq = (
CPU_INT32U
)
Chip_Clock_GetPeripheralClockRate
();
173
#endif
174
175
/* Timer will recycle after 1s */
176
Chip_TIMER_Reset
(
LPC_TIMER0
);
177
Chip_TIMER_SetMatch
(
LPC_TIMER0
, 1, fclk_freq);
178
Chip_TIMER_ResetOnMatchEnable
(
LPC_TIMER0
, 1);
179
Chip_TIMER_Enable
(
LPC_TIMER0
);
180
181
CPU_TS_TmrFreqSet
((
CPU_TS_TMR_FREQ
) fclk_freq);
182
}
183
#endif
184
185
186
/*$PAGE*/
187
/*
188
*********************************************************************************************************
189
* CPU_TS_TmrRd()
190
*
191
* Description : Get current CPU timestamp timer count value.
192
*
193
* Argument(s) : none.
194
*
195
* Return(s) : Timestamp timer count (see Notes #2a & #2b).
196
*
197
* Caller(s) : CPU_TS_Init(),
198
* CPU_TS_Get32(),
199
* CPU_TS_Get64(),
200
* CPU_IntDisMeasStart(),
201
* CPU_IntDisMeasStop().
202
*
203
* This function is an INTERNAL CPU module function & MUST be implemented by application/
204
* BSP function(s) [see Note #1] but SHOULD NOT be called by application function(s).
205
*
206
* Note(s) : (1) CPU_TS_TmrRd() is an application/BSP function that MUST be defined by the developer
207
* if either of the following CPU features is enabled :
208
*
209
* (a) CPU timestamps
210
* (b) CPU interrupts disabled time measurements
211
*
212
* See 'cpu_cfg.h CPU TIMESTAMP CONFIGURATION Note #1'
213
* & 'cpu_cfg.h CPU INTERRUPTS DISABLED TIME MEASUREMENT CONFIGURATION Note #1a'.
214
*
215
* (2) (a) Timer count values MUST be returned via word-size-configurable 'CPU_TS_TMR'
216
* data type.
217
*
218
* (1) If timer has more bits, truncate timer values' higher-order bits greater
219
* than the configured 'CPU_TS_TMR' timestamp timer data type word size.
220
*
221
* (2) Since the timer MUST NOT have less bits than the configured 'CPU_TS_TMR'
222
* timestamp timer data type word size; 'CPU_CFG_TS_TMR_SIZE' MUST be
223
* configured so that ALL bits in 'CPU_TS_TMR' data type are significant.
224
*
225
* In other words, if timer size is not a binary-multiple of 8-bit octets
226
* (e.g. 20-bits or even 24-bits), then the next lower, binary-multiple
227
* octet word size SHOULD be configured (e.g. to 16-bits). However, the
228
* minimum supported word size for CPU timestamp timers is 8-bits.
229
*
230
* See also 'cpu_cfg.h CPU TIMESTAMP CONFIGURATION Note #2'
231
* & 'cpu_core.h CPU TIMESTAMP DATA TYPES Note #1'.
232
*
233
* (b) Timer SHOULD be an 'up' counter whose values increase with each time count.
234
*
235
* (1) If timer is a 'down' counter whose values decrease with each time count,
236
* then the returned timer value MUST be ones-complemented.
237
*
238
* (c) (1) When applicable, the amount of time measured by CPU timestamps is
239
* calculated by either of the following equations :
240
*
241
* (A) Time measured = Number timer counts * Timer period
242
*
243
* where
244
*
245
* Number timer counts Number of timer counts measured
246
* Timer period Timer's period in some units of
247
* (fractional) seconds
248
* Time measured Amount of time measured, in same
249
* units of (fractional) seconds
250
* as the Timer period
251
*
252
* Number timer counts
253
* (B) Time measured = ---------------------
254
* Timer frequency
255
*
256
* where
257
*
258
* Number timer counts Number of timer counts measured
259
* Timer frequency Timer's frequency in some units
260
* of counts per second
261
* Time measured Amount of time measured, in seconds
262
*
263
* (2) Timer period SHOULD be less than the typical measured time but MUST be less
264
* than the maximum measured time; otherwise, timer resolution inadequate to
265
* measure desired times.
266
*********************************************************************************************************
267
*/
268
269
#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
270
CPU_TS_TMR
CPU_TS_TmrRd
(
void
)
271
{
272
CPU_TS_TMR
ts_tmr_cnts;
273
274
ts_tmr_cnts = (
CPU_TS_TMR
)
Chip_TIMER_ReadCount
(
LPC_TIMER0
);
275
276
return
(ts_tmr_cnts);
277
}
278
#endif
279
280
#if 0
281
/*$PAGE*/
282
/*
283
*********************************************************************************************************
284
* CPU_TSxx_to_uSec()
285
*
286
* Description : Convert a 32-/64-bit CPU timestamp from timer counts to microseconds.
287
*
288
* Argument(s) : ts_cnts CPU timestamp (in timestamp timer counts [see Note #2aA]).
289
*
290
* Return(s) : Converted CPU timestamp (in microseconds [see Note #2aD]).
291
*
292
* Caller(s) : Application.
293
*
294
* This function is an (optional) CPU module application interface (API) function which
295
* MAY be implemented by application/BSP function(s) [see Note #1] & MAY be called by
296
* application function(s).
297
*
298
* Note(s) : (1) CPU_TS32_to_uSec()/CPU_TS64_to_uSec() are application/BSP functions that MAY be
299
* optionally defined by the developer when either of the following CPU features is
300
* enabled :
301
*
302
* (a) CPU timestamps
303
* (b) CPU interrupts disabled time measurements
304
*
305
* See 'cpu_cfg.h CPU TIMESTAMP CONFIGURATION Note #1'
306
* & 'cpu_cfg.h CPU INTERRUPTS DISABLED TIME MEASUREMENT CONFIGURATION Note #1a'.
307
*
308
* (2) (a) The amount of time measured by CPU timestamps is calculated by either of
309
* the following equations :
310
*
311
* 10^6 microseconds
312
* (1) Time measured = Number timer counts * ------------------- * Timer period
313
* 1 second
314
*
315
* Number timer counts 10^6 microseconds
316
* (2) Time measured = --------------------- * -------------------
317
* Timer frequency 1 second
318
*
319
* where
320
*
321
* (A) Number timer counts Number of timer counts measured
322
* (B) Timer frequency Timer's frequency in some units
323
* of counts per second
324
* (C) Timer period Timer's period in some units of
325
* (fractional) seconds
326
* (D) Time measured Amount of time measured,
327
* in microseconds
328
*
329
* (b) Timer period SHOULD be less than the typical measured time but MUST be less
330
* than the maximum measured time; otherwise, timer resolution inadequate to
331
* measure desired times.
332
*
333
* (c) Specific implementations may convert any number of CPU_TS32 or CPU_TS64 bits
334
* -- up to 32 or 64, respectively -- into microseconds.
335
*********************************************************************************************************
336
*/
337
338
#if (CPU_CFG_TS_32_EN == DEF_ENABLED)
339
CPU_INT64U
CPU_TS32_to_uSec
(
CPU_TS32
ts_cnts)
340
{
341
342
return
(0u);
343
344
}
345
#endif
346
347
348
#if (CPU_CFG_TS_64_EN == DEF_ENABLED)
349
CPU_INT64U
CPU_TS64_to_uSec
(
CPU_TS64
ts_cnts)
350
{
351
352
return
(0u);
353
354
}
355
#endif
356
#endif
software
ucos_iii
lpc_ucos_iii
lpc17xx40xx_bsp
cpu_bsp.c
Generated on Fri May 10 2013 10:42:25 for LPCOpen Platform by
1.8.2