OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [hal/] [arm/] [lpc24xx/] [var/] [current/] [cdl/] [hal_arm_lpc24xx.cdl] - Blame information for rev 786

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
# ====================================================================
2
#
3
#      hal_arm_lpc24xx.cdl
4
#
5
#      NXP LPC24XX HAL package configuration data
6
#
7
# ====================================================================
8
## ####ECOSGPLCOPYRIGHTBEGIN####
9
## -------------------------------------------
10
## This file is part of eCos, the Embedded Configurable Operating System.
11
## Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
12
##
13
## eCos is free software; you can redistribute it and/or modify it under
14
## the terms of the GNU General Public License as published by the Free
15
## Software Foundation; either version 2 or (at your option) any later
16
## version.
17
##
18
## eCos is distributed in the hope that it will be useful, but WITHOUT
19
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20
## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
21
## for more details.
22
##
23
## You should have received a copy of the GNU General Public License
24
## along with eCos; if not, write to the Free Software Foundation, Inc.,
25
## 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
26
##
27
## As a special exception, if other files instantiate templates or use
28
## macros or inline functions from this file, or you compile this file
29
## and link it with other works to produce a work based on this file,
30
## this file does not by itself cause the resulting work to be covered by
31
## the GNU General Public License. However the source code for this file
32
## must still be made available in accordance with section (3) of the GNU
33
## General Public License v2.
34
##
35
## This exception does not invalidate any other reasons why a work based
36
## on this file might be covered by the GNU General Public License.
37
## -------------------------------------------
38
## ####ECOSGPLCOPYRIGHTEND####
39
# ====================================================================
40
######DESCRIPTIONBEGIN####
41
#
42
# Author(s):      Uwe Kindler
43
# Contributors:   gthomas, tkoeller, tdrury, nickg
44
# Date:           2008-07-05
45
#
46
#####DESCRIPTIONEND####
47
#
48
# ====================================================================
49
 
50
cdl_package CYGPKG_HAL_ARM_LPC24XX {
51
    display       "NXP LPC24XX variant HAL"
52
    parent        CYGPKG_HAL_ARM
53
    define_header hal_arm_lpc24xx.h
54
    include_dir   cyg/hal
55
    hardware
56
    description   "
57
        The LPC24XX HAL package provides the support needed to run
58
        eCos on NXP LPC24XX based targets."
59
 
60
    compile       hal_diag.c lpc24xx_misc.c
61
 
62
    implements    CYGINT_HAL_DEBUG_GDB_STUBS
63
    implements    CYGINT_HAL_DEBUG_GDB_STUBS_BREAK
64
    implements    CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT
65
    implements    CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT
66
    implements    CYGINT_HAL_ARM_ARCH_ARM7
67
    implements    CYGINT_HAL_ARM_THUMB_ARCH
68
 
69
    # Let the architectural HAL see this variant's files
70
    define_proc {
71
        puts $::cdl_header "#define CYGBLD_HAL_VAR_INTS_H "
72
        puts $::cdl_system_header "#define CYGBLD_HAL_ARM_VAR_IO_H"
73
        puts $::cdl_system_header "#define CYGBLD_HAL_ARM_VAR_ARCH_H"
74
    }
75
 
76
    cdl_component CYGHWR_HAL_ARM_LPC24XX {
77
        display        "LPC24XX variant used"
78
        flavor         data
79
        default_value  { "LPC246x" }
80
        legal_values   { "LPC246x" "LPC2458" "LPC2460" "LPC2468" "LPC2470"
81
                         "LPC2478"}
82
        description    "
83
             The LPC24XX microcontroller family has several variants,
84
             the main differences being the amount of on-chip RAM,
85
             flash and peripherals. This option allows the platform
86
             HALs to select the specific microcontroller being used."
87
 
88
        cdl_option CYGHWR_HAL_ARM_LPC24XX_FAMILY {
89
            display       "LPC24XX variant family"
90
            flavor        data
91
            calculated    {
92
                is_substr(CYGHWR_HAL_ARM_LPC24XX, "LPC246") ?
93
                   "LPC246X" : "LPC24XX"
94
                          }
95
            description   "
96
                This specifies the family that the processor
97
                belongs to. This is useful as it defines certain common
98
                characteristics which affect which features should be
99
                available in the HAL."
100
        }
101
    }
102
 
103
    # This is going to get really messy before long as the number of parts
104
    # explodes. Its useful to know the actual part in use, but its just as
105
    # useful to know which family it belongs to. LPC210x shouldn't really
106
    # be in the list of devices, but will probably break something if removed.
107
    cdl_component CYGHWR_HAL_ARM_LPC2XXX {
108
        display        "LPC2XXX variant used"
109
        flavor         data
110
        calculated     CYGHWR_HAL_ARM_LPC24XX
111
        description    "
112
             This option is only here for compatibility reasons because some of
113
             the LPC2XXX device drivers rely on these definitions. If this
114
             is defined here, the LPC24XX variant can use the LPC2XXX device
115
             drivers for on-chip peripherals."
116
 
117
        cdl_option CYGHWR_HAL_ARM_LPC2XXX_FAMILY {
118
            display       "LPC2XXX variant family"
119
            flavor        data
120
            calculated    CYGHWR_HAL_ARM_LPC24XX_FAMILY
121
            description   "
122
                 This option is only here for compatibility reasons
123
                 because some of the LPC2XXX device drivers rely on
124
                 these definitions. If this is defined here, the
125
                 LPC24XX variant can use the LPC2XXX device drivers
126
                 for on-chip peripherals."
127
        }
128
 
129
        cdl_option CYGHWR_HAL_ARM_LPC2XXX_VARIANT_VERSION {
130
            display       "LPC2XXX variant version"
131
            flavor        data
132
            calculated    {
133
                is_substr(CYGHWR_HAL_ARM_LPC2XXX, "LPC21") ? 1 :
134
                is_substr(CYGHWR_HAL_ARM_LPC2XXX, "LPC22") ? 2 :
135
                is_substr(CYGHWR_HAL_ARM_LPC2XXX, "LPC24") ? 4 : 0
136
                          }
137
            description   "
138
                This specifies the variant version that the processor
139
                belongs to. Some common characteristics may be
140
                different in newer LPC2xxx versions. I.e. the LPC24xx variants
141
                are significant different from former LPC2xxx variants."
142
        }
143
    }
144
 
145
    # Important! Be very careful changing this value. That will always
146
    # enter the LPC24XX bootloader after reset and consequently will
147
    # never run your code. You must know what you are doing. Look at
148
    # arch. vectors.S for details.
149
    cdl_option CYGNUM_HAL_ARM_VECTOR_0x14 {
150
        display       "ARM vector at 0x14"
151
        flavor        data
152
        default_value 0xB4405F62
153
        legal_values  0 to 0xFFFFFFFF
154
        description "
155
           In order to detect if a valid program is present, every
156
           user program must have a program signature. This signature
157
           is a word-wide number that is stored in the unused
158
           location in the ARM7 vector table at 0x00000014. The
159
           program signature is the two's compliment of the checksum
160
           of the ARM vector table."
161
    }
162
 
163
    cdl_component CYGNUM_HAL_ARM_LPC24XX_CLOCKING {
164
        display       "Clocking"
165
        flavor        none
166
 
167
        cdl_option CYGNUM_HAL_ARM_LPC24XX_PLL_MUL {
168
            display       "PLL multiplier"
169
            flavor        data
170
            legal_values  6 to 32767
171
            default_value { 12 }
172
        }
173
 
174
        cdl_option CYGNUM_HAL_ARM_LPC24XX_PLL_DIV {
175
            display       "PLL divider"
176
            flavor         data
177
            legal_values  1 to 32
178
            default_value { 1 }
179
        }
180
 
181
        cdl_option CYGNUM_HAL_ARM_LPC24XX_PLL_OUTPUT {
182
            display       "PLL output (MHz)"
183
            flavor         data
184
            legal_values   275000000 to 290000000
185
            calculated {  2 * CYGNUM_HAL_ARM_LPC24XX_PLL_MUL *
186
                          CYGNUM_HAL_ARM_LPC24XX_XTAL_FREQ /
187
                          CYGNUM_HAL_ARM_LPC24XX_PLL_DIV}
188
            description "
189
                Normally the PLL output must be in the range of 275 MHz to
190
                550 MHz Because of a chip errata the maximum output of the CCO
191
                within the PLL block is limited to 290 MHz."
192
        }
193
 
194
        cdl_component CYGNUM_HAL_ARM_LPC24XX_CLOCK_SPEED {
195
            display       "CPU clock speed"
196
            flavor        data
197
            calculated {  2 * CYGNUM_HAL_ARM_LPC24XX_PLL_MUL *
198
                          CYGNUM_HAL_ARM_LPC24XX_XTAL_FREQ /
199
                          CYGNUM_HAL_ARM_LPC24XX_PLL_DIV /
200
                          CYGNUM_HAL_ARM_LPC24XX_CPU_CLK_DIV}
201
            description "
202
                The core CPU clock speed is the PLL output divided by the
203
                CPU clock divider"
204
 
205
            cdl_option CYGNUM_HAL_ARM_LPC24XX_CPU_CLK_DIV {
206
                display       "CPU clock divider"
207
                flavor        data
208
                legal_values  6 to 256
209
                default_value { 6 }
210
                description "
211
                    The CPU clock divider controls the division of the PLL
212
                    output before it is used by the CPU. When the PLL is
213
                    bypassed, the division may be by 1. When the PLL is
214
                    running, the output must be divided in order to bring the
215
                    CPU clock frequency (CCLK) within operating limits. An 8
216
                    bit divider allows a range of options, including slowing
217
                    CPU operation to a low rate for temporary power savings
218
                    without turning off the PLL. Only even values
219
                    (2, 4, 6, ..., 256) are supported and can be used.
220
                    Warning: Using an odd value (1, 3, 5, ..., 255) when
221
                    setting this option may result in incorrect operation of
222
                    the device."
223
             }
224
        }
225
 
226
 
227
        cdl_component CYGNUM_HAL_ARM_LPC24XX_USB_CLOCK_SPEED {
228
            display       "USB clock speed"
229
            flavor        data
230
            calculated {  2 * CYGNUM_HAL_ARM_LPC24XX_PLL_MUL *
231
                          CYGNUM_HAL_ARM_LPC24XX_XTAL_FREQ /
232
                          CYGNUM_HAL_ARM_LPC24XX_PLL_DIV /
233
                          CYGNUM_HAL_ARM_LPC24XX_USB_CLK_DIV}
234
            description "
235
                The USB clock speed is the PLL output divided by the
236
                USB clock divider"
237
 
238
            cdl_option CYGNUM_HAL_ARM_LPC24XX_USB_CLK_DIV {
239
                display       "USB clock divider"
240
                flavor        data
241
                legal_values  1 to 8
242
                default_value { 6 }
243
                description "
244
                    This divider controls the division of the PLL
245
                    output before it is used by the USB block. If the
246
                    PLL is bypassed, the division may be by 1. In that
247
                    case, the PLL input frequency must be 48 MHz, with
248
                    a 500 ppm tolerance. When the PLL is running, the
249
                    output must be divided in order to bring the USB
250
                    clock frequency to 48 MHz with a 50% duty cycle. A
251
                    4-bit divider allows obtaining the correct USB
252
                    clock from any even multiple of 48 MHz (i.e. any
253
                    mutliple of 96 MHz) within the PLL operating
254
                    range."
255
            }
256
        }
257
 
258
        cdl_component CYGNUM_HAL_ARM_LPC2XXX_CAN_CLK {
259
            display       "CAN clock speed"
260
            flavor        data
261
            calculated   {  CYGNUM_HAL_ARM_LPC24XX_CLOCK_SPEED /
262
                            CYGNUM_HAL_ARM_LPC24XX_CAN_CLK_DIV}
263
            description "
264
                The CAN clock speed is the CPU clock output divided by the
265
                CAN clock divider"
266
 
267
            cdl_option CYGNUM_HAL_ARM_LPC24XX_CAN_CLK_DIV {
268
                display       "CAN clock divider"
269
                flavor        data
270
                legal_values  { 1 2 4 6 }
271
                default_value { 1 }
272
                description "
273
                    This divider selects the peripheral clock for both CAN
274
                    channels. The divider divides the CPU clock to get the
275
                    clock for the CAN peripherals."
276
            }
277
        }
278
 
279
        cdl_component CYGNUM_HAL_ARM_LPC24XX_RTC_CLK {
280
            display       "RTC clock speed"
281
            flavor        data
282
            calculated   {  CYGNUM_HAL_ARM_LPC24XX_CLOCK_SPEED /
283
                            CYGNUM_HAL_ARM_LPC24XX_RTC_CLK_DIV}
284
            description "
285
                The RTC clock speed is the CPU clock output divided by the
286
                RTC clock divider"
287
 
288
            cdl_option CYGNUM_HAL_ARM_LPC24XX_RTC_CLK_DIV {
289
                display       "RTC clock divider"
290
                flavor        data
291
                legal_values  { 2 4 8 }
292
                default_value { 2 }
293
                description "
294
                    This divider selects the peripheral clock for on-chip
295
                    RTC if no external 32.768 kHz crystal clock for the
296
                    on-chip real-time clock peripheral unit is provided."
297
            }
298
        }
299
 
300
        cdl_component CYGNUM_HAL_ARM_LPC24XX_ADC_CLK {
301
            display       "ADC clock speed"
302
            flavor        data
303
            calculated   {  CYGNUM_HAL_ARM_LPC24XX_CLOCK_SPEED /
304
                            CYGNUM_HAL_ARM_LPC24XX_ADC_CLK_DIV}
305
            description "
306
                The ADC clock speed is the CPU clock output divided by the
307
                ADC clock divider"
308
 
309
            cdl_option CYGNUM_HAL_ARM_LPC24XX_ADC_CLK_DIV {
310
                display       "ADC clock divider"
311
                flavor        data
312
                legal_values  { 1 2 4 8 }
313
                default_value { 1 }
314
                description "
315
                    This divider selects the peripheral clock for on-chip
316
                    ADC. The ADC clock is the input clock of the ADC
317
                    peripheral."
318
            }
319
        }
320
 
321
        for { set ::channel 0 } { $::channel < 3 } { incr ::channel } {
322
            cdl_component CYGNUM_HAL_ARM_LPC24XX_I2C[set ::channel]_CLK {
323
                display       "I2C channel [set ::channel] clock speed"
324
                flavor        data
325
                calculated    CYGNUM_HAL_ARM_LPC24XX_CLOCK_SPEED / \
326
                              CYGNUM_HAL_ARM_LPC24XX_I2C[set ::channel]_CLK_DIV
327
                description "
328
                    The I2C clock speed is the CPU clock output divided by the
329
                    I2C clock divider"
330
 
331
                cdl_option CYGNUM_HAL_ARM_LPC24XX_I2C[set ::channel]_CLK_DIV {
332
                    display       "I2C channel [set ::channel] clock divider"
333
                    flavor        data
334
                    legal_values  { 1 2 4 8 }
335
                    default_value { 1 }
336
                    description "
337
                        This divider selects the peripheral clock for I2C
338
                        channel [set ::channel]. The divider divides the CPU
339
                        clock to get the clock for the I2C peripheral."
340
                }
341
            }
342
        }
343
    }
344
 
345
    for { set ::channel 0 } { $::channel < 3 } { incr ::channel } {
346
        cdl_component CYGHWR_HAL_ARM_LPC24XX_I2C[set ::channel]_SUPP {
347
            display       "I2C channel [set ::channel] configuration"
348
            parent        CYGPKG_DEVS_I2C_ARM_LPC2XXX
349
            active_if     CYGPKG_DEVS_I2C_ARM_LPC2XXX
350
            flavor         bool
351
            default_value  [set ::channel] == 0
352
            description "
353
                I2C channel [set ::channel] configuration data."
354
 
355
            cdl_option CYGNUM_HAL_ARM_LPC24XX_I2C[set ::channel]_INT_PRIO {
356
                display       "I2C channel [set ::channel] interrupt priority"
357
                flavor        data
358
                legal_values  0 to 15
359
                default_value 15
360
                description "
361
                    There are 16 priority levels, corresponding to the
362
                    values 0 through 15 decimal, of which 15 is the
363
                    lowest priority.  The reset value of these
364
                    interrupt priority registers defaults all
365
                    interrupts to the lowest priority 15, allowing a
366
                    single write to elevate the priority of an
367
                    individual interrupt."
368
            }
369
 
370
            cdl_option CYGNUM_HAL_ARM_LPC24XX_I2C[set ::channel]_BUS_FREQ {
371
                display       "I2C channel [set ::channel] bus frequency (Hz)"
372
                flavor        data
373
                legal_values  {100000 400000}
374
                default_value 100000
375
                description "
376
                    This option selects the data rate for the I2C bus."
377
            }
378
        }
379
    }
380
 
381
    cdl_component CYGNUM_HAL_RTC_CONSTANTS {
382
        display       "Real-time clock constants"
383
        flavor        none
384
 
385
        cdl_option CYGNUM_HAL_RTC_NUMERATOR {
386
            display       "Real-time clock numerator"
387
            flavor        data
388
            default_value 1000000000
389
        }
390
        cdl_option CYGNUM_HAL_RTC_DENOMINATOR {
391
            display       "Real-time clock denominator"
392
            flavor        data
393
            default_value 100
394
        }
395
        cdl_option CYGNUM_HAL_RTC_PERIOD {
396
            display       "Real-time clock period"
397
            flavor        data
398
            default_value { ((CYGNUM_HAL_ARM_LPC24XX_CLOCK_SPEED) /
399
                              CYGNUM_HAL_RTC_DENOMINATOR) }
400
        }
401
    }
402
 
403
    cdl_option CYGHWR_HAL_ARM_LPC24XX_IDLE_PWRSAVE {
404
        display       "Stop clock in idle loop to save power"
405
        flavor        bool
406
        default_value { is_active(CYGPKG_REDBOOT) ? 0 : 1 }
407
        description   "
408
           Select this option when it is desired to save power by
409
           stopping the processor clock in the idle loop. This is
410
           controlled by the PCON register. Generally this is a good
411
           thing, but it may be necessary to disable this when
412
           debugging via JTAG, as stopping the clock can prevent the
413
           debugger getting control of the system."
414
    }
415
 
416
    cdl_option CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY {
417
            display             "Default priority for system clock interrupts"
418
            flavor              data
419
            legal_values  { 0 to 15 }
420
        default_value 15
421
            description "
422
            There are 16 priority levels, corresponding to the values 0 through
423
            15 decimal, of which 15 is the lowest priority. The reset value of
424
            these interrupt priority registers defaults all interrupts to the
425
            lowest priority, allowing a single write to elevate the priority
426
            of an individual interrupt."
427
    }
428
 
429
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.