31 #define NRF_FICR NRF_FICR_S
38 #ifdef CPU_MODEL_NRF52832XXAA
39 #define ERRATA_SPI_SINGLE_BYTE_WORKAROUND (1)
46 #define PROVIDES_PM_OFF
52 #ifdef FICR_INFO_DEVICEID_DEVICEID_Msk
53 #define CPUID_ADDR (&NRF_FICR->INFO.DEVICEID[0])
55 #define CPUID_ADDR (&NRF_FICR->DEVICEID[0])
60 #define CPUID_LEN (8U)
68 #define GPIO_PIN(x, y) ((x << 5) | y)
70 #define GPIO_PIN(x, y) ((x & 0) | y)
78 #define GPIO_UNDEF (UINT8_MAX)
87 #define ISR_GPIOTE isr_gpiote0
89 #define ISR_GPIOTE isr_gpiote
101 #define GPIO_MODE(oe, ic, pr, dr) (oe | (ic << 1) | (pr << 2) | (dr << 8))
104 #define HAVE_GPIO_SLEW_T
112 #define HAVE_GPIO_PULL_STRENGTH_T
120 #define HAVE_GPIO_DRIVE_STRENGTH_T
128 #define HAVE_GPIO_IRQ_TRIG_T
137 #define HAVE_GPIO_PULL_T
145 #define HAVE_GPIO_STATE_T
155 #define HAVE_GPIO_CONF_T
204 #if !defined(DOXYGEN) && (defined(CPU_NRF53) || defined(CPU_NRF9160))
208 #define UART_BAUDRATE_BAUDRATE_Baud1200 UARTE_BAUDRATE_BAUDRATE_Baud1200
209 #define UART_BAUDRATE_BAUDRATE_Baud2400 UARTE_BAUDRATE_BAUDRATE_Baud2400
210 #define UART_BAUDRATE_BAUDRATE_Baud4800 UARTE_BAUDRATE_BAUDRATE_Baud4800
211 #define UART_BAUDRATE_BAUDRATE_Baud9600 UARTE_BAUDRATE_BAUDRATE_Baud9600
212 #define UART_BAUDRATE_BAUDRATE_Baud14400 UARTE_BAUDRATE_BAUDRATE_Baud14400
213 #define UART_BAUDRATE_BAUDRATE_Baud19200 UARTE_BAUDRATE_BAUDRATE_Baud19200
214 #define UART_BAUDRATE_BAUDRATE_Baud28800 UARTE_BAUDRATE_BAUDRATE_Baud28800
215 #define UART_BAUDRATE_BAUDRATE_Baud31250 UARTE_BAUDRATE_BAUDRATE_Baud31250
216 #define UART_BAUDRATE_BAUDRATE_Baud38400 UARTE_BAUDRATE_BAUDRATE_Baud38400
217 #define UART_BAUDRATE_BAUDRATE_Baud56000 UARTE_BAUDRATE_BAUDRATE_Baud56000
218 #define UART_BAUDRATE_BAUDRATE_Baud57600 UARTE_BAUDRATE_BAUDRATE_Baud57600
219 #define UART_BAUDRATE_BAUDRATE_Baud76800 UARTE_BAUDRATE_BAUDRATE_Baud76800
220 #define UART_BAUDRATE_BAUDRATE_Baud115200 UARTE_BAUDRATE_BAUDRATE_Baud115200
221 #define UART_BAUDRATE_BAUDRATE_Baud230400 UARTE_BAUDRATE_BAUDRATE_Baud230400
222 #define UART_BAUDRATE_BAUDRATE_Baud250000 UARTE_BAUDRATE_BAUDRATE_Baud250000
223 #define UART_BAUDRATE_BAUDRATE_Baud460800 UARTE_BAUDRATE_BAUDRATE_Baud460800
224 #define UART_BAUDRATE_BAUDRATE_Baud921600 UARTE_BAUDRATE_BAUDRATE_Baud921600
225 #define UART_BAUDRATE_BAUDRATE_Baud1M UARTE_BAUDRATE_BAUDRATE_Baud1M
227 #define SPI_FREQUENCY_FREQUENCY_K125 SPIM_FREQUENCY_FREQUENCY_K125
228 #define SPI_FREQUENCY_FREQUENCY_K500 SPIM_FREQUENCY_FREQUENCY_K500
229 #define SPI_FREQUENCY_FREQUENCY_M1 SPIM_FREQUENCY_FREQUENCY_M1
230 #define SPI_FREQUENCY_FREQUENCY_M4 SPIM_FREQUENCY_FREQUENCY_M4
231 #define SPI_FREQUENCY_FREQUENCY_M8 SPIM_FREQUENCY_FREQUENCY_M8
232 #define SPI_CONFIG_CPHA_Msk SPIM_CONFIG_CPHA_Msk
233 #define SPI_CONFIG_CPOL_Msk SPIM_CONFIG_CPOL_Msk
239 #define SPI_HWCS(x) (SPI_CS_UNDEF)
245 #define PERIPH_SPI_NEEDS_INIT_CS
246 #define PERIPH_SPI_NEEDS_TRANSFER_BYTE
247 #define PERIPH_SPI_NEEDS_TRANSFER_REG
248 #define PERIPH_SPI_NEEDS_TRANSFER_REGS
269 #define HAVE_GPIO_MODE_T
285 #define HAVE_GPIO_FLANK_T
314 #define PERIPH_TIMER_PROVIDES_SET 1
324 #define TIMER_CHANNEL_NUMOF 5
331 #define HAVE_SPI_MODE_T
336 SPI_MODE_3 = (SPI_CONFIG_CPOL_Msk | SPI_CONFIG_CPHA_Msk)
344 #define HAVE_SPI_CLK_T
359 #define NWDT_TIME_LOWER_LIMIT (1)
361 #define NWDT_TIME_UPPER_LIMIT ((UINT32_MAX >> 15) * US_PER_MS + 1)
397 #ifdef MODULE_PERIPH_UART_HW_FC
407 #ifndef UART_TXBUF_SIZE
408 #define UART_TXBUF_SIZE (64)
414 #define USBDEV_CPU_DMA_ALIGNMENT (4)
419 #define USBDEV_CPU_DMA_REQUIREMENTS __attribute__((aligned(USBDEV_CPU_DMA_ALIGNMENT)))
421 #if !defined(CPU_FAM_NRF51) && !defined(DOXYGEN)
426 #define PWM_CHANNELS (4U)
435 #define PWM_MODE(ud, pol) (ud | (pol << 15))
440 #define HAVE_PWM_MODE_T
445 PWM_CENTER_INV = PWM_MODE(1, 0)
462 #if defined(PWM_PRESENT)
465 gpio_t pin[PWM_CHANNELS];
474 #define SPI_SCKSEL (dev(bus)->PSEL.SCK)
475 #define SPI_MOSISEL (dev(bus)->PSEL.MOSI)
476 #define SPI_MISOSEL (dev(bus)->PSEL.MISO)
486 #if ERRATA_SPI_SINGLE_BYTE_WORKAROUND
563 #ifndef UART_TXBUF_SIZE
564 #define UART_TXBUF_SIZE (64)
571 #ifndef CONFIG_SPI_MBUF_SIZE
572 #define CONFIG_SPI_MBUF_SIZE 64
580 #define HAVE_I2C_SPEED_T
607 #define PERIPH_I2C_NEED_READ_REG
608 #define PERIPH_I2C_NEED_WRITE_REG
615 #define i2c_pin_sda(dev) i2c_config[dev].sda
616 #define i2c_pin_scl(dev) i2c_config[dev].scl
@ GPIO_OUT
select GPIO MASK as output
@ GPIO_IN
select GPIO MASK as input
gpio_mode_t
Available pin modes.
gpio_irq_trig_t
Definition of possible IRQ triggers.
@ GPIO_TRIGGER_EDGE_FALLING
edge triggered IRQ on falling flanks only
@ GPIO_TRIGGER_LEVEL_HIGH
level triggered IRQ on high input
@ GPIO_TRIGGER_EDGE_RISING
edge triggered IRQ on rising flanks only
@ GPIO_TRIGGER_EDGE_BOTH
edge triggered IRQ on falling AND rising flanks
@ GPIO_TRIGGER_LEVEL_LOW
level triggered IRQ on low input
gpio_pull_t
Enumeration of pull resistor configurations.
gpio_pull_strength_t
Enumeration of pull resistor values.
gpio_state_t
Enumeration of GPIO states (direction)
gpio_slew_t
Enumeration of slew rate settings.
gpio_drive_strength_t
Enumeration of drive strength options.
typedef gpio_conf_t
GPIO pin configuration.
@ GPIO_FLOATING
No pull ups nor pull downs enabled.
@ GPIO_PULL_KEEP
Keep the signal at current logic level with pull up/down resistors.
@ GPIO_PULL_DOWN
Pull down resistor enabled.
@ GPIO_PULL_UP
Pull up resistor enabled.
@ GPIO_PULL_WEAKEST
Use the weakest (highest Ohm value) resistor.
@ GPIO_PULL_WEAK
Use a weak pull resistor.
@ GPIO_PULL_STRONG
Use a strong pull resistor.
@ GPIO_PULL_STRONGEST
Use the strongest pull resistor.
@ GPIO_OUTPUT_OPEN_SOURCE
Use pin as output in open emitter configuration.
@ GPIO_USED_BY_PERIPHERAL
The GPIO pin is used by a peripheral.
@ GPIO_OUTPUT_OPEN_DRAIN
Use pin as output in open collector configuration.
@ GPIO_OUTPUT_PUSH_PULL
Use pin as output in push-pull configuration.
@ GPIO_DISCONNECT
Disconnect pin from all peripherals.
@ GPIO_INPUT
Use pin as input.
@ GPIO_SLEW_SLOWEST
let the output voltage level rise/fall as slow as possible
@ GPIO_SLEW_FAST
let the output voltage level rise/fall fast
@ GPIO_SLEW_SLOW
let the output voltage level rise/fall slowly
@ GPIO_SLEW_FASTEST
let the output voltage level rise/fall as fast as possible
@ GPIO_DRIVE_STRONG
Use a strong drive strength.
@ GPIO_DRIVE_WEAK
Use a weak drive strength.
@ GPIO_DRIVE_STRONGEST
Use the strongest drive strength.
@ GPIO_DRIVE_WEAKEST
Use the weakest drive strength.
unsigned int gpio_t
GPIO type identifier.
@ GPIO_FALLING
emit interrupt on falling flank
@ GPIO_RISING
emit interrupt on rising flank
@ GPIO_BOTH
not supported -> random value
@ GPIO_OD
configure as output in open-drain mode without pull resistor
@ GPIO_IN_PU
configure as input with pull-up resistor
@ GPIO_OD_PU
configure as output in open-drain mode with pull resistor enabled
@ GPIO_IN_PD
configure as input with pull-down resistor
@ I2C_SPEED_NORMAL
normal mode: ~100 kbit/s
@ I2C_SPEED_FAST_PLUS
fast plus mode: ~1000 kbit/s
@ I2C_SPEED_LOW
low speed mode: ~10 kbit/s
@ I2C_SPEED_HIGH
high speed mode: ~3400 kbit/s
@ I2C_SPEED_FAST
fast mode: ~400 kbit/s
@ PWM_CENTER
center aligned
@ SPI_MODE_0
CPOL=0, CPHA=0.
@ SPI_MODE_2
CPOL=1, CPHA=0.
@ SPI_MODE_1
CPOL=0, CPHA=1.
@ SPI_MODE_3
CPOL=1, CPHA=1.
@ SPI_CLK_10MHZ
drive the SPI bus with 10MHz
@ SPI_CLK_5MHZ
drive the SPI bus with 5MHz
@ SPI_CLK_400KHZ
drive the SPI bus with 400KHz
@ SPI_CLK_1MHZ
drive the SPI bus with 1MHz
@ SPI_CLK_100KHZ
drive the SPI bus with 100KHz
spi_mode_t
Support SPI modes.
gpio_flank_t
Enumeration of supported GPIO flanks.
void nrf5x_i2c_acquire(NRF_TWIM_Type *bus, shared_irq_cb_t cb, void *arg)
Acquire the shared I2C/SPI peripheral in I2C mode.
uint8_t gpio_int_get_exti(gpio_t pin)
Retrieve the exti(GPIOTE) channel associated with a gpio.
void shared_irq_register_i2c(NRF_TWIM_Type *bus, shared_irq_cb_t cb, void *arg)
Register an I2C IRQ handler for a shared UART/I2C/SPI irq vector.
void nrf5x_spi_release(NRF_SPIM_Type *bus)
Acquire the shared I2C/SPI peripheral in SPI mode.
void(* shared_irq_cb_t)(void *arg)
Common UART/SPI/I2C interrupt callback.
#define GPIO_MODE(oe, ic, pr, dr)
Generate GPIO mode bitfields.
void nrf5x_spi_acquire(NRF_SPIM_Type *bus, shared_irq_cb_t cb, void *arg)
Acquire the shared I2C/SPI peripheral in SPI mode.
void shared_irq_register_spi(NRF_SPIM_Type *bus, shared_irq_cb_t cb, void *arg)
Register a SPI IRQ handler for a shared UART/I2C/SPI irq vector.
void shared_irq_register_uart(NRF_UARTE_Type *bus, shared_irq_cb_t cb, void *arg)
Register an UART IRQ handler for a shared UART/I2C/SPI irq vector.
void nrf5x_i2c_release(NRF_TWIM_Type *bus)
Release the shared I2C/SPI peripheral in I2C mode.
I2C configuration structure.
NRF_TWIM_Type * dev
TWIM hardware device.
PWM device configuration.
Quadrature decoder configuration struct.
bool debounce_filter
Enable/disable debounce filter.
gpio_t b_pin
GPIO Pin for phase B.
gpio_t a_pin
GPIO Pin for phase A.
gpio_t led_pin
LED GPIO, GPIO_UNDEF to disable.
uint8_t sample_period
Sample period used, e.g.
SPI device configuration.
NRF_SPIM_Type * dev
SPI device used.
Timer device configuration.
uint8_t channels
number of hardware channels minus one
uint8_t bitmode
counter width
NRF_TIMER_Type * dev
timer device
UART device configuration.
NRF_UART_Type * dev
UART device base register address.
GPIO pin configuration for nRF5x MCUs.
gpio_pull_t pull
Pull resistor configuration.
gpio_drive_strength_t drive_strength
Drive strength of the GPIO.
gpio_state_t state
State of the pin.
bool initial_value
Initial value of the output.