The nRF52810 is a low-cost variant of the nRF52832, with a reduced set of peripherals and memory. This commit adds Bluetooth controller support for it. Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no> Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
246 lines
6.5 KiB
C
246 lines
6.5 KiB
C
/*
|
|
* Copyright (c) 2016-2017 Nordic Semiconductor ASA
|
|
* Copyright (c) 2016 Vinayak Kariappa Chettimada
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifdef CONFIG_BT_CTLR_DEBUG_PINS
|
|
#if defined(CONFIG_BOARD_NRF52840_PCA10056)
|
|
#define DEBUG_PORT NRF_P1
|
|
#define DEBUG_PIN0 BIT(1)
|
|
#define DEBUG_PIN1 BIT(2)
|
|
#define DEBUG_PIN2 BIT(3)
|
|
#define DEBUG_PIN3 BIT(4)
|
|
#define DEBUG_PIN4 BIT(5)
|
|
#define DEBUG_PIN5 BIT(6)
|
|
#define DEBUG_PIN6 BIT(7)
|
|
#define DEBUG_PIN7 BIT(8)
|
|
#define DEBUG_PIN8 BIT(10)
|
|
#define DEBUG_PIN9 BIT(11)
|
|
#elif defined(CONFIG_BOARD_NRF52_PCA10040) || \
|
|
defined(CONFIG_BOARD_NRF52810_PCA10040)
|
|
#define DEBUG_PORT NRF_GPIO
|
|
#define DEBUG_PIN0 BIT(11)
|
|
#define DEBUG_PIN1 BIT(12)
|
|
#define DEBUG_PIN2 BIT(13)
|
|
#define DEBUG_PIN3 BIT(14)
|
|
#define DEBUG_PIN4 BIT(15)
|
|
#define DEBUG_PIN5 BIT(16)
|
|
#define DEBUG_PIN6 BIT(17)
|
|
#define DEBUG_PIN7 BIT(18)
|
|
#define DEBUG_PIN8 BIT(19)
|
|
#define DEBUG_PIN9 BIT(20)
|
|
#elif defined(CONFIG_BOARD_NRF51_PCA10028)
|
|
#define DEBUG_PORT NRF_GPIO
|
|
#define DEBUG_PIN0 BIT(12)
|
|
#define DEBUG_PIN1 BIT(13)
|
|
#define DEBUG_PIN2 BIT(14)
|
|
#define DEBUG_PIN3 BIT(15)
|
|
#define DEBUG_PIN4 BIT(16)
|
|
#define DEBUG_PIN5 BIT(17)
|
|
#define DEBUG_PIN6 BIT(18)
|
|
#define DEBUG_PIN7 BIT(19)
|
|
#define DEBUG_PIN8 BIT(20)
|
|
#define DEBUG_PIN9 BIT(23)
|
|
#else
|
|
#error BT_CTLR_DEBUG_PINS not supported on this board.
|
|
#endif
|
|
|
|
#define DEBUG_PIN_MASK (DEBUG_PIN0 | DEBUG_PIN1 | DEBUG_PIN2 | DEBUG_PIN3 | \
|
|
DEBUG_PIN4 | DEBUG_PIN5 | DEBUG_PIN6 | DEBUG_PIN7 | \
|
|
DEBUG_PIN8 | DEBUG_PIN9)
|
|
#define DEBUG_CLOSE_MASK (DEBUG_PIN3 | DEBUG_PIN4 | DEBUG_PIN5 | DEBUG_PIN6)
|
|
|
|
/* below are some interesting macros referenced by controller
|
|
* which can be defined to SoC's GPIO toggle to observe/debug the
|
|
* controller's runtime behavior.
|
|
*/
|
|
#define DEBUG_INIT() do { \
|
|
DEBUG_PORT->DIRSET = DEBUG_PIN_MASK; \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN_MASK; } \
|
|
while (0)
|
|
|
|
#define DEBUG_CPU_SLEEP(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN0; \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN0; } \
|
|
else { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN0; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN0; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_TICKER_ISR(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN1; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN1; } \
|
|
else { \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN1; \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN1; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_TICKER_TASK(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN1; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN1; } \
|
|
else { \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN1; \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN1; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_TICKER_JOB(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN2; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN2; } \
|
|
else { \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN2; \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN2; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_ISR(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN7; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN7; } \
|
|
else { \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN7; \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN7; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_XTAL(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN8; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN8; } \
|
|
else { \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN8; \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN8; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_ACTIVE(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN9; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN9; } \
|
|
else { \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN9; \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN9; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_CLOSE(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = 0x00000000; \
|
|
DEBUG_PORT->OUTSET = 0x00000000; } \
|
|
else { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_CLOSE_MASK; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_PREPARE_A(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN3; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN3; } \
|
|
else { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN3; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN3; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_START_A(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN3; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN3; } \
|
|
else { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN3; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN3; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_PREPARE_S(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN4; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN4; } \
|
|
else { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN4; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN4; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_START_S(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN4; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN4; } \
|
|
else { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN4; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN4; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_PREPARE_O(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN5; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN5; } \
|
|
else { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN5; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN5; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_START_O(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN5; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN5; } \
|
|
else { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN5; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN5; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_PREPARE_M(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN6; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN6; } \
|
|
else { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN6; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN6; } \
|
|
} while (0)
|
|
|
|
#define DEBUG_RADIO_START_M(flag) do { \
|
|
if (flag) { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN6; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN6; } \
|
|
else { \
|
|
DEBUG_PORT->OUTCLR = DEBUG_PIN6; \
|
|
DEBUG_PORT->OUTSET = DEBUG_PIN6; } \
|
|
} while (0)
|
|
|
|
#else
|
|
|
|
#define DEBUG_INIT()
|
|
|
|
#define DEBUG_CPU_SLEEP(flag)
|
|
|
|
#define DEBUG_TICKER_ISR(flag)
|
|
|
|
#define DEBUG_TICKER_TASK(flag)
|
|
|
|
#define DEBUG_TICKER_JOB(flag)
|
|
|
|
#define DEBUG_RADIO_ISR(flag)
|
|
|
|
#define DEBUG_RADIO_HCTO(flag)
|
|
|
|
#define DEBUG_RADIO_XTAL(flag)
|
|
|
|
#define DEBUG_RADIO_ACTIVE(flag)
|
|
|
|
#define DEBUG_RADIO_CLOSE(flag)
|
|
|
|
#define DEBUG_RADIO_PREPARE_A(flag)
|
|
|
|
#define DEBUG_RADIO_START_A(flag)
|
|
|
|
#define DEBUG_RADIO_PREPARE_S(flag)
|
|
|
|
#define DEBUG_RADIO_START_S(flag)
|
|
|
|
#define DEBUG_RADIO_PREPARE_O(flag)
|
|
|
|
#define DEBUG_RADIO_START_O(flag)
|
|
|
|
#define DEBUG_RADIO_PREPARE_M(flag)
|
|
|
|
#define DEBUG_RADIO_START_M(flag)
|
|
|
|
#endif /* CONFIG_BT_CTLR_DEBUG_PINS */
|