diff options
author | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2009-02-27 11:26:44 +0000 |
---|---|---|
committer | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2009-02-27 11:26:44 +0000 |
commit | 9647f7feac36cc41c25b852eb8ecdd728b5486d1 (patch) | |
tree | 3b331d67718faf43d1c38e7896cb2be5f108d328 /c/src/lib/libbsp/arm/lpc24xx/misc/system-clocks.c | |
parent | * bsp_specs: Added crtbegin.o and crtend.o to support global C++ (diff) | |
download | rtems-9647f7feac36cc41c25b852eb8ecdd728b5486d1.tar.bz2 |
* README: Added NCS.
* Makefile.am, configure.ac, preinstall.am: Added BSP variants.
* console/console-config.c, clock/clock-config.c, ssp/ssp.c: Fixed
register settings. Cleanup.
* include/bsp.h: Added network defines and functions.
* include/lpc24xx.h: Added AHB and EMC defines. Fixed Ethernet status
sizes.
* include/system-clocks.h, misc/system-clocks.c: Added micro seconds
delay function that uses Timer 1. Changed PLL setup.
* network/network.c, startup/bspreset.c, startup/linkcmds.lpc2478,
startup/linkcmds.lpc2478_ncs, startup/linkcmds.lpc2478_ncs_ram: New
files.
* startup/bspstart.c: Added EMC initialization. Changes for ROM boot.
Diffstat (limited to 'c/src/lib/libbsp/arm/lpc24xx/misc/system-clocks.c')
-rw-r--r-- | c/src/lib/libbsp/arm/lpc24xx/misc/system-clocks.c | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/c/src/lib/libbsp/arm/lpc24xx/misc/system-clocks.c b/c/src/lib/libbsp/arm/lpc24xx/misc/system-clocks.c index 8ff367c27e..6de7dd7d8d 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/misc/system-clocks.c +++ b/c/src/lib/libbsp/arm/lpc24xx/misc/system-clocks.c @@ -28,16 +28,49 @@ */ #define LPC24XX_OSCILLATOR_INTERNAL 4000000U -#if !defined(LPC24XX_OSCILLATOR_MAIN) -#error unknown main oscillator frequency +#ifndef LPC24XX_OSCILLATOR_MAIN + #error "unknown main oscillator frequency" #endif -#if !defined(LPC24XX_OSCILLATOR_RTC) -#error unknown rtc oscillator frequency +#ifndef LPC24XX_OSCILLATOR_RTC + #error "unknown RTC oscillator frequency" #endif /** + * @brief Delay for @a us micro seconds. + * + * @note Uses Timer 1. + */ +void lpc24xx_micro_seconds_delay( unsigned us) +{ + /* Stop and reset timer */ + T1TCR = 0x02; + + /* Set prescaler to zero */ + T1PR = 0x00; + + /* Set match value */ + T1MR0 = (uint32_t) ((uint64_t) 4000000 * (uint64_t) us / (uint64_t) lpc24xx_cclk()) + 1; + + /* Reset all interrupt flags */ + T1IR = 0xff; + + /* Stop timer on match */ + T1MCR = 0x04; + + /* Start timer */ + T1TCR = 0x01; + + /* Wait until delay time has elapsed */ + while ((T1TCR & 0x01) != 0) { + /* Wait */ + } +} + +/** * @brief Returns the CPU clock frequency in [Hz]. + * + * Return zero in case of an unexpected PLL input frequency. */ unsigned lpc24xx_cclk( void) { @@ -58,9 +91,6 @@ unsigned lpc24xx_cclk( void) pllinclk = LPC24XX_OSCILLATOR_RTC; break; default: - while (1) { - /* Spin forever */ - } return 0; } @@ -116,7 +146,7 @@ void lpc24xx_set_pll( unsigned clksrc, unsigned nsel, unsigned msel, unsigned cc } /* Set CPU clock divider to a reasonable save value */ - CCLKCFG = SET_CCLKCFG_CCLKSEL( 0, 1); + CCLKCFG = 0; /* Disable PLL if necessary */ if (pll_enabled) { |