From 848be1d619bb21d9f26c11a9c4c5c15bdd0a1303 Mon Sep 17 00:00:00 2001 From: nikolac Date: Sat, 19 Dec 2020 17:02:13 -0600 Subject: [PATCH 1/3] Exclude cache for NRF52805 --- hal/architecture/NRF5/MyHwNRF5.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hal/architecture/NRF5/MyHwNRF5.cpp b/hal/architecture/NRF5/MyHwNRF5.cpp index b6ea68134..e60ca3eeb 100644 --- a/hal/architecture/NRF5/MyHwNRF5.cpp +++ b/hal/architecture/NRF5/MyHwNRF5.cpp @@ -99,7 +99,7 @@ bool hwInit(void) NRF_POWER->TASKS_CONSTLAT = 1; // Enable cache on >= NRF52 -#ifndef NRF51 +#if !defined(NRF51) && !defined(NRF52805_XXAA) NRF_NVMC->ICACHECNF = NVMC_ICACHECNF_CACHEEN_Msk; #endif From 297e70ed0f08754b889b3cee96653fe633fcea35 Mon Sep 17 00:00:00 2001 From: nikolac Date: Sat, 19 Dec 2020 17:20:57 -0600 Subject: [PATCH 2/3] Check and handle unsupported modulation rates --- MyConfig.h | 4 ++++ hal/transport/NRF5_ESB/driver/Radio.h | 2 ++ hal/transport/NRF5_ESB/driver/Radio_ESB.cpp | 5 ++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/MyConfig.h b/MyConfig.h index 201dc04fd..0aa451420 100755 --- a/MyConfig.h +++ b/MyConfig.h @@ -543,7 +543,11 @@ * - NRF5_BLE_1MBPS for 1Mbps BLE modulation */ #ifndef MY_NRF5_ESB_MODE +#ifdef NRF5_250KBPS #define MY_NRF5_ESB_MODE (NRF5_250KBPS) +#else +#define MY_NRF5_ESB_MODE (NRF5_1MBPS) +#endif #endif /** diff --git a/hal/transport/NRF5_ESB/driver/Radio.h b/hal/transport/NRF5_ESB/driver/Radio.h index e4ac5dce9..ccdba4b8d 100644 --- a/hal/transport/NRF5_ESB/driver/Radio.h +++ b/hal/transport/NRF5_ESB/driver/Radio.h @@ -65,7 +65,9 @@ typedef enum { typedef enum { NRF5_1MBPS = RADIO_MODE_MODE_Nrf_1Mbit, NRF5_2MBPS = RADIO_MODE_MODE_Nrf_2Mbit, +#ifdef RADIO_MODE_MODE_Nrf_250Kbit NRF5_250KBPS = RADIO_MODE_MODE_Nrf_250Kbit, // Deprecated!!! +#endif NRF5_BLE_1MBPS = RADIO_MODE_MODE_Ble_1Mbit, } nrf5_mode_e; diff --git a/hal/transport/NRF5_ESB/driver/Radio_ESB.cpp b/hal/transport/NRF5_ESB/driver/Radio_ESB.cpp index 538b53d16..2b7b8053c 100644 --- a/hal/transport/NRF5_ESB/driver/Radio_ESB.cpp +++ b/hal/transport/NRF5_ESB/driver/Radio_ESB.cpp @@ -547,9 +547,12 @@ static inline uint8_t NRF5_ESB_byte_time() return (3); } else if (MY_NRF5_ESB_MODE == NRF5_2MBPS) { return (2); - } else if (MY_NRF5_ESB_MODE == NRF5_250KBPS) { + } +#ifdef NRF5_250KBPS + else if (MY_NRF5_ESB_MODE == NRF5_250KBPS) { return (5); } +#endif } extern "C" { From 0078cba9ce28dedf7e859258bf00aff0e82d062b Mon Sep 17 00:00:00 2001 From: nikolac Date: Sat, 19 Dec 2020 18:03:45 -0600 Subject: [PATCH 3/3] Make PPI channel selection dynamic, based chip specific channel count --- hal/transport/NRF5_ESB/driver/Radio_ESB.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/hal/transport/NRF5_ESB/driver/Radio_ESB.h b/hal/transport/NRF5_ESB/driver/Radio_ESB.h index bcd37640b..4f41bcef9 100644 --- a/hal/transport/NRF5_ESB/driver/Radio_ESB.h +++ b/hal/transport/NRF5_ESB/driver/Radio_ESB.h @@ -92,15 +92,19 @@ RADIO_SHORTS_READY_START_Msk | RADIO_SHORTS_ADDRESS_BCSTART_Msk | \ RADIO_SHORTS_ADDRESS_RSSISTART_Msk | RADIO_SHORTS_DISABLED_RSSISTOP_Msk) -// PPI Channels for TX +/** PPI Channels for TX + * Not all NRF5 modules have the same number of PPI channels + * For regular PPI, select the highest possible channels + */ +#define NRF5_ESB_PPI_LAST_CHANNEL (PPI_CH_NUM - 1) #if (NRF5_RADIO_TIMER_IRQN != TIMER0_IRQn) // Use two regular PPI channels -#define NRF5_ESB_PPI_TIMER_START 14 -#define NRF5_ESB_PPI_TIMER_RADIO_DISABLE 15 +#define NRF5_ESB_PPI_TIMER_START (NRF5_ESB_PPI_LAST_CHANNEL - 1) +#define NRF5_ESB_PPI_TIMER_RADIO_DISABLE (NRF5_ESB_PPI_LAST_CHANNEL) #else // Use one regular PPI channel and one predefined PPI channel #define NRF5_ESB_USE_PREDEFINED_PPI -#define NRF5_ESB_PPI_TIMER_START 15 +#define NRF5_ESB_PPI_TIMER_START (NRF5_ESB_PPI_LAST_CHANNEL) #define NRF5_ESB_PPI_TIMER_RADIO_DISABLE 22 #endif #define NRF5_ESB_PPI_BITS \