Paparazzi UAS  v6.2_unstable
Paparazzi is a free software Unmanned Aircraft System.
uart.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2010 The Paparazzi Team
3  *
4  * This file is part of paparazzi.
5  *
6  * paparazzi is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * paparazzi is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with paparazzi; see the file COPYING. If not, write to
18  * the Free Software Foundation, 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  *
21  */
22 
28 #ifndef MCU_PERIPH_UART_H
29 #define MCU_PERIPH_UART_H
30 
31 #include "mcu_periph/uart_arch.h"
32 #include "pprzlink/pprzlink_device.h"
33 #include "std.h"
34 
35 #ifndef UART_RX_BUFFER_SIZE
36 // Only for the STM32F1 less buffer
37 #if defined(STM32F1)
38 #define UART_RX_BUFFER_SIZE 128
39 #else
40 #define UART_RX_BUFFER_SIZE 256
41 #endif
42 #endif
43 
44 #ifndef UART_TX_BUFFER_SIZE
45 // Only for the STM32F1 less buffer
46 #if defined(STM32F1)
47 #define UART_TX_BUFFER_SIZE 128
48 #else
49 #define UART_TX_BUFFER_SIZE 256
50 #endif
51 #endif
52 
53 #define UART_DEV_NAME_SIZE 16
54 
55 /*
56  * UART Baud rate defines in arch/x/mcu_periph/uart_arch.h
57  */
58 
59 #define UBITS_7 7
60 #define UBITS_8 8
61 
62 #define USTOP_1 1
63 #define USTOP_2 2
64 
65 #define UPARITY_NO 0
66 #define UPARITY_ODD 1
67 #define UPARITY_EVEN 2
68 
72 struct uart_periph {
81  volatile uint8_t tx_running;
83  void *reg_addr;
85  int baudrate;
87  void *init_struct;
90  volatile uint16_t ore;
91  volatile uint16_t ne_err;
92  volatile uint16_t fe_err;
93 
94  struct link_device device;
95 };
96 
97 
98 extern void uart_periph_init(struct uart_periph *p);
99 extern void uart_periph_set_baudrate(struct uart_periph *p, uint32_t baud);
100 extern void uart_periph_set_bits_stop_parity(struct uart_periph *p, uint8_t bits, uint8_t stop, uint8_t parity);
101 extern void uart_periph_set_mode(struct uart_periph *p, bool tx_enabled, bool rx_enabled, bool hw_flow_control);
102 extern void uart_periph_invert_data_logic(struct uart_periph *p, bool invert_rx, bool invert_tx);
103 extern void uart_put_byte(struct uart_periph *p, long fd, uint8_t data);
104 extern void uart_put_buffer(struct uart_periph *p, long fd, const uint8_t *data, uint16_t len);
105 extern int uart_check_free_space(struct uart_periph *p, long *fd, uint16_t len);
106 extern void uart_send_message(struct uart_periph *p, long fd);
107 extern uint8_t uart_getch(struct uart_periph *p);
108 
113 extern int uart_char_available(struct uart_periph *p);
114 
115 
116 extern void uart_arch_init(void);
117 
118 #if USE_UART0
119 extern struct uart_periph uart0;
120 extern void uart0_init(void);
121 #endif // USE_UART0
122 
123 #if USE_UART1
124 extern struct uart_periph uart1;
125 extern void uart1_init(void);
126 #endif // USE_UART1
127 
128 #if USE_UART2
129 extern struct uart_periph uart2;
130 extern void uart2_init(void);
131 #endif // USE_UART2
132 
133 #if USE_UART3
134 extern struct uart_periph uart3;
135 extern void uart3_init(void);
136 #endif // USE_UART3
137 
138 #if USE_UART4
139 extern struct uart_periph uart4;
140 extern void uart4_init(void);
141 #endif // USE_UART4
142 
143 #if USE_UART5
144 extern struct uart_periph uart5;
145 extern void uart5_init(void);
146 #endif // USE_UART5
147 
148 #if USE_UART6
149 extern struct uart_periph uart6;
150 extern void uart6_init(void);
151 #endif // USE_UART6
152 
153 #if USE_UART7
154 extern struct uart_periph uart7;
155 extern void uart7_init(void);
156 #endif // USE_UART7
157 
158 #if USE_UART8
159 extern struct uart_periph uart8;
160 extern void uart8_init(void);
161 #endif // USE_UART8
162 
163 #endif /* MCU_PERIPH_UART_H */
uart_periph::rx_extract_idx
uint16_t rx_extract_idx
Definition: uart.h:76
uart_arch_init
void uart_arch_init(void)
Definition: uart_arch.c:54
uint32_t
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
Definition: vl53l1_types.h:78
uint8_t
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.
Definition: vl53l1_types.h:98
uart_periph_init
void uart_periph_init(struct uart_periph *p)
Definition: uart.c:231
UART_RX_BUFFER_SIZE
#define UART_RX_BUFFER_SIZE
Definition: uart.h:40
uart_periph::tx_running
volatile uint8_t tx_running
Definition: uart.h:81
uart_periph::rx_insert_idx
uint16_t rx_insert_idx
Definition: uart.h:75
uart_periph::rx_buf
uint8_t rx_buf[UART_RX_BUFFER_SIZE]
Receive buffer.
Definition: uart.h:74
uart_periph::dev
char dev[UART_DEV_NAME_SIZE]
UART Dev (linux)
Definition: uart.h:89
uart_periph::tx_extract_idx
uint16_t tx_extract_idx
Definition: uart.h:80
uart_periph_invert_data_logic
void uart_periph_invert_data_logic(struct uart_periph *p, bool invert_rx, bool invert_tx)
Definition: uart.c:299
std.h
uart_periph::baudrate
int baudrate
UART Baudrate.
Definition: uart.h:85
uart_periph::init_struct
void * init_struct
User init struct.
Definition: uart.h:87
uart_send_message
void uart_send_message(struct uart_periph *p, long fd)
Definition: uart_arch.c:1153
uart_periph_set_baudrate
void uart_periph_set_baudrate(struct uart_periph *p, uint32_t baud)
Set baudrate.
Definition: uart_arch.c:984
UART_DEV_NAME_SIZE
#define UART_DEV_NAME_SIZE
Definition: uart.h:53
fd
int fd
Definition: serial.c:26
uart_periph::ore
volatile uint16_t ore
overrun error counter
Definition: uart.h:90
UART_TX_BUFFER_SIZE
#define UART_TX_BUFFER_SIZE
Definition: uart.h:49
uart_periph
UART peripheral.
Definition: uart.h:72
uart_periph::tx_buf
uint8_t tx_buf[UART_TX_BUFFER_SIZE]
Transmit buffer.
Definition: uart.h:78
uart_char_available
int uart_char_available(struct uart_periph *p)
Check UART for available chars in receive buffer.
Definition: uart_arch.c:323
uart_put_buffer
void uart_put_buffer(struct uart_periph *p, long fd, const uint8_t *data, uint16_t len)
Uart transmit buffer implementation.
Definition: uart_arch.c:1123
uart_periph::tx_insert_idx
uint16_t tx_insert_idx
Definition: uart.h:79
uart_check_free_space
int uart_check_free_space(struct uart_periph *p, long *fd, uint16_t len)
Definition: uart_arch.c:1078
uart_periph_set_bits_stop_parity
void uart_periph_set_bits_stop_parity(struct uart_periph *p, uint8_t bits, uint8_t stop, uint8_t parity)
Set parity and stop bits.
Definition: uart_arch.c:1014
uart_periph::ne_err
volatile uint16_t ne_err
noise error counter
Definition: uart.h:91
uart_periph::fe_err
volatile uint16_t fe_err
framing error counter
Definition: uart.h:92
uint16_t
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
Definition: vl53l1_types.h:88
uart_getch
uint8_t uart_getch(struct uart_periph *p)
Definition: uart_arch.c:968
uart_periph::reg_addr
void * reg_addr
UART Register.
Definition: uart.h:83
p
static float p[2][2]
Definition: ins_alt_float.c:268
uart_put_byte
void uart_put_byte(struct uart_periph *p, long fd, uint8_t data)
Uart transmit implementation.
Definition: uart_arch.c:1096
uart_periph::device
struct link_device device
Generic device interface.
Definition: uart.h:94
uart_periph_set_mode
void uart_periph_set_mode(struct uart_periph *p, bool tx_enabled, bool rx_enabled, bool hw_flow_control)
Set mode (not necessary, or can be set by SerialConfig)
Definition: uart_arch.c:999