Initial merge of Nordic Semi nRF51/52 from Unicore MX back into Libopencm3
* merged: nrf tree from unicore-mx * fixed: small changes to make merged code play with rest of locm3 again * added: linker script generator defines for nRF51/52 stubs * added: doxygen support This removes code and changes names and styles where relevant to be more inline with normal libopencm3. NRF52x library is built for hardfloat, M4F by default. The M4 no float variants are less common, and if needed, the library can be built manually for those variants. Unless some very common boards show up using those parts, we don't need an extra library build. Reviewed-by: Karl Palsson <karlp@tweak.net.au> Tested-by: Karl Palsson <karlp@tweak.net.au>
This commit is contained in:
committed by
Karl Palsson
parent
c36a4538b0
commit
213a6b4244
50
lib/nrf/51/Makefile
Normal file
50
lib/nrf/51/Makefile
Normal file
@@ -0,0 +1,50 @@
|
||||
##
|
||||
## This file is part of the libopencm3 project.
|
||||
## Copyright (C) 2017-2018 Unicore MX project<dev(at)lists(dot)unicore-mx(dot)org>
|
||||
## Copyright (C) 2021 Eduard Drusa <ventyl86(at)netkosice(dot)sk>
|
||||
##
|
||||
## This library is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU Lesser General Public License as published by
|
||||
## the Free Software Foundation, either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This library is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU Lesser General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU Lesser General Public License
|
||||
## along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
##
|
||||
|
||||
LIBNAME = libopencm3_nrf51
|
||||
SRCLIBDIR ?= ../..
|
||||
|
||||
CC = $(PREFIX)gcc
|
||||
AR = $(PREFIX)ar
|
||||
|
||||
FP_FLAGS ?= -msoft-float
|
||||
|
||||
TGT_CFLAGS = -Os -Wall -Wextra -I../../../include -fno-common \
|
||||
-mcpu=cortex-m0 -mthumb $(FP_FLAGS) \
|
||||
-Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes \
|
||||
-ffunction-sections -fdata-sections -MD -DNRF51
|
||||
|
||||
TGT_CFLAGS += $(DEBUG_FLAGS)
|
||||
TGT_CFLAGS += $(STANDARD_FLAGS)
|
||||
# ARFLAGS = rcsv
|
||||
ARFLAGS = rcs
|
||||
|
||||
OBJS += clock_common.o clock.o
|
||||
OBJS += gpio.o
|
||||
OBJS += i2c.o
|
||||
OBJS += ppi.o
|
||||
OBJS += rtc.o
|
||||
OBJS += radio_common.o ./radio.o
|
||||
OBJS += timer.o
|
||||
OBJS += uart.o
|
||||
|
||||
VPATH += ../../cm3:../common
|
||||
|
||||
include ../../Makefile.include
|
||||
|
||||
45
lib/nrf/51/clock.c
Normal file
45
lib/nrf/51/clock.c
Normal file
@@ -0,0 +1,45 @@
|
||||
/** @addtogroup clock_file CLOCK peripheral API
|
||||
*
|
||||
* @brief <b>Access functions for the NRF51 Clock Controller </b>
|
||||
*
|
||||
* @ingroup peripheral_apis
|
||||
* LGPL License Terms @ref lgpl_license
|
||||
* @author @htmlonly © @endhtmlonly 2016
|
||||
* Roel Postelmans
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is part of the unicore-mx project.
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <libopencm3/nrf/clock.h>
|
||||
#include <libopencm3/nrf/periph.h>
|
||||
/**@{*/
|
||||
|
||||
/** @brief Select nominal frequency of external crystal for HFCLK.
|
||||
*
|
||||
* @details This register has to match the actual crystal used in design to
|
||||
* enable correct behaviour.
|
||||
*
|
||||
* @param[in] freq enum clock_xtal_freq
|
||||
* */
|
||||
void clock_set_xtal_freq(enum clock_xtal_freq freq)
|
||||
{
|
||||
CLOCK_XTALFREQ = freq;
|
||||
}
|
||||
/**@}*/
|
||||
|
||||
66
lib/nrf/51/radio.c
Normal file
66
lib/nrf/51/radio.c
Normal file
@@ -0,0 +1,66 @@
|
||||
/** @addtogroup radio_file RADIO peripheral API
|
||||
*
|
||||
* @brief <b>Access functions for the NRF51 2.4 GHz Radio </b>
|
||||
* @ingroup peripheral_apis
|
||||
* LGPL License Terms @ref lgpl_license
|
||||
* @author @htmlonly © @endhtmlonly 2016
|
||||
* Maxim Sloyko <maxims@google.com>
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is part of the unicore-mx project.
|
||||
*
|
||||
* This library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <libopencm3/nrf/ficr.h>
|
||||
#include <libopencm3/nrf/radio.h>
|
||||
|
||||
/**@{*/
|
||||
|
||||
/** @brief Set radio mode.
|
||||
*
|
||||
* @details The function also performs all required overrides for BLE and NRF mode.
|
||||
*
|
||||
* @param[in] mode the new mode.
|
||||
* */
|
||||
void radio_set_mode(enum radio_mode mode)
|
||||
{
|
||||
/* This is alias to memory register, thus volatile */
|
||||
volatile uint32_t *override_pos = 0;
|
||||
if ((RADIO_MODE_BLE_1MBIT == mode)
|
||||
&& (FICR_OVERRIDEEN & ~FICR_OVERRIDEEN_BLE_1MBIT)) {
|
||||
/* Need to use Override */
|
||||
override_pos = &FICR_BLE_1MBIT0;
|
||||
} else if ((RADIO_MODE_NRF_1MBIT == mode)
|
||||
&& (FICR_OVERRIDEEN & ~FICR_OVERRIDEEN_NRF_1MBIT)) {
|
||||
override_pos = &FICR_NRF_1MBIT0;
|
||||
}
|
||||
|
||||
if (override_pos) {
|
||||
uint8_t i;
|
||||
for (i = 0; i <= 4; ++i, ++override_pos) {
|
||||
RADIO_OVERRIDE(i) = *override_pos;
|
||||
}
|
||||
|
||||
RADIO_OVERRIDE(4) |= RADIO_OVERRIDE4_ENABLE;
|
||||
} else {
|
||||
RADIO_OVERRIDE(4) &= ~RADIO_OVERRIDE4_ENABLE;
|
||||
}
|
||||
|
||||
RADIO_MODE = mode;
|
||||
}
|
||||
/**@}*/
|
||||
|
||||
Reference in New Issue
Block a user