aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/ports/NRF5/NRF51822
diff options
context:
space:
mode:
Diffstat (limited to 'os/hal/ports/NRF5/NRF51822')
-rw-r--r--os/hal/ports/NRF5/NRF51822/hal_i2c_lld.c2
-rw-r--r--os/hal/ports/NRF5/NRF51822/hal_lld.h5
-rw-r--r--os/hal/ports/NRF5/NRF51822/hal_pal_lld.c158
-rw-r--r--os/hal/ports/NRF5/NRF51822/hal_pal_lld.h347
-rw-r--r--os/hal/ports/NRF5/NRF51822/hal_serial_lld.c325
-rw-r--r--os/hal/ports/NRF5/NRF51822/hal_serial_lld.h155
-rw-r--r--os/hal/ports/NRF5/NRF51822/hal_st_lld.c294
-rw-r--r--os/hal/ports/NRF5/NRF51822/hal_st_lld.h275
-rw-r--r--os/hal/ports/NRF5/NRF51822/nrf_delay.h (renamed from os/hal/ports/NRF5/NRF51822/nrf51_delay.h)4
-rw-r--r--os/hal/ports/NRF5/NRF51822/platform.mk15
10 files changed, 16 insertions, 1564 deletions
diff --git a/os/hal/ports/NRF5/NRF51822/hal_i2c_lld.c b/os/hal/ports/NRF5/NRF51822/hal_i2c_lld.c
index 611a004..a0a09ed 100644
--- a/os/hal/ports/NRF5/NRF51822/hal_i2c_lld.c
+++ b/os/hal/ports/NRF5/NRF51822/hal_i2c_lld.c
@@ -24,7 +24,7 @@
#include "osal.h"
#include "hal.h"
-#include "nrf51_delay.h"
+#include "nrf_delay.h"
#if HAL_USE_I2C || defined(__DOXYGEN__)
diff --git a/os/hal/ports/NRF5/NRF51822/hal_lld.h b/os/hal/ports/NRF5/NRF51822/hal_lld.h
index e404020..b05d8b6 100644
--- a/os/hal/ports/NRF5/NRF51822/hal_lld.h
+++ b/os/hal/ports/NRF5/NRF51822/hal_lld.h
@@ -30,6 +30,11 @@
/*===========================================================================*/
/**
+ * @name Chip serie
+ */
+#define NRF_SERIE 51
+
+/**
* @name Platform identification
* @{
*/
diff --git a/os/hal/ports/NRF5/NRF51822/hal_pal_lld.c b/os/hal/ports/NRF5/NRF51822/hal_pal_lld.c
deleted file mode 100644
index 69fc9fe..0000000
--- a/os/hal/ports/NRF5/NRF51822/hal_pal_lld.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- Copyright (C) 2015 Fabio Utzig
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file pal_lld.c
- * @brief NRF51822 PAL subsystem low level driver source.
- *
- * @addtogroup PAL
- * @{
- */
-
-#include "osal.h"
-#include "hal.h"
-
-#if (HAL_USE_PAL == TRUE) || defined(__DOXYGEN__)
-
-/*===========================================================================*/
-/* Driver local definitions. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver exported variables. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver local variables and types. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver local functions. */
-/*===========================================================================*/
-
-void _pal_lld_setpadmode(ioportid_t port, uint8_t pad, iomode_t mode)
-{
- (void)port;
- osalDbgAssert(pad <= 31, "pal_lld_setpadmode() - invalid pad");
-
- switch (mode) {
- case PAL_MODE_RESET:
- case PAL_MODE_UNCONNECTED:
- NRF_GPIO->PIN_CNF[pad] =
- (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) |
- (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) |
- (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) |
- (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) |
- (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos);
- break;
- case PAL_MODE_INPUT:
- case PAL_MODE_INPUT_ANALOG:
- NRF_GPIO->PIN_CNF[pad] =
- (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) |
- (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) |
- (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) |
- (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) |
- (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos);
- break;
- case PAL_MODE_INPUT_PULLUP:
- NRF_GPIO->PIN_CNF[pad] =
- (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) |
- (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) |
- (GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos) |
- (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) |
- (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos);
- break;
- case PAL_MODE_INPUT_PULLDOWN:
- NRF_GPIO->PIN_CNF[pad] =
- (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) |
- (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) |
- (GPIO_PIN_CNF_PULL_Pulldown << GPIO_PIN_CNF_PULL_Pos) |
- (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) |
- (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos);
- break;
- case PAL_MODE_OUTPUT_PUSHPULL:
- NRF_GPIO->PIN_CNF[pad] =
- (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) |
- (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos) |
- (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) |
- (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) |
- (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos);
- break;
- case PAL_MODE_OUTPUT_OPENDRAIN:
- NRF_GPIO->PIN_CNF[pad] =
- (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) |
- (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) |
- (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) |
- (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) |
- (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos);
- break;
- default:
- osalDbgAssert(FALSE, "invalid pal mode");
- break;
- }
-}
-
-/*===========================================================================*/
-/* Driver interrupt handlers. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver exported functions. */
-/*===========================================================================*/
-
-/**
- * @brief NRF51 I/O ports configuration.
- *
- * @param[in] config the NRF51 ports configuration
- *
- * @notapi
- */
-void _pal_lld_init(const PALConfig *config)
-{
- uint8_t i;
-
- for (i = 0; i < TOTAL_GPIO_PADS; i++) {
- pal_lld_setpadmode(IOPORT1, i, config->pads[i]);
- }
-}
-
-/**
- * @brief Pads mode setup.
- * @details This function programs a pads group belonging to the same port
- * with the specified mode.
- *
- * @param[in] port the port identifier
- * @param[in] mask the group mask
- * @param[in] mode the mode
- *
- * @notapi
- */
-void _pal_lld_setgroupmode(ioportid_t port,
- ioportmask_t mask,
- iomode_t mode)
-{
- uint8_t i;
-
- for (i = 0; i < TOTAL_GPIO_PADS; i++, mask >>= 1) {
- if (mask & 1) {
- pal_lld_setpadmode(port, i, mode);
- }
- }
-}
-
-#endif /* HAL_USE_PAL == TRUE */
-
-/** @} */
diff --git a/os/hal/ports/NRF5/NRF51822/hal_pal_lld.h b/os/hal/ports/NRF5/NRF51822/hal_pal_lld.h
deleted file mode 100644
index 5032916..0000000
--- a/os/hal/ports/NRF5/NRF51822/hal_pal_lld.h
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- Copyright (C) 2015 Fabio Utzig
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file pal_lld.h
- * @brief NRF51822 PAL subsystem low level driver header.
- *
- * @addtogroup PAL
- * @{
- */
-
-#ifndef HAL_PAL_LLD_H
-#define HAL_PAL_LLD_H
-
-#if (HAL_USE_PAL == TRUE) || defined(__DOXYGEN__)
-
-/*===========================================================================*/
-/* Unsupported modes and specific modes */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* I/O Ports Types and constants. */
-/*===========================================================================*/
-
-#define TOTAL_GPIO_PADS 32
-
-/**
- * @name Port related definitions
- * @{
- */
-/**
- * @brief Width, in bits, of an I/O port.
- */
-#define PAL_IOPORTS_WIDTH 32U
-
-/**
- * @brief Whole port mask.
- * @brief This macro specifies all the valid bits into a port.
- */
-#define PAL_WHOLE_PORT ((ioportmask_t)0xFFFFFFFFU)
-/** @} */
-
-/**
- * @name Line handling macros
- * @{
- */
-/**
- * @brief Forms a line identifier.
- * @details A port/pad pair are encoded into an @p ioline_t type. The encoding
- * of this type is platform-dependent.
- */
-#define PAL_LINE(port, pad) \
- ((ioline_t)((uint32_t)(pad)))
-
-/**
- * @brief Decodes a port identifier from a line identifier.
- */
-#define PAL_PORT(line) \
- ((ioportid_t)(IOPORT1))
-
-/**
- * @brief Decodes a pad identifier from a line identifier.
- */
-#define PAL_PAD(line) \
- ((uint32_t)(line))
-
-/**
- * @brief Value identifying an invalid line.
- */
-#define PAL_NOLINE ((ioline_t)-1)
-/** @} */
-
-/**
- * @brief Generic I/O ports static initializer.
- * @details An instance of this structure must be passed to @p palInit() at
- * system startup time in order to initialized the digital I/O
- * subsystem. This represents only the initial setup, specific pads
- * or whole ports can be reprogrammed at later time.
- * @note Implementations may extend this structure to contain more,
- * architecture dependent, fields.
- */
-typedef struct {
- uint32_t pads[TOTAL_GPIO_PADS];
-} PALConfig;
-
-/**
- * @brief Digital I/O port sized unsigned type.
- */
-typedef uint32_t ioportmask_t;
-
-/**
- * @brief Digital I/O modes.
- */
-typedef uint8_t iomode_t;
-
-/**
- * @brief Type of an I/O line.
- */
-typedef uint32_t ioline_t;
-
-/**
- * @brief Port Identifier.
- * @details This type can be a scalar or some kind of pointer, do not make
- * any assumption about it, use the provided macros when populating
- * variables of this type.
- */
-typedef NRF_GPIO_Type *ioportid_t;
-
-/*===========================================================================*/
-/* I/O Ports Identifiers. */
-/*===========================================================================*/
-
-/**
- * @brief First I/O port identifier.
- * @details Low level drivers can define multiple ports, it is suggested to
- * use this naming convention.
- */
-#define IOPORT1 NRF_GPIO
-
-/*===========================================================================*/
-/* Implementation, some of the following macros could be implemented as */
-/* functions, if so please put them in pal_lld.c. */
-/*===========================================================================*/
-
-/**
- * @brief Low level PAL subsystem initialization.
- *
- * @param[in] config architecture-dependent ports configuration
- *
- * @notapi
- */
-#define pal_lld_init(config) _pal_lld_init(config)
-
-/**
- * @brief Reads the physical I/O port states.
- *
- * @param[in] port port identifier
- * @return The port bits.
- *
- * @notapi
- */
-#define pal_lld_readport(port) (NRF_GPIO->IN)
-
-/**
- * @brief Reads the output latch.
- * @details The purpose of this function is to read back the latched output
- * value.
- *
- * @param[in] port port identifier
- * @return The latched logical states.
- *
- * @notapi
- */
-#define pal_lld_readlatch(port) (NRF_GPIO->OUT)
-
-/**
- * @brief Writes a bits mask on a I/O port.
- *
- * @param[in] port port identifier
- * @param[in] bits bits to be written on the specified port
- *
- * @notapi
- */
-#define pal_lld_writeport(port, bits) (NRF_GPIO->OUT = (bits))
-
-/**
- * @brief Sets a bits mask on a I/O port.
- * @note The @ref PAL provides a default software implementation of this
- * functionality, implement this function if can optimize it by using
- * special hardware functionalities or special coding.
- *
- * @param[in] port port identifier
- * @param[in] bits bits to be ORed on the specified port
- *
- * @notapi
- */
-#define pal_lld_setport(port, bits) (NRF_GPIO->OUTSET = (bits))
-
-
-/**
- * @brief Clears a bits mask on a I/O port.
- * @note The @ref PAL provides a default software implementation of this
- * functionality, implement this function if can optimize it by using
- * special hardware functionalities or special coding.
- *
- * @param[in] port port identifier
- * @param[in] bits bits to be cleared on the specified port
- *
- * @notapi
- */
-#define pal_lld_clearport(port, bits) (NRF_GPIO->OUTCLR = (bits))
-
-/**
- * @brief Pads group mode setup.
- * @details This function programs a pads group belonging to the same port
- * with the specified mode.
- * @note Programming an unknown or unsupported mode is silently ignored.
- *
- * @param[in] port port identifier
- * @param[in] mask group mask
- * @param[in] offset group bit offset within the port
- * @param[in] mode group mode
- *
- * @notapi
- */
-#define pal_lld_setgroupmode(port, mask, offset, mode) \
- _pal_lld_setgroupmode(port, mask << offset, mode)
-
-/**
- * @brief Reads a logical state from an I/O pad.
- * @note The @ref PAL provides a default software implementation of this
- * functionality, implement this function if can optimize it by using
- * special hardware functionalities or special coding.
- *
- * @param[in] port port identifier
- * @param[in] pad pad number within the port
- * @return The logical state.
- * @retval PAL_LOW low logical state.
- * @retval PAL_HIGH high logical state.
- *
- * @notapi
- */
-#define pal_lld_readpad(port, pad) \
- ((NRF_GPIO->IN & ((uint32_t) 1 << pad)) ? PAL_HIGH : PAL_LOW)
-
-/**
- * @brief Writes a logical state on an output pad.
- * @note This function is not meant to be invoked directly by the
- * application code.
- * @note The @ref PAL provides a default software implementation of this
- * functionality, implement this function if can optimize it by using
- * special hardware functionalities or special coding.
- *
- * @param[in] port port identifier
- * @param[in] pad pad number within the port
- * @param[in] bit logical value, the value must be @p PAL_LOW or
- * @p PAL_HIGH
- *
- * @notapi
- */
-#define pal_lld_writepad(port, pad, bit) \
- do { \
- (void)port; \
- if (bit == PAL_HIGH) \
- NRF_GPIO->OUTSET = ((uint32_t) 1 << pad); \
- else \
- NRF_GPIO->OUTCLR = ((uint32_t) 1 << pad); \
- } while (false)
-
-/**
- * @brief Sets a pad logical state to @p PAL_HIGH.
- * @note The @ref PAL provides a default software implementation of this
- * functionality, implement this function if can optimize it by using
- * special hardware functionalities or special coding.
- *
- * @param[in] port port identifier
- * @param[in] pad pad number within the port
- *
- * @notapi
- */
-#define pal_lld_setpad(port, pad) (NRF_GPIO->OUTSET = (uint32_t) 1 << (pad))
-
-/**
- * @brief Clears a pad logical state to @p PAL_LOW.
- * @note The @ref PAL provides a default software implementation of this
- * functionality, implement this function if can optimize it by using
- * special hardware functionalities or special coding.
- *
- * @param[in] port port identifier
- * @param[in] pad pad number within the port
- *
- * @notapi
- */
-#define pal_lld_clearpad(port, pad) (NRF_GPIO->OUTCLR = (uint32_t) 1 << (pad))
-
-/**
- * @brief Toggles a pad logical state.
- * @note The @ref PAL provides a default software implementation of this
- * functionality, implement this function if can optimize it by using
- * special hardware functionalities or special coding.
- *
- * @param[in] port port identifier
- * @param[in] pad pad number within the port
- *
- * @notapi
- */
-#define pal_lld_togglepad(port, pad) \
- do { \
- uint8_t bit = (NRF_GPIO->IN >> (pad)) & 1; \
- if (bit) \
- NRF_GPIO->OUTCLR = 1 << (pad); \
- else \
- NRF_GPIO->OUTSET = 1 << (pad); \
- } while (0)
-
-/**
- * @brief Pad mode setup.
- * @details This function programs a pad with the specified mode.
- * @note The @ref PAL provides a default software implementation of this
- * functionality, implement this function if can optimize it by using
- * special hardware functionalities or special coding.
- * @note Programming an unknown or unsupported mode is silently ignored.
- *
- * @param[in] port port identifier
- * @param[in] pad pad number within the port
- * @param[in] mode pad mode
- *
- * @notapi
- */
-#define pal_lld_setpadmode(port, pad, mode) _pal_lld_setpadmode(port, pad, mode)
-
-#if !defined(__DOXYGEN__)
-extern const PALConfig pal_default_config;
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
- void _pal_lld_init(const PALConfig *config);
- void _pal_lld_setgroupmode(ioportid_t port,
- ioportmask_t mask,
- iomode_t mode);
- void _pal_lld_setpadmode(ioportid_t port,
- uint8_t pad,
- iomode_t mode);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* HAL_USE_PAL == TRUE */
-
-#endif /* HAL_PAL_LLD_H */
-
-/** @} */
diff --git a/os/hal/ports/NRF5/NRF51822/hal_serial_lld.c b/os/hal/ports/NRF5/NRF51822/hal_serial_lld.c
deleted file mode 100644
index 029c5da..0000000
--- a/os/hal/ports/NRF5/NRF51822/hal_serial_lld.c
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- Copyright (C) 2015 Fabio Utzig
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file serial_lld.c
- * @brief NRF51822 serial subsystem low level driver source.
- *
- * @addtogroup SERIAL
- * @{
- */
-
-#include "hal.h"
-
-#if (HAL_USE_SERIAL == TRUE) || defined(__DOXYGEN__)
-
-#include "nrf51.h"
-
-/*===========================================================================*/
-/* Driver local definitions. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver exported variables. */
-/*===========================================================================*/
-
-/** @brief USART1 serial driver identifier.*/
-#if (NRF51_SERIAL_USE_UART0 == TRUE) || defined(__DOXYGEN__)
-SerialDriver SD1;
-#endif
-
-/*===========================================================================*/
-/* Driver local variables and types. */
-/*===========================================================================*/
-
-/**
- * @brief Driver default configuration.
- */
-static const SerialConfig default_config = {
- .speed = 38400,
- .tx_pad = NRF51_SERIAL_PAD_DISCONNECTED,
- .rx_pad = NRF51_SERIAL_PAD_DISCONNECTED,
-#if (NRF51_SERIAL_USE_HWFLOWCTRL == TRUE)
- .rts_pad = NRF51_SERIAL_PAD_DISCONNECTED,
- .cts_pad = NRF51_SERIAL_PAD_DISCONNECTED,
-#endif
-};
-
-/*===========================================================================*/
-/* Driver local functions. */
-/*===========================================================================*/
-
-/*
- * @brief Maps a baudrate speed to a BAUDRATE register value.
- */
-
-/**
- * @brief Common UART configuration.
- *
- */
-static void configure_uart(const SerialConfig *config)
-{
- uint32_t speed = UART_BAUDRATE_BAUDRATE_Baud250000;
-
- switch (config->speed) {
- case 1200: speed = UART_BAUDRATE_BAUDRATE_Baud1200; break;
- case 2400: speed = UART_BAUDRATE_BAUDRATE_Baud2400; break;
- case 4800: speed = UART_BAUDRATE_BAUDRATE_Baud4800; break;
- case 9600: speed = UART_BAUDRATE_BAUDRATE_Baud9600; break;
- case 14400: speed = UART_BAUDRATE_BAUDRATE_Baud14400; break;
- case 19200: speed = UART_BAUDRATE_BAUDRATE_Baud19200; break;
- case 28800: speed = UART_BAUDRATE_BAUDRATE_Baud28800; break;
- case 38400: speed = UART_BAUDRATE_BAUDRATE_Baud38400; break;
- case 57600: speed = UART_BAUDRATE_BAUDRATE_Baud57600; break;
- case 76800: speed = UART_BAUDRATE_BAUDRATE_Baud76800; break;
- case 115200: speed = UART_BAUDRATE_BAUDRATE_Baud115200; break;
- case 230400: speed = UART_BAUDRATE_BAUDRATE_Baud230400; break;
- case 250000: speed = UART_BAUDRATE_BAUDRATE_Baud250000; break;
- case 460800: speed = UART_BAUDRATE_BAUDRATE_Baud460800; break;
- case 921600: speed = UART_BAUDRATE_BAUDRATE_Baud921600; break;
- case 1000000: speed = UART_BAUDRATE_BAUDRATE_Baud1M; break;
- default: osalDbgAssert(0, "invalid baudrate"); break;
- };
-
- /* Configure PINs mode */
- if (config->tx_pad != NRF51_SERIAL_PAD_DISCONNECTED) {
- palSetPadMode(IOPORT1, config->tx_pad, PAL_MODE_OUTPUT_PUSHPULL);
- }
- if (config->rx_pad != NRF51_SERIAL_PAD_DISCONNECTED) {
- palSetPadMode(IOPORT1, config->rx_pad, PAL_MODE_INPUT);
- }
-#if (NRF51_SERIAL_USE_HWFLOWCTRL == TRUE)
- if (config->rts_pad != NRF51_SERIAL_PAD_DISCONNECTED) {
- palSetPadMode(IOPORT1, config->rts_pad, PAL_MODE_OUTPUT_PUSHPULL);
- }
- if (config->cts_pad != NRF51_SERIAL_PAD_DISCONNECTED) {
- palSetPadMode(IOPORT1, config->cts_pad, PAL_MODE_INPUT);
- }
-#endif
-
- /* Select PINs used by UART */
- NRF_UART0->PSELTXD = config->tx_pad;
- NRF_UART0->PSELRXD = config->rx_pad;
-#if (NRF51_SERIAL_USE_HWFLOWCTRL == TRUE)
- NRF_UART0->PSELRTS = config->rts_pad;
- NRF_UART0->PSELCTS = config->cts_pad;
-#else
- NRF_UART0->PSELRTS = NRF51_SERIAL_PAD_DISCONNECTED;
- NRF_UART0->PSELCTS = NRF51_SERIAL_PAD_DISCONNECTED;
-#endif
-
- /* Set baud rate */
- NRF_UART0->BAUDRATE = speed;
-
- /* Set config */
- NRF_UART0->CONFIG = (UART_CONFIG_PARITY_Excluded << UART_CONFIG_PARITY_Pos);
-
- /* Adjust flow control */
-#if (NRF51_SERIAL_USE_HWFLOWCTRL == TRUE)
- if ((config->rts_pad < TOTAL_GPIO_PADS) ||
- (config->cts_pad < TOTAL_GPIO_PADS)) {
- NRF_UART0->CONFIG |= UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos;
- } else {
- NRF_UART0->CONFIG &= ~(UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos);
- }
-#else
- NRF_UART0->CONFIG &= ~(UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos);
-#endif
-
- /* Enable UART and clear events */
- NRF_UART0->ENABLE = UART_ENABLE_ENABLE_Enabled;
- NRF_UART0->EVENTS_RXDRDY = 0;
- NRF_UART0->EVENTS_TXDRDY = 0;
-
-
- if (config->rx_pad != NRF51_SERIAL_PAD_DISCONNECTED) {
- while (NRF_UART0->EVENTS_RXDRDY != 0) {
- (void)NRF_UART0->RXD;
- }
- }
-}
-
-
-/**
- * @brief Driver output notification.
- */
-#if NRF51_SERIAL_USE_UART0 || defined(__DOXYGEN__)
-static void notify1(io_queue_t *qp)
-{
- SerialDriver *sdp = &SD1;
-
- (void)qp;
-
- if (NRF_UART0->PSELTXD == NRF51_SERIAL_PAD_DISCONNECTED)
- return;
-
- if (!sdp->tx_busy) {
- msg_t b = oqGetI(&sdp->oqueue);
-
- if (b < Q_OK) {
- chnAddFlagsI(sdp, CHN_OUTPUT_EMPTY);
- NRF_UART0->TASKS_STOPTX = 1;
- return;
- }
- sdp->tx_busy = 1;
- NRF_UART0->TASKS_STARTTX = 1;
- NRF_UART0->TXD = b;
- }
-}
-#endif
-
-
-/*===========================================================================*/
-/* Driver interrupt handlers. */
-/*===========================================================================*/
-
-#if NRF51_SERIAL_USE_UART0 || defined(__DOXYGEN__)
-OSAL_IRQ_HANDLER(Vector48) {
-
- OSAL_IRQ_PROLOGUE();
-
- SerialDriver *sdp = &SD1;
- uint32_t isr = NRF_UART0->INTENSET;
-
- if ((NRF_UART0->EVENTS_RXDRDY != 0) && (isr & UART_INTENSET_RXDRDY_Msk)) {
- // Clear UART RX event flag
- NRF_UART0->EVENTS_RXDRDY = 0;
-
- osalSysLockFromISR();
- if (iqIsEmptyI(&sdp->iqueue))
- chnAddFlagsI(sdp, CHN_INPUT_AVAILABLE);
- if (iqPutI(&sdp->iqueue, NRF_UART0->RXD) < Q_OK)
- chnAddFlagsI(sdp, SD_OVERRUN_ERROR);
- osalSysUnlockFromISR();
- }
-
- if ((NRF_UART0->EVENTS_TXDRDY != 0) && (isr & UART_INTENSET_TXDRDY_Msk)) {
- msg_t b;
-
- // Clear UART TX event flag.
- NRF_UART0->EVENTS_TXDRDY = 0;
-
- osalSysLockFromISR();
- b = oqGetI(&sdp->oqueue);
- osalSysUnlockFromISR();
-
- if (b < Q_OK) {
- osalSysLockFromISR();
- chnAddFlagsI(sdp, CHN_OUTPUT_EMPTY);
- osalSysUnlockFromISR();
- NRF_UART0->TASKS_STOPTX = 1;
- sdp->tx_busy = 0;
- } else {
- sdp->tx_busy = 1;
- NRF_UART0->TXD = b;
- }
- }
-
- /* TODO: Error handling for EVENTS_ERROR */
- if ((NRF_UART0->EVENTS_ERROR != 0) && (isr & UART_INTENSET_ERROR_Msk)) {
- // Clear UART ERROR event flag.
- NRF_UART0->EVENTS_ERROR = 0;
- }
-
-
- OSAL_IRQ_EPILOGUE();
-}
-#endif
-
-/*===========================================================================*/
-/* Driver exported functions. */
-/*===========================================================================*/
-
-/**
- * @brief Low level serial driver initialization.
- *
- * @notapi
- */
-void sd_lld_init(void) {
-
-#if NRF51_SERIAL_USE_UART0 == TRUE
- sdObjectInit(&SD1, NULL, notify1);
-#endif
-}
-
-/**
- * @brief Low level serial driver configuration and (re)start.
- *
- * @param[in] sdp pointer to a @p SerialDriver object
- * @param[in] config the architecture-dependent serial driver configuration.
- * If this parameter is set to @p NULL then a default
- * configuration is used.
- *
- * @notapi
- */
-void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) {
-
- if (config == NULL)
- config = &default_config;
-
- osalDbgAssert(
- (config->rx_pad < TOTAL_GPIO_PADS) || (config->tx_pad < TOTAL_GPIO_PADS),
- "must configure at least an RX or TX pad");
-
- if (sdp->state == SD_STOP) {
-
-#if NRF51_SERIAL_USE_UART0 == TRUE
- if (sdp == &SD1) {
- configure_uart(config);
-
- // Enable UART interrupt
- NRF_UART0->INTENCLR = (uint32_t)-1;
- NRF_UART0->INTENSET = UART_INTENSET_ERROR_Msk;
- if (config->rx_pad != NRF51_SERIAL_PAD_DISCONNECTED)
- NRF_UART0->INTENSET |= UART_INTENSET_RXDRDY_Msk;
- if (config->tx_pad != NRF51_SERIAL_PAD_DISCONNECTED)
- NRF_UART0->INTENSET |= UART_INTENSET_TXDRDY_Msk;
-
- nvicEnableVector(UART0_IRQn, NRF51_SERIAL_UART0_PRIORITY);
-
- if (config->rx_pad != NRF51_SERIAL_PAD_DISCONNECTED)
- NRF_UART0->TASKS_STARTRX = 1;
- }
-#endif
-
- }
-}
-
-/**
- * @brief Low level serial driver stop.
- * @details De-initializes the USART, stops the associated clock, resets the
- * interrupt vector.
- *
- * @param[in] sdp pointer to a @p SerialDriver object
- *
- * @notapi
- */
-void sd_lld_stop(SerialDriver *sdp) {
-
- if (sdp->state == SD_READY) {
-
-#if NRF51_SERIAL_USE_UART0 == TRUE
- if (&SD1 == sdp) {
- nvicDisableVector(UART0_IRQn);
- NRF_UART0->ENABLE = UART_ENABLE_ENABLE_Disabled;
- }
-#endif
- }
-}
-
-#endif /* HAL_USE_SERIAL == TRUE */
-
-/** @} */
diff --git a/os/hal/ports/NRF5/NRF51822/hal_serial_lld.h b/os/hal/ports/NRF5/NRF51822/hal_serial_lld.h
deleted file mode 100644
index 79955b1..0000000
--- a/os/hal/ports/NRF5/NRF51822/hal_serial_lld.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- Copyright (C) 2015 Fabio Utzig
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file serial_lld.h
- * @brief NRF51822 serial subsystem low level driver header.
- *
- * @addtogroup SERIAL
- * @{
- */
-
-#ifndef HAL_SERIAL_LLD_H
-#define HAL_SERIAL_LLD_H
-
-#if (HAL_USE_SERIAL == TRUE) || defined(__DOXYGEN__)
-
-/*===========================================================================*/
-/* Driver constants. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver pre-compile time settings. */
-/*===========================================================================*/
-
-/**
- * @name PLATFORM configuration options
- * @{
- */
-/**
- * @brief SD flow control enable switch.
- * @details If set to @p TRUE the support for hardware flow control
- * is included.
- * @note The default is @p FALSE.
- */
-#if !defined(NRF51_SERIAL_USE_HWFLOWCTRL) || defined(__DOXYGEN__)
-#define NRF51_SERIAL_USE_HWFLOWCTRL FALSE
-#endif
-
-/**
- * @brief SD1 driver enable switch.
- * @details If set to @p TRUE the support for SD1 is included.
- * @note The default is @p FALSE.
- */
-#if !defined(NRF51_SERIAL_USE_UART0) || defined(__DOXYGEN__)
-#define NRF51_SERIAL_USE_UART0 FALSE
-#endif
-
-/**
- * @brief UART0 interrupt priority level setting.
- */
-#if !defined(NRF51_SERIAL_UART0_PRIORITY) || defined(__DOXYGEN__)
-#define NRF51_SERIAL_UART0_PRIORITY 3
-#endif
-
-/* Value indicating that no pad is connected to this UART register. */
-#define NRF51_SERIAL_PAD_DISCONNECTED 0xFFFFFFFFU
-#define NRF51_SERIAL_INVALID_BAUDRATE 0xFFFFFFFFU
-
-/** @} */
-
-/*===========================================================================*/
-/* Derived constants and error checks. */
-/*===========================================================================*/
-
-#if NRF51_SERIAL_USE_UART0 && \
- !OSAL_IRQ_IS_VALID_PRIORITY(NRF51_SERIAL_UART0_PRIORITY)
-#error "Invalid IRQ priority assigned to UART0"
-#endif
-
-/*===========================================================================*/
-/* Driver data structures and types. */
-/*===========================================================================*/
-
-/**
- * @brief NRF51 Serial Driver configuration structure.
- * @details An instance of this structure must be passed to @p sdStart()
- * in order to configure and start a serial driver operations.
- * @note This structure content is architecture dependent, each driver
- * implementation defines its own version and the custom static
- * initializers.
- */
-typedef struct {
- /**
- * @brief Bit rate.
- */
- uint32_t speed;
- /* End of the mandatory fields.*/
- uint32_t tx_pad;
- uint32_t rx_pad;
-#if (NRF51_SERIAL_USE_HWFLOWCTRL == TRUE)
- uint32_t rts_pad;
- uint32_t cts_pad;
-#endif
-} SerialConfig;
-
-/**
- * @brief @p SerialDriver specific data.
- */
-#define _serial_driver_data \
- _base_asynchronous_channel_data \
- /* Driver state.*/ \
- sdstate_t state; \
- /* Input queue.*/ \
- input_queue_t iqueue; \
- /* Output queue.*/ \
- output_queue_t oqueue; \
- /* Input circular buffer.*/ \
- uint8_t ib[SERIAL_BUFFERS_SIZE]; \
- /* Output circular buffer.*/ \
- uint8_t ob[SERIAL_BUFFERS_SIZE]; \
- /* 1 if port is busy transmitting, 0 otherwise. */ \
- uint8_t tx_busy; \
- /* End of the mandatory fields.*/ \
- thread_t *thread;
-
-/*===========================================================================*/
-/* Driver macros. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* External declarations. */
-/*===========================================================================*/
-
-#if (NRF51_SERIAL_USE_UART0 == TRUE) && !defined(__DOXYGEN__)
-extern SerialDriver SD1;
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
- void sd_lld_init(void);
- void sd_lld_start(SerialDriver *sdp, const SerialConfig *config);
- void sd_lld_stop(SerialDriver *sdp);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* HAL_USE_SERIAL == TRUE */
-
-#endif /* HAL_SERIAL_LLD_H */
-
-/** @} */
diff --git a/os/hal/ports/NRF5/NRF51822/hal_st_lld.c b/os/hal/ports/NRF5/NRF51822/hal_st_lld.c
deleted file mode 100644
index 181bc06..0000000
--- a/os/hal/ports/NRF5/NRF51822/hal_st_lld.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2015 Fabio Utzig
- 2016 Stephane D'Alu
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file st_lld.c
- * @brief NRF51822 ST subsystem low level driver source.
- *
- * @addtogroup ST
- * @{
- */
-
-#include "hal.h"
-
-#if (OSAL_ST_MODE != OSAL_ST_MODE_NONE) || defined(__DOXYGEN__)
-
-/*===========================================================================*/
-/* Driver local definitions. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver exported variables. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver local types. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver local variables and types. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver local functions. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver interrupt handlers. */
-/*===========================================================================*/
-
-#if (OSAL_ST_MODE == OSAL_ST_MODE_PERIODIC) || defined(__DOXYGEN__)
-#if NRF51_ST_USE_RTC0 == TRUE
-/**
- * @brief System Timer vector (RTC0)
- * @details This interrupt is used for system tick in periodic mode
- * if selected with NRF51_ST_USE_RTC0
- *
- * @isr
- */
-OSAL_IRQ_HANDLER(Vector6C) {
-
- OSAL_IRQ_PROLOGUE();
-
- NRF_RTC0->EVENTS_TICK = 0;
-
- osalSysLockFromISR();
- osalOsTimerHandlerI();
- osalSysUnlockFromISR();
-
- OSAL_IRQ_EPILOGUE();
-}
-#endif
-
-#if NRF51_ST_USE_RTC1 == TRUE
-/**
- * @brief System Timer vector (RTC1)
- * @details This interrupt is used for system tick in periodic mode
- * if selected with NRF51_ST_USE_RTC1
- *
- * @isr
- */
-OSAL_IRQ_HANDLER(Vector84) {
-
- OSAL_IRQ_PROLOGUE();
-
- NRF_RTC1->EVENTS_TICK = 0;
-
- osalSysLockFromISR();
- osalOsTimerHandlerI();
- osalSysUnlockFromISR();
-
- OSAL_IRQ_EPILOGUE();
-}
-#endif
-
-#if NRF51_ST_USE_TIMER0 == TRUE
-/**
- * @brief System Timer vector. (TIMER0)
- * @details This interrupt is used for system tick in periodic mode
- * if selected with NRF51_ST_USE_TIMER0
- *
- * @isr
- */
-OSAL_IRQ_HANDLER(Vector60) {
-
- OSAL_IRQ_PROLOGUE();
-
- /* Clear timer compare event */
- if (NRF_TIMER0->EVENTS_COMPARE[0] != 0)
- NRF_TIMER0->EVENTS_COMPARE[0] = 0;
-
- osalSysLockFromISR();
- osalOsTimerHandlerI();
- osalSysUnlockFromISR();
-
- OSAL_IRQ_EPILOGUE();
-}
-#endif
-#endif /* OSAL_ST_MODE == OSAL_ST_MODE_PERIODIC */
-
-#if (OSAL_ST_MODE == OSAL_ST_MODE_FREERUNNING) || defined(__DOXYGEN__)
-#if NRF51_ST_USE_RTC0 == TRUE
-/**
- * @brief System Timer vector (RTC0)
- * @details This interrupt is used for freerunning mode (tick-less)
- * if selected with NRF51_ST_USE_RTC0
- *
- * @isr
- */
-OSAL_IRQ_HANDLER(Vector6C) {
-
- OSAL_IRQ_PROLOGUE();
-
- if (NRF_RTC0->EVENTS_COMPARE[0]) {
- NRF_RTC0->EVENTS_COMPARE[0] = 0;
-
- osalSysLockFromISR();
- osalOsTimerHandlerI();
- osalSysUnlockFromISR();
- }
-
-#if OSAL_ST_RESOLUTION == 16
- if (NRF_RTC0->EVENTS_COMPARE[1]) {
- NRF_RTC0->EVENTS_COMPARE[1] = 0;
- NRF_RTC0->TASKS_CLEAR = 1;
- }
-#endif
-
- OSAL_IRQ_EPILOGUE();
-}
-#endif
-
-#if NRF51_ST_USE_RTC1 == TRUE
-/**
- * @brief System Timer vector (RTC1)
- * @details This interrupt is used for freerunning mode (tick-less)
- * if selected with NRF51_ST_USE_RTC1
- *
- * @isr
- */
-OSAL_IRQ_HANDLER(Vector84) {
-
- OSAL_IRQ_PROLOGUE();
-
- if (NRF_RTC1->EVENTS_COMPARE[0]) {
- NRF_RTC1->EVENTS_COMPARE[0] = 0;
-
- osalSysLockFromISR();
- osalOsTimerHandlerI();
- osalSysUnlockFromISR();
- }
-
-#if OSAL_ST_RESOLUTION == 16
- if (NRF_RTC1->EVENTS_COMPARE[1]) {
- NRF_RTC1->EVENTS_COMPARE[1] = 0;
- NRF_RTC1->TASKS_CLEAR = 1;
- }
-#endif
-
- OSAL_IRQ_EPILOGUE();
-}
-#endif
-#endif /* OSAL_ST_MODE == OSAL_ST_MODE_FREERUNNING */
-
-/*===========================================================================*/
-/* Driver exported functions. */
-/*===========================================================================*/
-
-/**
- * @brief Low level ST driver initialization.
- *
- * @notapi
- */
-void st_lld_init(void) {
-#if OSAL_ST_MODE == OSAL_ST_MODE_FREERUNNING
-
-#if NRF51_ST_USE_RTC0 == TRUE
- /* Using RTC with prescaler */
- NRF_RTC0->TASKS_STOP = 1;
- NRF_RTC0->PRESCALER = (NRF51_LFCLK_FREQUENCY / OSAL_ST_FREQUENCY) - 1;
- NRF_RTC0->EVTENCLR = RTC_EVTENSET_COMPARE0_Msk;
- NRF_RTC0->EVENTS_COMPARE[0] = 0;
- NRF_RTC0->INTENSET = RTC_INTENSET_COMPARE0_Msk;
-#if OSAL_ST_RESOLUTION == 16
- NRF_RTC0->CC[1] = 0x10000; /* 2^16 */
- NRF_RTC0->EVENTS_COMPARE[1] = 0;
- NRF_RTC0->EVTENSET = RTC_EVTENSET_COMPARE0_Msk;
- NRF_RTC0->INTENSET = RTC_INTENSET_COMPARE1_Msk;
-#endif
- NRF_RTC0->TASKS_CLEAR = 1;
-
- /* Start timer */
- nvicEnableVector(RTC0_IRQn, NRF51_ST_PRIORITY);
- NRF_RTC0->TASKS_START = 1;
-#endif /* NRF51_ST_USE_RTC0 == TRUE */
-
-#if NRF51_ST_USE_RTC1 == TRUE
- /* Using RTC with prescaler */
- NRF_RTC1->TASKS_STOP = 1;
- NRF_RTC1->PRESCALER = (NRF51_LFCLK_FREQUENCY / OSAL_ST_FREQUENCY) - 1;
- NRF_RTC1->EVTENCLR = RTC_EVTENSET_COMPARE0_Msk;
- NRF_RTC1->EVENTS_COMPARE[0] = 0;
- NRF_RTC1->INTENSET = RTC_INTENSET_COMPARE0_Msk;
-#if OSAL_ST_RESOLUTION == 16
- NRF_RTC1->CC[1] = 0x10000; /* 2^16 */
- NRF_RTC1->EVENTS_COMPARE[1] = 0;
- NRF_RTC1->EVTENSET = RTC_EVTENSET_COMPARE0_Msk;
- NRF_RTC1->INTENSET = RTC_INTENSET_COMPARE1_Msk;
-#endif
- NRF_RTC1->TASKS_CLEAR = 1;
-
- /* Start timer */
- nvicEnableVector(RTC1_IRQn, NRF51_ST_PRIORITY);
- NRF_RTC1->TASKS_START = 1;
-#endif /* NRF51_ST_USE_RTC1 == TRUE */
-
-#endif /* OSAL_ST_MODE == OSAL_ST_MODE_FREERUNNING */
-
-#if OSAL_ST_MODE == OSAL_ST_MODE_PERIODIC
-
-#if NRF51_ST_USE_RTC0 == TRUE
- /* Using RTC with prescaler */
- NRF_RTC0->TASKS_STOP = 1;
- NRF_RTC0->PRESCALER = (NRF51_LFCLK_FREQUENCY / OSAL_ST_FREQUENCY) - 1;
- NRF_RTC0->INTENSET = RTC_INTENSET_TICK_Msk;
-
- /* Start timer */
- nvicEnableVector(RTC0_IRQn, NRF51_ST_PRIORITY);
- NRF_RTC0->TASKS_START = 1;
-#endif /* NRF51_ST_USE_RTC0 == TRUE */
-
-#if NRF51_ST_USE_RTC1 == TRUE
- /* Using RTC with prescaler */
- NRF_RTC1->TASKS_STOP = 1;
- NRF_RTC1->PRESCALER = (NRF51_LFCLK_FREQUENCY / OSAL_ST_FREQUENCY) - 1;
- NRF_RTC1->INTENSET = RTC_INTENSET_TICK_Msk;
-
- /* Start timer */
- nvicEnableVector(RTC1_IRQn, NRF51_ST_PRIORITY);
- NRF_RTC1->TASKS_START = 1;
-#endif /* NRF51_ST_USE_RTC1 == TRUE */
-
-#if NRF51_ST_USE_TIMER0 == TRUE
- NRF_TIMER0->TASKS_CLEAR = 1;
-
- /*
- * Using 32-bit mode with prescaler 16 configures this
- * timer with a 1MHz clock.
- */
- NRF_TIMER0->BITMODE = 3;
- NRF_TIMER0->PRESCALER = 4;
-
- /*
- * Configure timer 0 compare capture 0 to generate interrupt
- * and clear timer value when event is generated.
- */
- NRF_TIMER0->CC[0] = (1000000 / OSAL_ST_FREQUENCY) - 1;
- NRF_TIMER0->SHORTS = 1;
- NRF_TIMER0->INTENSET = 0x10000;
-
- /* Start timer */
- nvicEnableVector(TIMER0_IRQn, NRF51_ST_PRIORITY);
- NRF_TIMER0->TASKS_START = 1;
-#endif /* NRF51_ST_USE_TIMER0 == TRUE */
-
-#endif /* OSAL_ST_MODE == OSAL_ST_MODE_PERIODIC */
-}
-
-#endif /* OSAL_ST_MODE != OSAL_ST_MODE_NONE */
-
-/** @} */
diff --git a/os/hal/ports/NRF5/NRF51822/hal_st_lld.h b/os/hal/ports/NRF5/NRF51822/hal_st_lld.h
deleted file mode 100644
index 8d12d2e..0000000
--- a/os/hal/ports/NRF5/NRF51822/hal_st_lld.h
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- ChibiOS - Copyright (C) 2015 Fabio Utzig
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file st_lld.h
- * @brief NRF51822 ST subsystem low level driver header.
- * @details This header is designed to be include-able without having to
- * include other files from the HAL.
- *
- * @addtogroup ST
- * @{
- */
-
-#ifndef HAL_ST_LLD_H
-#define HAL_ST_LLD_H
-
-#include "halconf.h"
-
-/*===========================================================================*/
-/* Driver constants. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver pre-compile time settings. */
-/*===========================================================================*/
-
-/**
- * @brief Use RTC0 to generates system ticks
- */
-#if !defined(NRF51_ST_USE_RTC0) || defined(__DOXYGEN__)
-#if !defined(SOFTDEVICE_PRESENT)
-#define NRF51_ST_USE_RTC0 TRUE
-#else
-#define NRF51_ST_USE_RTC0 FALSE
-#endif
-#endif
-
-/**
- * @brief Use RTC1 to generates system ticks
- */
-#if !defined(NRF51_ST_USE_RTC1) || defined(__DOXYGEN__)
-#if !defined(SOFTDEVICE_PRESENT)
-#define NRF51_ST_USE_RTC1 FALSE
-#else
-#define NRF51_ST_USE_RTC1 TRUE
-#endif
-#endif
-
-/**
- * @brief Use TIMER0 to generates system ticks
- */
-#if !defined(NRF51_ST_USE_TIMER0) || defined(__DOXYGEN__)
-#define NRF51_ST_USE_TIMER0 FALSE
-#endif
-
-/**
- * @brief ST interrupt priority level setting.
- */
-#if !defined(NRF51_ST_PRIORITY) || defined(__DOXYGEN__)
-#if !defined(SOFTDEVICE_PRESENT)
-#define NRF51_ST_PRIORITY 1
-#else
-#define NRF51_ST_PRIORITY 1
-#endif
-#endif
-
-/*===========================================================================*/
-/* Derived constants and error checks. */
-/*===========================================================================*/
-
-#if OSAL_ST_MODE != OSAL_ST_MODE_NONE
-#if (NRF51_ST_USE_TIMER0 == TRUE) && (NRF51_GPT_USE_TIMER0 == TRUE)
-#error "TIMER0 already used by GPT driver"
-#endif
-
-#if (NRF51_ST_USE_RTC0 == FALSE) && \
- (NRF51_ST_USE_RTC1 == FALSE) && \
- (NRF51_ST_USE_TIMER0 == FALSE)
-#error "One clock source is needed, enable one (RTC0, RTC1, or TIMER0)"
-#endif
-
-#if ((NRF51_ST_USE_RTC0 == TRUE ? 1 : 0) + \
- (NRF51_ST_USE_RTC1 == TRUE ? 1 : 0) + \
- (NRF51_ST_USE_TIMER0 == TRUE ? 1 : 0)) > 1
-#error "Only one clock source can be used (RTC0, RTC1, or TIMER0)"
-#endif
-
-#if defined(SOFTDEVICE_PRESENT)
-#if NRF51_ST_USE_RTC0 == TRUE
-#error "RTC0 cannot be used for system ticks when SOFTDEVICE present"
-#endif
-
-#if NRF51_ST_USE_TIMER0 == TRUE
-#error "TIMER0 cannot be used for system ticks when SOFTDEVICE present"
-#endif
-
-#if NRF51_ST_PRIORITY != 1
-#error "ST priority must be 1 when SOFTDEVICE present"
-#endif
-
-#endif /* defined(SOFTDEVICE_PRESENT) */
-#endif /* OSAL_ST_MODE != OSAL_ST_MODE_NONE */
-
-#if OSAL_ST_MODE == OSAL_ST_MODE_FREERUNNING
-#if defined(CH_CFG_ST_TIMEDELTA) && (CH_CFG_ST_TIMEDELTA < 5)
-#error "CH_CFG_ST_TIMEDELTA is too low"
-#endif
-#if NRF51_ST_USE_TIMER0 == TRUE
-#error "Freeruning (tick-less) mode not supported with TIMER, use RTC"
-#endif
-#endif /* OSAL_ST_MODE == OSAL_ST_MODE_FREERUNNING */
-
-#if !OSAL_IRQ_IS_VALID_PRIORITY(NRF51_ST_PRIORITY)
-#error "Invalid IRQ priority assigned to ST driver"
-#endif
-
-/*===========================================================================*/
-/* Driver data structures and types. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* Driver macros. */
-/*===========================================================================*/
-
-/*===========================================================================*/
-/* External declarations. */
-/*===========================================================================*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
- void st_lld_init(void);
-#ifdef __cplusplus
-}
-#endif
-
-/*===========================================================================*/
-/* Driver inline functions. */
-/*===========================================================================*/
-
-/**
- * @brief Returns the time counter value.
- *
- * @return The counter value.
- *
- * @notapi
- */
-static inline systime_t st_lld_get_counter(void) {
-#if NRF51_ST_USE_RTC0 == TRUE
- return (systime_t)NRF_RTC0->COUNTER;
-#endif
-#if NRF51_ST_USE_RTC1 == TRUE
- return (systime_t)NRF_RTC1->COUNTER;
-#endif
-#if NRF51_ST_USE_TIMER0 == TRUE
- return (systime_t)0;
-#endif
-}
-
-/**
- * @brief Starts the alarm.
- * @note Makes sure that no spurious alarms are triggered after
- * this call.
- *
- * @param[in] abstime the time to be set for the first alarm
- *
- * @notapi
- */
-static inline void st_lld_start_alarm(systime_t abstime) {
-#if NRF51_ST_USE_RTC0 == TRUE
- NRF_RTC0->CC[0] = abstime;
- NRF_RTC0->EVENTS_COMPARE[0] = 0;
- NRF_RTC0->EVTENSET = RTC_EVTENSET_COMPARE0_Msk;
-#endif
-#if NRF51_ST_USE_RTC1 == TRUE
- NRF_RTC1->CC[0] = abstime;
- NRF_RTC1->EVENTS_COMPARE[0] = 0;
- NRF_RTC1->EVTENSET = RTC_EVTENSET_COMPARE0_Msk;
-#endif
-#if NRF51_ST_USE_TIMER0 == TRUE
- (void)abstime;
-#endif
-}
-
-/**
- * @brief Stops the alarm interrupt.
- *
- * @notapi
- */
-static inline void st_lld_stop_alarm(void) {
-#if NRF51_ST_USE_RTC0 == TRUE
- NRF_RTC0->EVTENCLR = RTC_EVTENCLR_COMPARE0_Msk;
- NRF_RTC0->EVENTS_COMPARE[0] = 0;
-#endif
-#if NRF51_ST_USE_RTC1 == TRUE
- NRF_RTC1->EVTENCLR = RTC_EVTENCLR_COMPARE0_Msk;
- NRF_RTC1->EVENTS_COMPARE[0] = 0;
-#endif
-}
-
-/**
- * @brief Sets the alarm time.
- *
- * @param[in] abstime the time to be set for the next alarm
- *
- * @notapi
- */
-static inline void st_lld_set_alarm(systime_t abstime) {
-#if NRF51_ST_USE_RTC0 == TRUE
- NRF_RTC0->CC[0] = abstime;
-#endif
-#if NRF51_ST_USE_RTC1 == TRUE
- NRF_RTC1->CC[0] = abstime;
-#endif
-#if NRF51_ST_USE_TIMER0 == TRUE
- (void)abstime;
-#endif
-}
-
-/**
- * @brief Returns the current alarm time.
- *
- * @return The currently set alarm time.
- *
- * @notapi
- */
-static inline systime_t st_lld_get_alarm(void) {
-#if NRF51_ST_USE_RTC0 == TRUE
- return (systime_t)NRF_RTC0->CC[0];
-#endif
-#if NRF51_ST_USE_RTC1 == TRUE
- return (systime_t)NRF_RTC1->CC[0];
-#endif
-#if NRF51_ST_USE_TIMER0 == TRUE
- return (systime_t)0;
-#endif
-}
-
-/**
- * @brief Determines if the alarm is active.
- *
- * @return The alarm status.
- * @retval false if the alarm is not active.
- * @retval true is the alarm is active
- *
- * @notapi
- */
-static inline bool st_lld_is_alarm_active(void) {
-#if NRF51_ST_USE_RTC0 == TRUE
- return NRF_RTC0->EVTEN & RTC_EVTEN_COMPARE0_Msk;
-#endif
-#if NRF51_ST_USE_RTC1 == TRUE
- return NRF_RTC1->EVTEN & RTC_EVTEN_COMPARE0_Msk;
-#endif
-#if NRF51_ST_USE_TIMER0 == TRUE
- return false;
-#endif
-}
-
-#endif /* HAL_ST_LLD_H */
-
-/** @} */
diff --git a/os/hal/ports/NRF5/NRF51822/nrf51_delay.h b/os/hal/ports/NRF5/NRF51822/nrf_delay.h
index 2a672db..33b68fb 100644
--- a/os/hal/ports/NRF5/NRF51822/nrf51_delay.h
+++ b/os/hal/ports/NRF5/NRF51822/nrf_delay.h
@@ -15,8 +15,8 @@
*/
/**
- * @file NRF51822/nrf51_delay.h
- * @brief NRF51822 Delay routines
+ * @file NRF5/NRF51822/nrf_delay.h
+ * @brief NRF5 Delay routines
*
* @{
*/
diff --git a/os/hal/ports/NRF5/NRF51822/platform.mk b/os/hal/ports/NRF5/NRF51822/platform.mk
index 4da40be..ce42437 100644
--- a/os/hal/ports/NRF5/NRF51822/platform.mk
+++ b/os/hal/ports/NRF5/NRF51822/platform.mk
@@ -4,13 +4,13 @@ HALCONF := $(strip $(shell cat halconf.h halconf_community.h 2>/dev/null | egrep
# List of all the NRF51x platform files.
PLATFORMSRC = ${CHIBIOS}/os/hal/ports/common/ARMCMx/nvic.c \
${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_lld.c \
- ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_st_lld.c
+ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_st_lld.c
ifneq ($(findstring HAL_USE_PAL TRUE,$(HALCONF)),)
-PLATFORMSRC += ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_pal_lld.c
+PLATFORMSRC += ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_pal_lld.c
endif
ifneq ($(findstring HAL_USE_SERIAL TRUE,$(HALCONF)),)
-PLATFORMSRC += ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_serial_lld.c
+PLATFORMSRC += ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_serial_lld.c
endif
ifneq ($(findstring HAL_USE_SPI TRUE,$(HALCONF)),)
PLATFORMSRC += ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_spi_lld.c
@@ -43,9 +43,9 @@ endif
else
PLATFORMSRC = ${CHIBIOS}/os/hal/ports/common/ARMCMx/nvic.c \
${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_lld.c \
- ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_pal_lld.c \
- ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_serial_lld.c \
- ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_st_lld.c \
+ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_pal_lld.c \
+ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_serial_lld.c \
+ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD/hal_st_lld.c \
${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_spi_lld.c \
${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_ext_lld_isr.c \
${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822/hal_ext_lld.c \
@@ -60,6 +60,7 @@ endif
# Required include directories
PLATFORMINC = ${CHIBIOS}/os/hal/ports/common/ARMCMx \
- ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822
+ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/LLD \
+ ${CHIBIOS_CONTRIB}/os/hal/ports/NRF5/NRF51822