From 5805e10f74104e3de60470c38d6643d2bdb00fe0 Mon Sep 17 00:00:00 2001 From: Stephane D'Alu Date: Sat, 9 Jul 2016 23:57:48 +0200 Subject: NRF52832 implementation --- os/hal/ports/NRF5/LLD/hal_st_lld.h | 275 +++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 os/hal/ports/NRF5/LLD/hal_st_lld.h (limited to 'os/hal/ports/NRF5/LLD/hal_st_lld.h') diff --git a/os/hal/ports/NRF5/LLD/hal_st_lld.h b/os/hal/ports/NRF5/LLD/hal_st_lld.h new file mode 100644 index 0000000..33cc0fb --- /dev/null +++ b/os/hal/ports/NRF5/LLD/hal_st_lld.h @@ -0,0 +1,275 @@ +/* + 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 CORTEX_MAX_KERNEL_PRIORITY +#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 */ + +/** @} */ -- cgit v1.2.3 From 5259158d1727f3703bc90f88d50938eada316f67 Mon Sep 17 00:00:00 2001 From: Stephane D'Alu Date: Sun, 10 Jul 2016 10:48:04 +0200 Subject: renamed NRF51_* to NRF5_* --- os/hal/ports/NRF5/LLD/hal_st_lld.h | 80 +++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 40 deletions(-) (limited to 'os/hal/ports/NRF5/LLD/hal_st_lld.h') diff --git a/os/hal/ports/NRF5/LLD/hal_st_lld.h b/os/hal/ports/NRF5/LLD/hal_st_lld.h index 33cc0fb..eb425f9 100644 --- a/os/hal/ports/NRF5/LLD/hal_st_lld.h +++ b/os/hal/ports/NRF5/LLD/hal_st_lld.h @@ -40,40 +40,40 @@ /** * @brief Use RTC0 to generates system ticks */ -#if !defined(NRF51_ST_USE_RTC0) || defined(__DOXYGEN__) +#if !defined(NRF5_ST_USE_RTC0) || defined(__DOXYGEN__) #if !defined(SOFTDEVICE_PRESENT) -#define NRF51_ST_USE_RTC0 TRUE +#define NRF5_ST_USE_RTC0 TRUE #else -#define NRF51_ST_USE_RTC0 FALSE +#define NRF5_ST_USE_RTC0 FALSE #endif #endif /** * @brief Use RTC1 to generates system ticks */ -#if !defined(NRF51_ST_USE_RTC1) || defined(__DOXYGEN__) +#if !defined(NRF5_ST_USE_RTC1) || defined(__DOXYGEN__) #if !defined(SOFTDEVICE_PRESENT) -#define NRF51_ST_USE_RTC1 FALSE +#define NRF5_ST_USE_RTC1 FALSE #else -#define NRF51_ST_USE_RTC1 TRUE +#define NRF5_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 +#if !defined(NRF5_ST_USE_TIMER0) || defined(__DOXYGEN__) +#define NRF5_ST_USE_TIMER0 FALSE #endif /** * @brief ST interrupt priority level setting. */ -#if !defined(NRF51_ST_PRIORITY) || defined(__DOXYGEN__) +#if !defined(NRF5_ST_PRIORITY) || defined(__DOXYGEN__) #if !defined(SOFTDEVICE_PRESENT) -#define NRF51_ST_PRIORITY CORTEX_MAX_KERNEL_PRIORITY +#define NRF5_ST_PRIORITY CORTEX_MAX_KERNEL_PRIORITY #else -#define NRF51_ST_PRIORITY 1 +#define NRF5_ST_PRIORITY 1 #endif #endif @@ -82,32 +82,32 @@ /*===========================================================================*/ #if OSAL_ST_MODE != OSAL_ST_MODE_NONE -#if (NRF51_ST_USE_TIMER0 == TRUE) && (NRF51_GPT_USE_TIMER0 == TRUE) +#if (NRF5_ST_USE_TIMER0 == TRUE) && (NRF5_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) +#if (NRF5_ST_USE_RTC0 == FALSE) && \ + (NRF5_ST_USE_RTC1 == FALSE) && \ + (NRF5_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 +#if ((NRF5_ST_USE_RTC0 == TRUE ? 1 : 0) + \ + (NRF5_ST_USE_RTC1 == TRUE ? 1 : 0) + \ + (NRF5_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 +#if NRF5_ST_USE_RTC0 == TRUE #error "RTC0 cannot be used for system ticks when SOFTDEVICE present" #endif -#if NRF51_ST_USE_TIMER0 == TRUE +#if NRF5_ST_USE_TIMER0 == TRUE #error "TIMER0 cannot be used for system ticks when SOFTDEVICE present" #endif -#if NRF51_ST_PRIORITY != 1 +#if NRF5_ST_PRIORITY != 1 #error "ST priority must be 1 when SOFTDEVICE present" #endif @@ -118,12 +118,12 @@ #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 +#if NRF5_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) +#if !OSAL_IRQ_IS_VALID_PRIORITY(NRF5_ST_PRIORITY) #error "Invalid IRQ priority assigned to ST driver" #endif @@ -159,13 +159,13 @@ extern "C" { * @notapi */ static inline systime_t st_lld_get_counter(void) { -#if NRF51_ST_USE_RTC0 == TRUE +#if NRF5_ST_USE_RTC0 == TRUE return (systime_t)NRF_RTC0->COUNTER; #endif -#if NRF51_ST_USE_RTC1 == TRUE +#if NRF5_ST_USE_RTC1 == TRUE return (systime_t)NRF_RTC1->COUNTER; #endif -#if NRF51_ST_USE_TIMER0 == TRUE +#if NRF5_ST_USE_TIMER0 == TRUE return (systime_t)0; #endif } @@ -180,17 +180,17 @@ static inline systime_t st_lld_get_counter(void) { * @notapi */ static inline void st_lld_start_alarm(systime_t abstime) { -#if NRF51_ST_USE_RTC0 == TRUE +#if NRF5_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 +#if NRF5_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 +#if NRF5_ST_USE_TIMER0 == TRUE (void)abstime; #endif } @@ -201,11 +201,11 @@ static inline void st_lld_start_alarm(systime_t abstime) { * @notapi */ static inline void st_lld_stop_alarm(void) { -#if NRF51_ST_USE_RTC0 == TRUE +#if NRF5_ST_USE_RTC0 == TRUE NRF_RTC0->EVTENCLR = RTC_EVTENCLR_COMPARE0_Msk; NRF_RTC0->EVENTS_COMPARE[0] = 0; #endif -#if NRF51_ST_USE_RTC1 == TRUE +#if NRF5_ST_USE_RTC1 == TRUE NRF_RTC1->EVTENCLR = RTC_EVTENCLR_COMPARE0_Msk; NRF_RTC1->EVENTS_COMPARE[0] = 0; #endif @@ -219,13 +219,13 @@ static inline void st_lld_stop_alarm(void) { * @notapi */ static inline void st_lld_set_alarm(systime_t abstime) { -#if NRF51_ST_USE_RTC0 == TRUE +#if NRF5_ST_USE_RTC0 == TRUE NRF_RTC0->CC[0] = abstime; #endif -#if NRF51_ST_USE_RTC1 == TRUE +#if NRF5_ST_USE_RTC1 == TRUE NRF_RTC1->CC[0] = abstime; #endif -#if NRF51_ST_USE_TIMER0 == TRUE +#if NRF5_ST_USE_TIMER0 == TRUE (void)abstime; #endif } @@ -238,13 +238,13 @@ static inline void st_lld_set_alarm(systime_t abstime) { * @notapi */ static inline systime_t st_lld_get_alarm(void) { -#if NRF51_ST_USE_RTC0 == TRUE +#if NRF5_ST_USE_RTC0 == TRUE return (systime_t)NRF_RTC0->CC[0]; #endif -#if NRF51_ST_USE_RTC1 == TRUE +#if NRF5_ST_USE_RTC1 == TRUE return (systime_t)NRF_RTC1->CC[0]; #endif -#if NRF51_ST_USE_TIMER0 == TRUE +#if NRF5_ST_USE_TIMER0 == TRUE return (systime_t)0; #endif } @@ -259,13 +259,13 @@ static inline systime_t st_lld_get_alarm(void) { * @notapi */ static inline bool st_lld_is_alarm_active(void) { -#if NRF51_ST_USE_RTC0 == TRUE +#if NRF5_ST_USE_RTC0 == TRUE return NRF_RTC0->EVTEN & RTC_EVTEN_COMPARE0_Msk; #endif -#if NRF51_ST_USE_RTC1 == TRUE +#if NRF5_ST_USE_RTC1 == TRUE return NRF_RTC1->EVTEN & RTC_EVTEN_COMPARE0_Msk; #endif -#if NRF51_ST_USE_TIMER0 == TRUE +#if NRF5_ST_USE_TIMER0 == TRUE return false; #endif } -- cgit v1.2.3 From e0d39de32f8a422ec1e1badfe70b3f3126edcb0d Mon Sep 17 00:00:00 2001 From: Stephane D'Alu Date: Sun, 10 Jul 2016 11:11:50 +0200 Subject: Use RTC1 as default system ticks as PPI has pre-programmed channels for RTC0 --- os/hal/ports/NRF5/LLD/hal_st_lld.h | 8 -------- 1 file changed, 8 deletions(-) (limited to 'os/hal/ports/NRF5/LLD/hal_st_lld.h') diff --git a/os/hal/ports/NRF5/LLD/hal_st_lld.h b/os/hal/ports/NRF5/LLD/hal_st_lld.h index eb425f9..4799792 100644 --- a/os/hal/ports/NRF5/LLD/hal_st_lld.h +++ b/os/hal/ports/NRF5/LLD/hal_st_lld.h @@ -41,23 +41,15 @@ * @brief Use RTC0 to generates system ticks */ #if !defined(NRF5_ST_USE_RTC0) || defined(__DOXYGEN__) -#if !defined(SOFTDEVICE_PRESENT) -#define NRF5_ST_USE_RTC0 TRUE -#else #define NRF5_ST_USE_RTC0 FALSE #endif -#endif /** * @brief Use RTC1 to generates system ticks */ #if !defined(NRF5_ST_USE_RTC1) || defined(__DOXYGEN__) -#if !defined(SOFTDEVICE_PRESENT) -#define NRF5_ST_USE_RTC1 FALSE -#else #define NRF5_ST_USE_RTC1 TRUE #endif -#endif /** * @brief Use TIMER0 to generates system ticks -- cgit v1.2.3 From 3db81f7f03844057a6d4150e2c66a81a772df16d Mon Sep 17 00:00:00 2001 From: Stephane D'Alu Date: Sun, 10 Jul 2016 11:15:20 +0200 Subject: adding note on RTC0 and TIMER0 as systicks --- os/hal/ports/NRF5/LLD/hal_st_lld.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'os/hal/ports/NRF5/LLD/hal_st_lld.h') diff --git a/os/hal/ports/NRF5/LLD/hal_st_lld.h b/os/hal/ports/NRF5/LLD/hal_st_lld.h index 4799792..3b4bf8e 100644 --- a/os/hal/ports/NRF5/LLD/hal_st_lld.h +++ b/os/hal/ports/NRF5/LLD/hal_st_lld.h @@ -39,6 +39,9 @@ /** * @brief Use RTC0 to generates system ticks + * + * @note Avoid using RTC0, as PPI has pre-programmed channels on it + * that can be used to control RADIO or TIMER0 */ #if !defined(NRF5_ST_USE_RTC0) || defined(__DOXYGEN__) #define NRF5_ST_USE_RTC0 FALSE @@ -53,6 +56,8 @@ /** * @brief Use TIMER0 to generates system ticks + * + * @note Avoid using TIMER0 as it will draw more current */ #if !defined(NRF5_ST_USE_TIMER0) || defined(__DOXYGEN__) #define NRF5_ST_USE_TIMER0 FALSE -- cgit v1.2.3 From 6423c3dabeba4e4ed9217d71873653bc8af9ae4e Mon Sep 17 00:00:00 2001 From: Stephane D'Alu Date: Sun, 10 Jul 2016 12:04:39 +0200 Subject: moved rng to LLD directory. removed rng power control (doesn't exist in nrf52, wasn't documented in nrf51) renamed peripheral to start at 0 --- os/hal/ports/NRF5/LLD/hal_st_lld.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'os/hal/ports/NRF5/LLD/hal_st_lld.h') diff --git a/os/hal/ports/NRF5/LLD/hal_st_lld.h b/os/hal/ports/NRF5/LLD/hal_st_lld.h index 3b4bf8e..9d67ce9 100644 --- a/os/hal/ports/NRF5/LLD/hal_st_lld.h +++ b/os/hal/ports/NRF5/LLD/hal_st_lld.h @@ -15,8 +15,8 @@ */ /** - * @file st_lld.h - * @brief NRF51822 ST subsystem low level driver header. + * @file NRF5/LLD/st_lld.h + * @brief NRF5 ST subsystem low level driver header. * @details This header is designed to be include-able without having to * include other files from the HAL. * -- cgit v1.2.3 From 321ec844af3b1e7a23c94bce65bc8aa13ef1e09e Mon Sep 17 00:00:00 2001 From: Stephane D'Alu Date: Sun, 10 Jul 2016 19:15:46 +0200 Subject: moved GPT to LLD --- os/hal/ports/NRF5/LLD/hal_st_lld.h | 1 + 1 file changed, 1 insertion(+) (limited to 'os/hal/ports/NRF5/LLD/hal_st_lld.h') diff --git a/os/hal/ports/NRF5/LLD/hal_st_lld.h b/os/hal/ports/NRF5/LLD/hal_st_lld.h index 9d67ce9..7073e12 100644 --- a/os/hal/ports/NRF5/LLD/hal_st_lld.h +++ b/os/hal/ports/NRF5/LLD/hal_st_lld.h @@ -124,6 +124,7 @@ #error "Invalid IRQ priority assigned to ST driver" #endif + /*===========================================================================*/ /* Driver data structures and types. */ /*===========================================================================*/ -- cgit v1.2.3 From 539338100fffb76e152be37228c4040fa072ba92 Mon Sep 17 00:00:00 2001 From: Stephane D'Alu Date: Mon, 11 Jul 2016 22:11:27 +0200 Subject: deal with write buffer --- os/hal/ports/NRF5/LLD/hal_st_lld.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'os/hal/ports/NRF5/LLD/hal_st_lld.h') diff --git a/os/hal/ports/NRF5/LLD/hal_st_lld.h b/os/hal/ports/NRF5/LLD/hal_st_lld.h index 7073e12..93c2abb 100644 --- a/os/hal/ports/NRF5/LLD/hal_st_lld.h +++ b/os/hal/ports/NRF5/LLD/hal_st_lld.h @@ -181,11 +181,17 @@ static inline void st_lld_start_alarm(systime_t abstime) { #if NRF5_ST_USE_RTC0 == TRUE NRF_RTC0->CC[0] = abstime; NRF_RTC0->EVENTS_COMPARE[0] = 0; +#if CORTEX_MODEL >= 4 + (void)NRF_RTC0->EVENTS_COMPARE[0]; +#endif NRF_RTC0->EVTENSET = RTC_EVTENSET_COMPARE0_Msk; #endif #if NRF5_ST_USE_RTC1 == TRUE NRF_RTC1->CC[0] = abstime; NRF_RTC1->EVENTS_COMPARE[0] = 0; +#if CORTEX_MODEL >= 4 + (void)NRF_RTC1->EVENTS_COMPARE[0]; +#endif NRF_RTC1->EVTENSET = RTC_EVTENSET_COMPARE0_Msk; #endif #if NRF5_ST_USE_TIMER0 == TRUE @@ -202,10 +208,16 @@ static inline void st_lld_stop_alarm(void) { #if NRF5_ST_USE_RTC0 == TRUE NRF_RTC0->EVTENCLR = RTC_EVTENCLR_COMPARE0_Msk; NRF_RTC0->EVENTS_COMPARE[0] = 0; +#if CORTEX_MODEL >= 4 + (void)NRF_RTC0->EVENTS_COMPARE[0]; +#endif #endif #if NRF5_ST_USE_RTC1 == TRUE NRF_RTC1->EVTENCLR = RTC_EVTENCLR_COMPARE0_Msk; NRF_RTC1->EVENTS_COMPARE[0] = 0; +#if CORTEX_MODEL >= 4 + (void)NRF_RTC1->EVENTS_COMPARE[0]; +#endif #endif } -- cgit v1.2.3