void nrf5MiscInit(void) { #if SOFTDEVICE_PRESENT sd_power_reset_reason_get(&sResetReason); sd_power_reset_reason_clr(0xFFFFFFFF); #else sResetReason = NRF_POWER->RESETREAS; NRF_POWER->RESETREAS = 0xFFFFFFFF; #endif // SOFTDEVICE_PRESENT }
void serial_handler_init(void) { has_pending_tx = false; /* init packet queues */ tx_fifo.array_len = SERIAL_QUEUE_SIZE; tx_fifo.elem_array = tx_fifo_buffer; tx_fifo.elem_size = sizeof(serial_data_t); tx_fifo.memcpy_fptr = NULL; fifo_init(&tx_fifo); rx_fifo.array_len = SERIAL_QUEUE_SIZE; rx_fifo.elem_array = rx_fifo_buffer; rx_fifo.elem_size = sizeof(serial_data_t); rx_fifo.memcpy_fptr = NULL; fifo_init(&rx_fifo); nrf_gpio_cfg_output(PIN_RDYN); nrf_gpio_pin_set(PIN_RDYN); serial_state = SERIAL_STATE_IDLE; spi_slave_config_t spi_config; spi_config.bit_order = SPIM_LSB_FIRST; spi_config.mode = SPI_MODE_0; spi_config.def_tx_character = 0; spi_config.orc_tx_character = 0; spi_config.pin_csn = PIN_CSN; spi_config.pin_miso = PIN_MISO; spi_config.pin_mosi = PIN_MOSI; spi_config.pin_sck = PIN_SCK; APP_ERROR_CHECK(spi_slave_init(&spi_config)); APP_ERROR_CHECK(spi_slave_evt_handler_register(spi_event_handler)); gpiote_init(); /* set initial buffers, dummy in tx */ //prepare_rx(); #if 1 /* notify application controller of the restart */ serial_evt_t started_event; started_event.length = 4; started_event.opcode = SERIAL_EVT_OPCODE_DEVICE_STARTED; started_event.params.device_started.operating_mode = OPERATING_MODE_STANDBY; uint32_t reset_reason; sd_power_reset_reason_get(&reset_reason); started_event.params.device_started.hw_error = !!(reset_reason & (1 << 3)); started_event.params.device_started.data_credit_available = SERIAL_QUEUE_SIZE; if (!serial_handler_event_send(&started_event)) { APP_ERROR_CHECK(NRF_ERROR_INTERNAL); } #endif }