soc: nordic_nrf: validate base addresses with new DT API

Use the new devicetree API in a file which cross-checks dt reg base
addresses with values from the vendor HAL.

Signed-off-by: Martí Bolívar <marti.bolivar@nordicsemi.no>
This commit is contained in:
Martí Bolívar 2020-03-24 19:32:31 -07:00 committed by Kumar Gala
commit 4689822799

View file

@ -1,284 +1,134 @@
/*
* Copyright (c) 2019 Nordic Semiconductor ASA
* Copyright (c) 2019, 2020 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <kernel.h>
#include <soc.h>
#include <devicetree.h>
/*
* This inclusion is needed for nRF51 for two reasons:
* - for GPIO peripheral, MDK defines only the legacy NRF_GPIO symbol;
* the GPIO HAL included below maps this symbol to NRF_P0, for consistency
* with all other nRF SoCs
* - currently for nRF51, <soc.h> is not included through <kernel.h>,
* consequently <nrfx.h> is not included as well and MDK definitions
* are missing; the below inclusion fills this gap
* Account for MDK inconsistencies
*/
#include <hal/nrf_gpio.h>
/*
* Provide translation of symbols for peripherals that for some SoCs got names
* without the index.
*/
#ifndef NRF_I2S0
#if !defined(NRF_I2S0) && defined(NRF_I2S)
#define NRF_I2S0 NRF_I2S
#endif
#ifndef NRF_PDM0
#if !defined(NRF_P0) && defined(NRF_GPIO)
#define NRF_P0 NRF_GPIO
#endif
#if !defined(NRF_PDM0) && defined(NRF_PDM)
#define NRF_PDM0 NRF_PDM
#endif
#ifndef NRF_WDT0
#if !defined(NRF_WDT0) && defined(NRF_WDT)
#define NRF_WDT0 NRF_WDT
#endif
#define CHECK_ADDRESS(dts, mdk) BUILD_ASSERT((u32_t)(dts) == (u32_t)(mdk))
/**
* Check that a devicetree node's "reg" base address matches the
* correct value from the MDK.
*
* This check will only happen if the node is enabled. Disabled or
* nonexistent nodes are not checked.
*
* This allows the same file to work with multiple SoCs and devicetree
* configurations.
*
* @param lbl lowercase-and-underscores devicetree node label to check
* @param mdk_addr expected address from the Nordic MDK.
*/
#define CHECK_DT_REG(lbl, mdk_addr) \
BUILD_ASSERT( \
UTIL_OR(UTIL_NOT(DT_HAS_NODE(DT_NODELABEL(lbl))), \
(DT_REG_ADDR(DT_NODELABEL(lbl)) == \
(u32_t)(mdk_addr))))
#if defined(DT_NORDIC_NRF_ADC_ADC_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_ADC_ADC_0_BASE_ADDRESS, NRF_ADC);
#endif
/**
* If a node label "lbl" might have different addresses depending on
* its compatible "compat", you can use this macro to pick the right
* one.
*
* @param lbl lowercase-and-underscores devicetree node label to check
* @param compat lowercase-and-underscores compatible to check
* @param addr_if_match MDK address to return if "lbl" has compatible "compat"
* @param addr_if_no_match MDK address to return otherwise
*/
#define NODE_ADDRESS(lbl, compat, addr_if_match, addr_if_no_match) \
COND_CODE_1(DT_NODE_HAS_COMPAT(DT_NODELABEL(lbl), compat), \
(addr_if_match), (addr_if_no_match))
#if defined(DT_NORDIC_NRF_CC310_CC310_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_CC310_CC310_BASE_ADDRESS, NRF_CRYPTOCELL);
#endif
#define CHECK_SPI_REG(lbl, num) \
CHECK_DT_REG(lbl, \
NODE_ADDRESS(lbl, nordic_nrf_spi, NRF_SPI##num, \
NODE_ADDRESS(lbl, nordic_nrf_spim, NRF_SPIM##num, \
NRF_SPIS##num)))
#if defined(DT_INST_0_NORDIC_NRF_CLOCK_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_CLOCK_BASE_ADDRESS, NRF_CLOCK);
#endif
#define CHECK_I2C_REG(lbl, num) \
CHECK_DT_REG(lbl, \
NODE_ADDRESS(lbl, nordic_nrf_twi, NRF_TWI##num, \
NODE_ADDRESS(lbl, nordic_nrf_twim, NRF_TWIM##num, \
NRF_TWIS##num)))
#if defined(DT_INST_0_NORDIC_NRF_DPPIC_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_DPPIC_BASE_ADDRESS, NRF_DPPIC);
#endif
#define CHECK_UART_REG(lbl, num) \
CHECK_DT_REG(lbl, \
NODE_ADDRESS(lbl, nordic_nrf_uart, NRF_UART##num, \
NRF_UARTE##num))
#if defined(DT_NORDIC_NRF_EGU_EGU_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_EGU_EGU_0_BASE_ADDRESS, NRF_EGU0);
#endif
#if defined(DT_NORDIC_NRF_EGU_EGU_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_EGU_EGU_1_BASE_ADDRESS, NRF_EGU1);
#endif
#if defined(DT_NORDIC_NRF_EGU_EGU_2_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_EGU_EGU_2_BASE_ADDRESS, NRF_EGU2);
#endif
#if defined(DT_NORDIC_NRF_EGU_EGU_3_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_EGU_EGU_3_BASE_ADDRESS, NRF_EGU3);
#endif
#if defined(DT_NORDIC_NRF_EGU_EGU_4_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_EGU_EGU_4_BASE_ADDRESS, NRF_EGU4);
#endif
#if defined(DT_NORDIC_NRF_EGU_EGU_5_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_EGU_EGU_5_BASE_ADDRESS, NRF_EGU5);
#endif
#if defined(DT_INST_0_NORDIC_NRF_FICR_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_FICR_BASE_ADDRESS, NRF_FICR);
#endif
#if defined(DT_NORDIC_NRF_GPIO_GPIO_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_GPIO_GPIO_0_BASE_ADDRESS, NRF_P0);
#endif
#if defined(DT_NORDIC_NRF_GPIO_GPIO_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_GPIO_GPIO_1_BASE_ADDRESS, NRF_P1);
#endif
#if defined(DT_NORDIC_NRF_GPIOTE_GPIOTE_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_GPIOTE_GPIOTE_0_BASE_ADDRESS, NRF_GPIOTE);
#endif
#if defined(DT_NORDIC_NRF_I2S_I2S_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_I2S_I2S_0_BASE_ADDRESS, NRF_I2S0);
#endif
#if defined(DT_INST_0_NORDIC_NRF_IPC_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_IPC_BASE_ADDRESS, NRF_IPC);
#endif
#if defined(DT_INST_0_NORDIC_NRF_KMU_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_KMU_BASE_ADDRESS, NRF_KMU);
#endif
#if defined(DT_INST_0_NORDIC_NRF51_FLASH_CONTROLLER_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF51_FLASH_CONTROLLER_BASE_ADDRESS, NRF_NVMC);
#endif
#if defined(DT_INST_0_NORDIC_NRF52_FLASH_CONTROLLER_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF52_FLASH_CONTROLLER_BASE_ADDRESS, NRF_NVMC);
#endif
#if defined(DT_INST_0_NORDIC_NRF91_FLASH_CONTROLLER_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF91_FLASH_CONTROLLER_BASE_ADDRESS, NRF_NVMC);
#endif
#if defined(DT_NORDIC_NRF_PDM_PDM_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_PDM_PDM_0_BASE_ADDRESS, NRF_PDM0);
#endif
#if defined(DT_INST_0_NORDIC_NRF_POWER_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_POWER_BASE_ADDRESS, NRF_POWER);
#endif
#if defined(DT_NORDIC_NRF_PWM_PWM_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_PWM_PWM_0_BASE_ADDRESS, NRF_PWM0);
#endif
#if defined(DT_NORDIC_NRF_PWM_PWM_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_PWM_PWM_1_BASE_ADDRESS, NRF_PWM1);
#endif
#if defined(DT_NORDIC_NRF_PWM_PWM_2_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_PWM_PWM_2_BASE_ADDRESS, NRF_PWM2);
#endif
#if defined(DT_NORDIC_NRF_PWM_PWM_3_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_PWM_PWM_3_BASE_ADDRESS, NRF_PWM3);
#endif
#if defined(DT_NORDIC_NRF_QDEC_QDEC_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_QDEC_QDEC_0_BASE_ADDRESS, NRF_QDEC);
#endif
#if defined(DT_INST_0_NORDIC_NRF_REGULATORS_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_REGULATORS_BASE_ADDRESS, NRF_REGULATORS);
#endif
#if defined(DT_INST_0_NORDIC_NRF_RNG_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_RNG_BASE_ADDRESS, NRF_RNG);
#endif
#if defined(DT_NORDIC_NRF_RTC_RTC_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_RTC_RTC_0_BASE_ADDRESS, NRF_RTC0);
#endif
#if defined(DT_NORDIC_NRF_RTC_RTC_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_RTC_RTC_1_BASE_ADDRESS, NRF_RTC1);
#endif
#if defined(DT_NORDIC_NRF_RTC_RTC_2_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_RTC_RTC_2_BASE_ADDRESS, NRF_RTC2);
#endif
#if defined(DT_NORDIC_NRF_SAADC_ADC_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SAADC_ADC_0_BASE_ADDRESS, NRF_SAADC);
#endif
#if defined(DT_NORDIC_NRF_SPI_SPI_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPI_SPI_0_BASE_ADDRESS, NRF_SPI0);
#endif
#if defined(DT_NORDIC_NRF_SPI_SPI_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPI_SPI_1_BASE_ADDRESS, NRF_SPI1);
#endif
#if defined(DT_NORDIC_NRF_SPI_SPI_2_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPI_SPI_2_BASE_ADDRESS, NRF_SPI2);
#endif
#if defined(DT_NORDIC_NRF_SPIM_SPI_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPIM_SPI_0_BASE_ADDRESS, NRF_SPIM0);
#endif
#if defined(DT_NORDIC_NRF_SPIM_SPI_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPIM_SPI_1_BASE_ADDRESS, NRF_SPIM1);
#endif
#if defined(DT_NORDIC_NRF_SPIM_SPI_2_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPIM_SPI_2_BASE_ADDRESS, NRF_SPIM2);
#endif
#if defined(DT_NORDIC_NRF_SPIM_SPI_3_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPIM_SPI_3_BASE_ADDRESS, NRF_SPIM3);
#endif
#if defined(DT_NORDIC_NRF_SPIM_SPI_4_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPIM_SPI_4_BASE_ADDRESS, NRF_SPIM4);
#endif
#if defined(DT_NORDIC_NRF_SPIS_SPI_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPIS_SPI_0_BASE_ADDRESS, NRF_SPIS0);
#endif
#if defined(DT_NORDIC_NRF_SPIS_SPI_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPIS_SPI_1_BASE_ADDRESS, NRF_SPIS1);
#endif
#if defined(DT_NORDIC_NRF_SPIS_SPI_2_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPIS_SPI_2_BASE_ADDRESS, NRF_SPIS2);
#endif
#if defined(DT_NORDIC_NRF_SPIS_SPI_3_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_SPIS_SPI_3_BASE_ADDRESS, NRF_SPIS3);
#endif
#if defined(DT_INST_0_NORDIC_NRF_SPU_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_SPU_BASE_ADDRESS, NRF_SPU);
#endif
#if defined(DT_INST_0_NORDIC_NRF_TEMP_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_TEMP_BASE_ADDRESS, NRF_TEMP);
#endif
#if defined(DT_NORDIC_NRF_TIMER_TIMER_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TIMER_TIMER_0_BASE_ADDRESS, NRF_TIMER0);
#endif
#if defined(DT_NORDIC_NRF_TIMER_TIMER_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TIMER_TIMER_1_BASE_ADDRESS, NRF_TIMER1);
#endif
#if defined(DT_NORDIC_NRF_TIMER_TIMER_2_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TIMER_TIMER_2_BASE_ADDRESS, NRF_TIMER2);
#endif
#if defined(DT_NORDIC_NRF_TIMER_TIMER_3_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TIMER_TIMER_3_BASE_ADDRESS, NRF_TIMER3);
#endif
#if defined(DT_NORDIC_NRF_TIMER_TIMER_4_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TIMER_TIMER_4_BASE_ADDRESS, NRF_TIMER4);
#endif
#if defined(DT_NORDIC_NRF_TWI_I2C_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TWI_I2C_0_BASE_ADDRESS, NRF_TWI0);
#endif
#if defined(DT_NORDIC_NRF_TWI_I2C_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TWI_I2C_1_BASE_ADDRESS, NRF_TWI1);
#endif
#if defined(DT_NORDIC_NRF_TWIM_I2C_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TWIM_I2C_0_BASE_ADDRESS, NRF_TWIM0);
#endif
#if defined(DT_NORDIC_NRF_TWIM_I2C_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TWIM_I2C_1_BASE_ADDRESS, NRF_TWIM1);
#endif
#if defined(DT_NORDIC_NRF_TWIM_I2C_2_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TWIM_I2C_2_BASE_ADDRESS, NRF_TWIM2);
#endif
#if defined(DT_NORDIC_NRF_TWIM_I2C_3_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TWIM_I2C_3_BASE_ADDRESS, NRF_TWIM3);
#endif
#if defined(DT_NORDIC_NRF_TWIS_I2C_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TWIS_I2C_0_BASE_ADDRESS, NRF_TWIS0);
#endif
#if defined(DT_NORDIC_NRF_TWIS_I2C_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TWIS_I2C_1_BASE_ADDRESS, NRF_TWIS1);
#endif
#if defined(DT_NORDIC_NRF_TWIS_I2C_2_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TWIS_I2C_2_BASE_ADDRESS, NRF_TWIS2);
#endif
#if defined(DT_NORDIC_NRF_TWIS_I2C_3_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_TWIS_I2C_3_BASE_ADDRESS, NRF_TWIS3);
#endif
#if defined(DT_NORDIC_NRF_UART_UART_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_UART_UART_0_BASE_ADDRESS, NRF_UART0);
#endif
#if defined(DT_NORDIC_NRF_UARTE_UART_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_UARTE_UART_0_BASE_ADDRESS, NRF_UARTE0);
#endif
#if defined(DT_NORDIC_NRF_UARTE_UART_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_UARTE_UART_1_BASE_ADDRESS, NRF_UARTE1);
#endif
#if defined(DT_NORDIC_NRF_UARTE_UART_2_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_UARTE_UART_2_BASE_ADDRESS, NRF_UARTE2);
#endif
#if defined(DT_NORDIC_NRF_UARTE_UART_3_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_UARTE_UART_3_BASE_ADDRESS, NRF_UARTE3);
#endif
#if defined(DT_INST_0_NORDIC_NRF_UICR_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_UICR_BASE_ADDRESS, NRF_UICR);
#endif
#if defined(DT_NORDIC_NRF_USBD_USBD_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_USBD_USBD_0_BASE_ADDRESS, NRF_USBD);
#endif
#if defined(DT_INST_0_NORDIC_NRF_VMC_BASE_ADDRESS)
CHECK_ADDRESS(DT_INST_0_NORDIC_NRF_VMC_BASE_ADDRESS, NRF_VMC);
#endif
#if defined(DT_NORDIC_NRF_WATCHDOG_WDT_0_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_WATCHDOG_WDT_0_BASE_ADDRESS, NRF_WDT0);
#endif
#if defined(DT_NORDIC_NRF_WATCHDOG_WDT_1_BASE_ADDRESS)
CHECK_ADDRESS(DT_NORDIC_NRF_WATCHDOG_WDT_1_BASE_ADDRESS, NRF_WDT1);
#endif
CHECK_DT_REG(adc, NODE_ADDRESS(adc, nordic_nrf_adc, NRF_ADC, NRF_SAADC));
CHECK_DT_REG(clock, NRF_CLOCK);
CHECK_DT_REG(cryptocell, NRF_CRYPTOCELL);
CHECK_DT_REG(dppic, NRF_DPPIC);
CHECK_DT_REG(egu0, NRF_EGU0);
CHECK_DT_REG(egu1, NRF_EGU1);
CHECK_DT_REG(egu2, NRF_EGU2);
CHECK_DT_REG(egu3, NRF_EGU3);
CHECK_DT_REG(egu4, NRF_EGU4);
CHECK_DT_REG(egu5, NRF_EGU5);
CHECK_DT_REG(ficr, NRF_FICR);
CHECK_DT_REG(flash_controller, NRF_NVMC);
CHECK_DT_REG(gpio0, NRF_P0);
CHECK_DT_REG(gpio1, NRF_P1);
CHECK_DT_REG(gpiote, NRF_GPIOTE);
CHECK_DT_REG(i2s0, NRF_I2S0);
CHECK_DT_REG(ipc, NRF_IPC);
CHECK_DT_REG(kmu, NRF_KMU);
CHECK_DT_REG(pdm0, NRF_PDM0);
CHECK_DT_REG(power, NRF_POWER);
CHECK_DT_REG(pwm0, NRF_PWM0);
CHECK_DT_REG(pwm1, NRF_PWM1);
CHECK_DT_REG(pwm2, NRF_PWM2);
CHECK_DT_REG(pwm3, NRF_PWM3);
CHECK_DT_REG(qdec, NRF_QDEC);
CHECK_DT_REG(regulators, NRF_REGULATORS);
CHECK_DT_REG(rng, NRF_RNG);
CHECK_DT_REG(rtc0, NRF_RTC0);
CHECK_DT_REG(rtc1, NRF_RTC1);
CHECK_DT_REG(rtc2, NRF_RTC2);
CHECK_SPI_REG(spi0, 0);
CHECK_SPI_REG(spi1, 1);
CHECK_SPI_REG(spi2, 2);
CHECK_DT_REG(spi3, NRF_SPIM3);
CHECK_DT_REG(spi4, NRF_SPIM4);
CHECK_DT_REG(spu, NRF_SPU);
CHECK_DT_REG(temp, NRF_TEMP);
CHECK_DT_REG(timer0, NRF_TIMER0);
CHECK_DT_REG(timer1, NRF_TIMER1);
CHECK_DT_REG(timer2, NRF_TIMER2);
CHECK_DT_REG(timer3, NRF_TIMER3);
CHECK_DT_REG(timer4, NRF_TIMER4);
CHECK_I2C_REG(i2c0, 0);
CHECK_I2C_REG(i2c1, 1);
CHECK_DT_REG(i2c2, NRF_TWIM2);
CHECK_DT_REG(i2c3, NRF_TWIM3);
CHECK_UART_REG(uart0, 0);
CHECK_DT_REG(uart1, NRF_UARTE1);
CHECK_DT_REG(uart2, NRF_UARTE2);
CHECK_DT_REG(uart3, NRF_UARTE3);
CHECK_DT_REG(uicr, NRF_UICR);
CHECK_DT_REG(usbd, NRF_USBD);
CHECK_DT_REG(vmc, NRF_VMC);
CHECK_DT_REG(wdt, NRF_WDT0);