static void apply_config(nrfx_uarte_t const * p_instance, nrfx_uarte_config_t const * p_config) { if (p_config->pseltxd != NRF_UARTE_PSEL_DISCONNECTED) { nrf_gpio_pin_set(p_config->pseltxd); nrf_gpio_cfg_output(p_config->pseltxd); } if (p_config->pselrxd != NRF_UARTE_PSEL_DISCONNECTED) { nrf_gpio_cfg_input(p_config->pselrxd, NRF_GPIO_PIN_NOPULL); } nrf_uarte_baudrate_set(p_instance->p_reg, p_config->baudrate); nrf_uarte_configure(p_instance->p_reg, p_config->parity, p_config->hwfc); nrf_uarte_txrx_pins_set(p_instance->p_reg, p_config->pseltxd, p_config->pselrxd); if (p_config->hwfc == NRF_UARTE_HWFC_ENABLED) { if (p_config->pselcts != NRF_UARTE_PSEL_DISCONNECTED) { nrf_gpio_cfg_input(p_config->pselcts, NRF_GPIO_PIN_NOPULL); } if (p_config->pselrts != NRF_UARTE_PSEL_DISCONNECTED) { nrf_gpio_pin_set(p_config->pselrts); nrf_gpio_cfg_output(p_config->pselrts); } nrf_uarte_hwfc_pins_set(p_instance->p_reg, p_config->pselrts, p_config->pselcts); } }
__STATIC_INLINE void apply_config(nrf_drv_uart_config_t const * p_config) { nrf_gpio_cfg_output(p_config->pseltxd); nrf_gpio_pin_set(p_config->pseltxd); nrf_gpio_cfg_input(p_config->pselrxd, NRF_GPIO_PIN_NOPULL); CODE_FOR_UARTE( nrf_uarte_baudrate_set(NRF_UARTE0, (nrf_uarte_baudrate_t)p_config->baudrate); nrf_uarte_configure(NRF_UARTE0, (nrf_uarte_parity_t)p_config->parity, (nrf_uarte_hwfc_t)p_config->hwfc); nrf_uarte_txrx_pins_set(NRF_UARTE0, p_config->pseltxd, p_config->pselrxd); if (p_config->hwfc == NRF_UART_HWFC_ENABLED) { nrf_gpio_cfg_output(p_config->pselrts); nrf_gpio_pin_set(p_config->pselrts); nrf_gpio_cfg_input(p_config->pselcts, NRF_GPIO_PIN_NOPULL); nrf_uarte_hwfc_pins_set(NRF_UARTE0, p_config->pselrts, p_config->pselcts); } )
static int uarte_instance_init(struct device *dev, const struct uarte_init_config *config, u8_t interrupts_active) { int err; NRF_UARTE_Type *uarte = get_uarte_instance(dev); struct uarte_nrfx_data *data = get_dev_data(dev); nrf_gpio_pin_write(config->pseltxd, 1); nrf_gpio_cfg_output(config->pseltxd); nrf_gpio_cfg_input(config->pselrxd, NRF_GPIO_PIN_NOPULL); nrf_uarte_txrx_pins_set(uarte, config->pseltxd, config->pselrxd); if (config->hwfc == NRF_UARTE_HWFC_ENABLED) { nrf_gpio_pin_write(config->pselrts, 1); nrf_gpio_cfg_output(config->pselrts); nrf_gpio_cfg_input(config->pselcts, NRF_GPIO_PIN_NOPULL); nrf_uarte_hwfc_pins_set(uarte, config->pselrts, config->pselcts); } /* Configure flow control and parity checking */ nrf_uarte_configure(uarte, config->parity, config->hwfc); err = baudrate_set(dev, config->baudrate); if (err) { return err; } /* Enable receiver and transmitter */ nrf_uarte_enable(uarte); nrf_uarte_event_clear(uarte, NRF_UARTE_EVENT_ENDRX); nrf_uarte_rx_buffer_set(uarte, &data->rx_data, 1); nrf_uarte_task_trigger(uarte, NRF_UARTE_TASK_STARTRX); #if UARTE_INTERRUPT_DRIVEN if (interrupts_active) { /* Set ENDTX event by requesting fake (zero-length) transfer. * Pointer to RAM variable (data->tx_buffer) is set because * otherwise such operation may result in HardFault or RAM * corruption. */ nrf_uarte_tx_buffer_set(uarte, data->tx_buffer, 0); nrf_uarte_task_trigger(uarte, NRF_UARTE_TASK_STARTTX); /* switch off transmitter to save an energy */ nrf_uarte_task_trigger(uarte, NRF_UARTE_TASK_STOPTX); } #endif /* UARTE_INTERRUPT_DRIVEN */ return 0; }