/** * @brief Function for application main entry. */ int main(void) { uint32_t err_code; // Configure LED-pins as outputs nrf_gpio_cfg_output(LED_0); nrf_gpio_cfg_output(LED_1); nrf_gpio_cfg_sense_input(BUTTON_0, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW); APP_GPIOTE_INIT(APP_GPIOTE_MAX_USERS); err_code = app_gpiote_user_register(&m_app_gpiote_my_id, (1 << BUTTON_0), (1 << BUTTON_0), gpiote_event_handler); APP_ERROR_CHECK(err_code); err_code = app_gpiote_user_enable(m_app_gpiote_my_id); APP_ERROR_CHECK(err_code); while(true) { nrf_gpio_pin_set(LED_1); nrf_delay_ms(500); nrf_gpio_pin_clear(LED_1); nrf_delay_ms(500); } }
uint32_t app_button_enable(void) { if (mp_buttons == NULL) { return NRF_ERROR_INVALID_STATE; } return app_gpiote_user_enable(m_gpiote_user_id); }
uint32_t app_uart_init(const app_uart_comm_params_t * p_comm_params, app_uart_buffers_t * p_buffers, app_uart_event_handler_t event_handler, app_irq_priority_t irq_priority) { uint32_t err_code; uint32_t gpiote_high_pins; uint32_t gpiote_pin_low_high_mask = 0; uint32_t gpiote_pin_high_low_mask = 0; m_current_state = UART_OFF; m_event_handler = event_handler; // Configure buffer RX buffer. err_code = app_fifo_init(&m_rx_fifo, p_buffers->rx_buf, p_buffers->rx_buf_size); if (err_code != NRF_SUCCESS) { // Propagate error code. return err_code; } // Configure buffer TX buffer. err_code = app_fifo_init(&m_tx_fifo, p_buffers->tx_buf, p_buffers->tx_buf_size); if (err_code != NRF_SUCCESS) { // Propagate error code. return err_code; } // Configure RX and TX pins. nrf_gpio_cfg_output(p_comm_params->tx_pin_no); nrf_gpio_cfg_input(p_comm_params->rx_pin_no, NRF_GPIO_PIN_NOPULL); NRF_UART0->PSELTXD = p_comm_params->tx_pin_no; NRF_UART0->PSELRXD = p_comm_params->rx_pin_no; // Configure baud rate and parity. NRF_UART0->BAUDRATE = (p_comm_params->baud_rate << UART_BAUDRATE_BAUDRATE_Pos); if (p_comm_params->use_parity) { NRF_UART0->CONFIG = (UART_CONFIG_PARITY_Included << UART_CONFIG_PARITY_Pos); } else { NRF_UART0->CONFIG = (UART_CONFIG_PARITY_Excluded << UART_CONFIG_PARITY_Pos); } if (p_comm_params->use_hardware_flow_control) { // Configure hardware flow control. nrf_gpio_cfg_output(p_comm_params->rts_pin_no); NRF_GPIO->OUT = 1 << p_comm_params->rts_pin_no; NRF_UART0->PSELCTS = UART_PIN_DISCONNECTED; NRF_UART0->PSELRTS = p_comm_params->rts_pin_no; NRF_UART0->CONFIG |= (UART_CONFIG_HWFC_Enabled << UART_CONFIG_HWFC_Pos); // Setup the gpiote to handle pin events on cts-pin. // For the UART we want to detect both low->high and high->low transistions in order to // know when to activate/deactivate the TX/RX in the UART. // Configure pin. m_pin_cts_mask = (1 << p_comm_params->cts_pin_no); GPIO_PIN_CONFIG(p_comm_params->cts_pin_no, GPIO_PIN_CNF_DIR_Input, GPIO_PIN_CNF_INPUT_Connect, GPIO_PIN_CNF_PULL_Disabled, GPIO_PIN_CNF_DRIVE_S0S1, GPIO_PIN_CNF_SENSE_Low); gpiote_pin_low_high_mask = (1 << p_comm_params->cts_pin_no); gpiote_pin_high_low_mask = (1 << p_comm_params->cts_pin_no); err_code = app_gpiote_user_register(&m_gpiote_uid, gpiote_pin_low_high_mask, gpiote_pin_high_low_mask, gpiote_uart_event_handler); if (err_code != NRF_SUCCESS) { return err_code; } err_code = app_gpiote_pins_state_get(m_gpiote_uid, &gpiote_high_pins); if (err_code != NRF_SUCCESS) { return err_code; } err_code = app_gpiote_user_enable(m_gpiote_uid); if (err_code != NRF_SUCCESS) { return err_code; } // UART CTS pin is active when low. if ((gpiote_high_pins & (1 << p_comm_params->cts_pin_no)) == 0) { on_uart_event(ON_CTS_LOW); } else { on_uart_event(ON_CTS_HIGH); } } else { uart_no_flow_control_init(); m_current_state = UART_READY; } // Enable UART interrupt NRF_UART0->INTENCLR = 0xffffffffUL; NRF_UART0->INTENSET = (UART_INTENSET_RXDRDY_Set << UART_INTENSET_RXDRDY_Pos) | (UART_INTENSET_TXDRDY_Set << UART_INTENSET_TXDRDY_Pos) | (UART_INTENSET_ERROR_Set << UART_INTENSET_ERROR_Pos); NVIC_ClearPendingIRQ(UART0_IRQn); NVIC_SetPriority(UART0_IRQn, irq_priority); NVIC_EnableIRQ(UART0_IRQn); return NRF_SUCCESS; }