Contiki-NG
uarte-arch.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2020 Yago Fontoura do Rosario <yago.rosario@hotmail.com.br>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the copyright holder nor the names of its
14  * contributors may be used to endorse or promote products derived
15  * from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28  * OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 /*---------------------------------------------------------------------------*/
31 /**
32  * \addtogroup nrf
33  * @{
34  *
35  * \addtogroup nrf-dev Device drivers
36  * @{
37  *
38  * \addtogroup nrf-uarte UARTE driver
39  * @{
40  *
41  * \file
42  * UARTE implementation for the nRF.
43  * \author
44  * Yago Fontoura do Rosario <yago.rosario@hotmail.com.br>
45  *
46  */
47 /*---------------------------------------------------------------------------*/
48 #include "contiki.h"
49 /*---------------------------------------------------------------------------*/
50 #if PLATFORM_HAS_UARTE
51 /*---------------------------------------------------------------------------*/
52 #include "nrfx_config.h"
53 #include "nrfx_uarte.h"
54 #include "hal/nrf_gpio.h"
55 /*---------------------------------------------------------------------------*/
56 static int (*input_handler)(unsigned char c) = NULL;
57 #define NRF_UARTE0_TX NRF_GPIO_PIN_MAP(NRF_UARTE0_TX_PORT, NRF_UARTE0_TX_PIN)
58 #define NRF_UARTE0_RX NRF_GPIO_PIN_MAP(NRF_UARTE0_RX_PORT, NRF_UARTE0_RX_PIN)
59 /*---------------------------------------------------------------------------*/
60 static nrfx_uarte_t instance = NRFX_UARTE_INSTANCE(0);
61 static nrfx_uarte_config_t config = NRFX_UARTE_DEFAULT_CONFIG(NRF_UARTE0_TX, NRF_UARTE0_RX);
62 static uint8_t uarte_buffer;
63 /*---------------------------------------------------------------------------*/
64 void
65 uarte_write(unsigned char data)
66 {
67  do {
68  } while(nrfx_uarte_tx_in_progress(&instance));
69  nrfx_uarte_tx(&instance, &data, sizeof(data));
70 }
71 /*---------------------------------------------------------------------------*/
72 /**
73  * @brief UARTE event handler
74  *
75  * @param p_event UARTE event
76  * @param p_context UARTE context
77  */
78 static void
79 uarte_handler(nrfx_uarte_event_t const *p_event, void *p_context)
80 {
81  uint8_t *p_data;
82  size_t bytes;
83  size_t i;
84 
85  /* Don't spend time in interrupt if the input_handler is not set */
86  if(p_event->type == NRFX_UARTE_EVT_RX_DONE) {
87  if(input_handler) {
88  p_data = p_event->data.rxtx.p_data;
89  bytes = p_event->data.rxtx.bytes;
90  for(i = 0; i < bytes; i++) {
91  input_handler(p_data[i]);
92  }
93  nrfx_uarte_rx(&instance, &uarte_buffer, sizeof(uarte_buffer));
94  }
95  }
96 }
97 /*---------------------------------------------------------------------------*/
98 void
99 uarte_set_input(int (*input)(unsigned char c))
100 {
101  input_handler = input;
102 
103  if(input) {
104  nrfx_uarte_rx(&instance, &uarte_buffer, sizeof(uarte_buffer));
105  }
106 }
107 /*---------------------------------------------------------------------------*/
108 void
109 uarte_init(void)
110 {
111  nrfx_uarte_init(&instance, &config, uarte_handler);
112 }
113 /*---------------------------------------------------------------------------*/
114 #endif /* PLATFORM_HAS_UARTE */
115 /*---------------------------------------------------------------------------*/
116 /**
117  * @}
118  * @}
119  * @}
120  */
void uarte_init(void)
Initializa the UARTE driver.
void uarte_write(unsigned char data)
Writes to the UARTE driver.
static int config(int type, int c, nrf_drv_gpiote_pin_t pin)
Configuration function for the button sensor for all buttons.
void uarte_set_input(int(*input)(unsigned char c))
Sets the input handler called in the event handler.
static void input(void)
Process a received 6lowpan packet.
Definition: sicslowpan.c:1847