[PATCH 11/15] HiFive1: set up oscillators
Gedare Bloom
gedare at rtems.org
Mon Aug 21 17:40:48 UTC 2017
On Mon, Aug 21, 2017 at 12:27 PM, Denis Obrezkov
<denisobrezkov at gmail.com> wrote:
> 2017-08-17 17:16 GMT+02:00 Gedare Bloom <gedare at rtems.org>:
>>
>> On Wed, Aug 16, 2017 at 11:13 AM, Denis Obrezkov
>> <denisobrezkov at gmail.com> wrote:
>> > ---
>> > c/src/lib/libbsp/riscv32/hifive1/start/bspstart.c | 65
>> > +++++++++++++++++++++++
>> > 1 file changed, 65 insertions(+)
>> > create mode 100644 c/src/lib/libbsp/riscv32/hifive1/start/bspstart.c
>> >
>> > diff --git a/c/src/lib/libbsp/riscv32/hifive1/start/bspstart.c
>> > b/c/src/lib/libbsp/riscv32/hifive1/start/bspstart.c
>> > new file mode 100644
>> > index 0000000..efef4e0
>> > --- /dev/null
>> > +++ b/c/src/lib/libbsp/riscv32/hifive1/start/bspstart.c
>> > @@ -0,0 +1,65 @@
>> > +/*
>> > + * Copyright (c) 2017
>> > + * Denis Obrezkov <denisobrezkov at gmail.com>
>> > + *
>> > + * The license and distribution terms for this file may be
>> > + * found in the file LICENSE in this distribution or at
>> > + * http://www.rtems.org/license/LICENSE.
>> > + */
>> > +
>> > +#include <bsp.h>
>> > +#include <bsp/bootcard.h>
>> > +#include <bsp/prci.h>
>> > +#include <bsp/fe310.h>
>> > +
>> > +/*
>> > + * This routine make initialization of HiFive1 (FE310) counters.
>> > + */
>> > +
>> > +void bsp_start( void )
>> > +{
>> > + volatile uint32_t * pll_reg = (volatile uint32_t *) PRCI_PLLCFG;
>> > + volatile uint32_t * high_freq_reg = (volatile uint32_t *)
>> > PRCI_HFROSCCFG;
>> > + volatile uint32_t * spi0 = (volatile uint32_t *) 0x10014000;
>> > +
>> > + volatile uint64_t * mtime_reg = (volatile uint64_t * ) 0x0200bff8;
>> > + volatile uint64_t * mtimecmp_reg = (volatile uint64_t * ) 0x02004000;
>> > +
>> > +#ifdef USE_HFROSC
>> > + /* Setting up osc frequency */
>> > + uint32_t tmp_reg = 0;
>> > + /* Install divider in high frequency oscillator */
>> > + tmp_reg |= (HFROSC_DIV_VAL & 0x2f) << HFROSC_DIV_OFFSET;
>> > + tmp_reg |= (HFROSC_TRIM_VAL & 0x1F) << HFROSC_TRIM_OFFSET;
>> > + tmp_reg |= (HFROSC_EN_VAL & 0x1) << HFROSC_EN_OFFSET;
>> > + (*high_freq_reg) = tmp_reg;
>> It would be good to make the above into a function.
>
> I agree but in what file should we place it?
> it's not a clock or a timer.
Some utility header for the bsp would be fine.
>>
>>
>> > + while (( (*high_freq_reg) & ((HFROSC_RDY_VAL & 0x1) \
>> > + << HFROSC_RDY_OFFSET)) == 0 ) {
>> > + ;
>> > + }
>> > +#endif /* USE_HFROSC */
>> > +
>> > +#ifdef USE_HFXOSC
>> > + volatile uint32_t * ext_freq_reg = (volatile uint32_t *)
>> > PRCI_HFXOSCCFG;
>> > + (*ext_freq_reg) |= ((HFXOSC_EN_VAL & 0x1) << HFXOSC_EN_OFFSET);
>> > + while (( (*ext_freq_reg) & ((HFXOSC_RDY_VAL & 0x1) \
>> > + << HFXOSC_RDY_OFFSET)) == 0 ) {
>> > + ;
>> > + }
>> > + (*pll_reg) |= (0x1 << 18);
>> > + (*pll_reg) |= (0x1 << 17);
>> > + (*pll_reg) |= (0x1 << PLL_SEL_OFFSET);
>> > + (*high_freq_reg) &= ~(0x1 << HFROSC_EN_OFFSET);
>> > +
>> > +#endif /* USE_HFXOSC */
>> > +#ifndef USE_PLL
>> > + /* Disable PLL */
>> > + (*pll_reg) &= ~(0x1 << PLL_SEL_OFFSET);
>> > +#else
>> > +
>> > +#endif
>> > +
>> > + bsp_interrupt_initialize();
>> > +
>> > +}
>> > +
>> > --
>> > 2.1.4
>> >
>> > _______________________________________________
>> > devel mailing list
>> > devel at rtems.org
>> > http://lists.rtems.org/mailman/listinfo/devel
>
>
>
>
> --
> Regards, Denis Obrezkov
More information about the devel
mailing list