[PATCH v2 10/15] HiFive1: set up oscillators
Denis Obrezkov
denisobrezkov at gmail.com
Tue Aug 22 19:15:02 UTC 2017
Ok, I fixed it.
2017-08-22 3:48 GMT+02:00 Gedare Bloom <gedare at rtems.org>:
> On Mon, Aug 21, 2017 at 7:56 PM, Denis Obrezkov <denisobrezkov at gmail.com>
> wrote:
> > ---
> > c/src/lib/libbsp/riscv32/hifive1/include/prci.h | 9 +++++
> > c/src/lib/libbsp/riscv32/hifive1/start/bspstart.c | 23 +++++++++++++
> > c/src/lib/libbsp/riscv32/hifive1/start/prci.c | 40
> +++++++++++++++++++++++
> > 3 files changed, 72 insertions(+)
> > create mode 100644 c/src/lib/libbsp/riscv32/hifive1/start/bspstart.c
> >
> > diff --git a/c/src/lib/libbsp/riscv32/hifive1/include/prci.h
> b/c/src/lib/libbsp/riscv32/hifive1/include/prci.h
> > index c71edbc..3a4ea15 100644
> > --- a/c/src/lib/libbsp/riscv32/hifive1/include/prci.h
> > +++ b/c/src/lib/libbsp/riscv32/hifive1/include/prci.h
> > @@ -56,6 +56,10 @@
> > #define HFROSC_TRIM_OFFSET 16
> > #define HFROSC_EN_OFFSET 30
> > #define HFROSC_RDY_OFFSET 31
> > +#define HFROSC_DIV_MASK 0x2F
> > +#define HFROSC_TRIM_MASK 0x1F
> > +#define HFROSC_EN_MASK 0x1
> > +
> >
> > /*
> > * HFXOSCCFG configuration register values
> > @@ -69,7 +73,12 @@
> > * PLLCFG configuration register
> > */
> > #define PLL_SEL_OFFSET 16
> > +#define PLL_REF_SEL_OFFSET 17
> > +#define PLL_BYPASS_OFFSET 18
> > +#define PLL_LOCK_OFFSET 31
> >
> > uint32_t hifive1_current_freq();
> >
> > +void initialize_oscills();
> This function is in the application namespace. It should probably be
> hifive1_initialize_oscillators() to be a bit more distinct.
>
> > +
> > #endif /* PRCI_H */
> > 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..bb04a22
> > --- /dev/null
> > +++ b/c/src/lib/libbsp/riscv32/hifive1/start/bspstart.c
> > @@ -0,0 +1,23 @@
> > +/*
> > + * 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 )
> > +{
> > + initialize_oscills();
> > + bsp_interrupt_initialize();
> > +}
> > diff --git a/c/src/lib/libbsp/riscv32/hifive1/start/prci.c
> b/c/src/lib/libbsp/riscv32/hifive1/start/prci.c
> > index bf3d288..1f3abb6 100644
> > --- a/c/src/lib/libbsp/riscv32/hifive1/start/prci.c
> > +++ b/c/src/lib/libbsp/riscv32/hifive1/start/prci.c
> > @@ -26,7 +26,47 @@
> > */
> >
> > #include <bsp/prci.h>
> > +#include <bsp/fe310.h>
> >
> > uint32_t hifive1_current_freq() {
> > return hifive1_default_freq;
> > }
> > +
> > +void initialize_oscills() {
> > + volatile uint32_t * pll_reg = (volatile uint32_t *) PRCI_PLLCFG;
> > + volatile uint32_t * high_freq_reg = (volatile uint32_t *)
> PRCI_HFROSCCFG;
> > +
> > +#ifdef USE_HFROSC
> > + /* Setting up osc frequency */
> > + uint32_t tmp_reg = 0;
> > + /* Install divider in high frequency oscillator */
> > + tmp_reg |= (HFROSC_DIV_VAL & HFROSC_DIV_MASK) << HFROSC_DIV_OFFSET;
> > + tmp_reg |= (HFROSC_TRIM_VAL & HFROSC_TRIM_MASK) << HFROSC_TRIM_OFFSET;
> > + tmp_reg |= (HFROSC_EN_VAL & HFROSC_EN_MASK) << HFROSC_EN_OFFSET;
> > + (*high_freq_reg) = tmp_reg;
> > + 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 << PLL_BYPASS_OFFSET);
> > + (*pll_reg) |= (0x1 << PLL_REF_SEL_OFFSET);
> > + (*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
> > +}
> > --
> > 2.1.4
> >
> > _______________________________________________
> > devel mailing list
> > devel at rtems.org
> > http://lists.rtems.org/mailman/listinfo/devel
>
--
Regards, Denis Obrezkov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20170822/1a8caa28/attachment-0002.html>
More information about the devel
mailing list