static void pins_to_default(nrfx_uart_t const * p_instance) { /* Reset pins to default states */ uint32_t txd; uint32_t rxd; uint32_t rts; uint32_t cts; txd = nrf_uart_tx_pin_get(p_instance->p_reg); rxd = nrf_uart_rx_pin_get(p_instance->p_reg); rts = nrf_uart_rts_pin_get(p_instance->p_reg); cts = nrf_uart_cts_pin_get(p_instance->p_reg); nrf_uart_txrx_pins_disconnect(p_instance->p_reg); nrf_uart_hwfc_pins_disconnect(p_instance->p_reg); if (txd != NRF_UART_PSEL_DISCONNECTED) { nrf_gpio_cfg_default(txd); } if (rxd != NRF_UART_PSEL_DISCONNECTED) { nrf_gpio_cfg_default(rxd); } if (cts != NRF_UART_PSEL_DISCONNECTED) { nrf_gpio_cfg_default(cts); } if (rts != NRF_UART_PSEL_DISCONNECTED) { nrf_gpio_cfg_default(rts); } }
// Set the pin state void jshPinSetState(Pin pin, JshPinState state) { /* Make sure we kill software PWM if we set the pin state * after we've started it */ if (BITFIELD_GET(jshPinSoftPWM, pin)) { BITFIELD_SET(jshPinSoftPWM, pin, 0); jstPinPWM(0,0,pin); } uint32_t ipin = (uint32_t)pinInfo[pin].pin; switch (state) { case JSHPINSTATE_UNDEFINED : nrf_gpio_cfg_default(ipin); break; case JSHPINSTATE_GPIO_OUT : nrf_gpio_cfg_output(ipin); break; case JSHPINSTATE_GPIO_OUT_OPENDRAIN : NRF_GPIO->PIN_CNF[ipin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); break; case JSHPINSTATE_GPIO_IN : nrf_gpio_cfg_input(ipin, NRF_GPIO_PIN_NOPULL); break; case JSHPINSTATE_GPIO_IN_PULLUP : nrf_gpio_cfg_input(ipin, NRF_GPIO_PIN_PULLUP); break; case JSHPINSTATE_GPIO_IN_PULLDOWN : nrf_gpio_cfg_input(ipin, NRF_GPIO_PIN_PULLDOWN); break; /*case JSHPINSTATE_ADC_IN : break; case JSHPINSTATE_AF_OUT : break; case JSHPINSTATE_AF_OUT_OPENDRAIN : break; case JSHPINSTATE_USART_IN : break; case JSHPINSTATE_USART_OUT : break; case JSHPINSTATE_DAC_OUT : break;*/ case JSHPINSTATE_I2C : NRF_GPIO->PIN_CNF[ipin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos); // may need to be set to GPIO_PIN_CNF_DIR_Output as well depending on I2C state? break; default : assert(0); break; } }
// Set the pin state void jshPinSetState(Pin pin, JshPinState state) { uint32_t ipin = (uint32_t)pinInfo[pin].pin; switch (state) { case JSHPINSTATE_UNDEFINED : nrf_gpio_cfg_default(ipin); break; case JSHPINSTATE_GPIO_OUT : nrf_gpio_cfg_output(ipin); break; case JSHPINSTATE_GPIO_OUT_OPENDRAIN : NRF_GPIO->PIN_CNF[ipin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); break; case JSHPINSTATE_GPIO_IN : nrf_gpio_cfg_input(ipin, NRF_GPIO_PIN_NOPULL); break; case JSHPINSTATE_GPIO_IN_PULLUP : nrf_gpio_cfg_input(ipin, NRF_GPIO_PIN_PULLUP); break; case JSHPINSTATE_GPIO_IN_PULLDOWN : nrf_gpio_cfg_input(ipin, NRF_GPIO_PIN_PULLDOWN); break; /*case JSHPINSTATE_ADC_IN : break; case JSHPINSTATE_AF_OUT : break; case JSHPINSTATE_AF_OUT_OPENDRAIN : break; case JSHPINSTATE_USART_IN : break; case JSHPINSTATE_USART_OUT : break; case JSHPINSTATE_DAC_OUT : break;*/ case JSHPINSTATE_I2C : NRF_GPIO->PIN_CNF[ipin] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos); // may need to be set to GPIO_PIN_CNF_DIR_Output as well depending on I2C state? break; default : assert(0); break; } }
void nrfx_twim_uninit(nrfx_twim_t const * p_instance) { twim_control_block_t * p_cb = &m_cb[p_instance->drv_inst_idx]; NRFX_ASSERT(p_cb->state != NRFX_DRV_STATE_UNINITIALIZED); if (p_cb->handler) { NRFX_IRQ_DISABLE(nrfx_get_irq_number(p_instance->p_twim)); } nrfx_twim_disable(p_instance); #if NRFX_CHECK(NRFX_PRS_ENABLED) nrfx_prs_release(p_instance->p_twim); #endif if (!p_cb->hold_bus_uninit) { nrf_gpio_cfg_default(p_instance->p_twim->PSEL.SCL); nrf_gpio_cfg_default(p_instance->p_twim->PSEL.SDA); } p_cb->state = NRFX_DRV_STATE_UNINITIALIZED; NRFX_LOG_INFO("Instance uninitialized: %d.", p_instance->drv_inst_idx); }
/** * @brief Function for main application entry. */ int main(void) { ret_code_t ret_code; nrf_gpio_cfg_output(LED_1); nrf_gpio_pin_set(LED_1); nrf_gpio_cfg_output(LED_2); nrf_gpio_pin_set(LED_2); uart_config(); printf("\033[2J\033[;H\r\n* Example to find TWI devices connected to \r\n* the TWI bus and their addresses\r\n\r\n"); twi_init(); uint8_t dummy_data = 0x55; // Itterate through all possible 7-bit TWI addresses for(uint8_t i = 0; i <= 0x7F; i++) { device_address = i; // Send dummy data. If a device is present on this particular address a TWI EVT_DONE event is // received in the twi event handler and a message is printed to UART ret_code = nrf_drv_twi_tx(&twi_instance, i, &dummy_data, 1, false); APP_ERROR_CHECK(ret_code); // Delay 10 ms to allow TWI transfer to complete and UART to print messages before starting new transfer nrf_delay_ms(10); } if(device_found) { // Blinke LED_1 rapidly if device is found while(true) { nrf_gpio_pin_toggle(LED_1); nrf_delay_ms(1000); } } else { // Disable LED_1 if device is NOT found nrf_gpio_cfg_default(LED_1); printf("*****************\n\rNO DEVICES FOUND!\r\n*****************\n\r"); while(true) { nrf_gpio_pin_toggle(LED_2); nrf_delay_ms(100);; } } }
void nrf_utils_gpio_pin_set_state(uint32_t pin, uint32_t state) { switch (state) { case 0 : nrf_gpio_cfg_default(pin); break; case 1 : nrf_gpio_cfg_output(pin); break; case 2 : nrf_gpio_cfg_output(pin); break; case 3 : nrf_gpio_cfg_input(pin, NRF_GPIO_PIN_NOPULL); break; case 4 : nrf_gpio_cfg_input(pin, NRF_GPIO_PIN_PULLUP); break; case 5 : nrf_gpio_cfg_input(pin, NRF_GPIO_PIN_PULLDOWN); break; case 6 : break; case 7 : break; case 8 : break; case 9 : break; case 10 : break; case 11 : break; case 12 : break; case 13 ://wrong... break; case 14 : //wrong... break; default : break; } }
void jswrap_microbit_stopDisplay() { if (microbitLEDState) { jstStopExecuteFn(jswrap_microbit_display_callback); microbitLEDState = 0; nrf_gpio_cfg_default(MB_LED_COL1); nrf_gpio_cfg_default(MB_LED_COL2); nrf_gpio_cfg_default(MB_LED_COL3); nrf_gpio_cfg_default(MB_LED_COL4); nrf_gpio_cfg_default(MB_LED_COL5); nrf_gpio_cfg_default(MB_LED_COL6); nrf_gpio_cfg_default(MB_LED_COL7); nrf_gpio_cfg_default(MB_LED_COL8); nrf_gpio_cfg_default(MB_LED_COL9); nrf_gpio_cfg_default(MB_LED_ROW1); nrf_gpio_cfg_default(MB_LED_ROW2); nrf_gpio_cfg_default(MB_LED_ROW3); } }