libopencm3
A free/libre/open-source firmware library for various ARM Cortex-M3 microcontrollers.
usart_common_all.c
Go to the documentation of this file.
1/*
2 * This file is part of the libopencm3 project.
3 *
4 * Copyright (C) 2013 Gareth McMullin <gareth@blacksphere.co.nz>
5 *
6 * This library is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This library 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 Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this library. If not, see <http://www.gnu.org/licenses/>.
18 */
19
21
22void usart_set_databits(uint32_t usart, int bits)
23{
24 USART_MR(usart) = (USART_MR(usart) & ~USART_MR_CHRL_MASK) |
25 ((bits - 5) << 6);
26}
27
28void usart_set_stopbits(uint32_t usart, enum usart_stopbits sb)
29{
30 USART_MR(usart) = (USART_MR(usart) & ~USART_MR_NBSTOP_MASK) |
31 (sb << 12);
32}
33
34void usart_set_parity(uint32_t usart, enum usart_parity par)
35{
36 USART_MR(usart) = (USART_MR(usart) & ~USART_MR_PAR_MASK) | (par << 9);
37}
38
39void usart_set_mode(uint32_t usart, enum usart_mode mode)
40{
41 USART_CR(usart) =
43 USART_CR(usart) = (mode & USART_MODE_TX) ? USART_CR_TXEN
45}
46
47void usart_set_flow_control(uint32_t usart, enum usart_flowcontrol fc)
48{
49 USART_MR(usart) = (USART_MR(usart) & ~USART_MR_MODE_MASK) |
51}
52
53void usart_enable(uint32_t usart)
54{
56}
57
58void usart_disable(uint32_t usart)
59{
61}
62
63void usart_send(uint32_t usart, uint16_t data)
64{
65 USART_THR(usart) = data;
66}
67
68uint16_t usart_recv(uint32_t usart)
69{
70 return USART_RHR(usart) & 0x1f;
71}
72
73void usart_wait_send_ready(uint32_t usart)
74{
75 while ((USART_CSR(usart) & USART_CSR_TXRDY) == 0);
76}
77
78void usart_wait_recv_ready(uint32_t usart)
79{
80 while ((USART_CSR(usart) & USART_CSR_RXRDY) == 0);
81}
82
83void usart_send_blocking(uint32_t usart, uint16_t data)
84{
86 usart_send(usart, data);
87}
88
89uint16_t usart_recv_blocking(uint32_t usart)
90{
92
93 return usart_recv(usart);
94}
95
96void usart_enable_rx_interrupt(uint32_t usart)
97{
99}
100
101void usart_disable_rx_interrupt(uint32_t usart)
102{
103 USART_IDR(usart) = USART_CSR_RXRDY;
104}
105
106void usart_wp_enable(uint32_t usart)
107{
109}
110
111void usart_wp_disable(uint32_t usart)
112{
113 USART_WPMR(usart) = USART_WPMR_KEY & (~USART_WPMR_WPEN);
114}
115
116void usart_select_clock(uint32_t usart, enum usart_clock clk)
117{
118 uint32_t reg_mr = USART_MR(usart) & (~USART_MR_USCLKS_MASK);
119 USART_MR(usart) = ((clk << USART_MR_USCLKS_SHIFT) & USART_MR_USCLKS_MASK) | reg_mr;
120}
121
122void usart_set_character_length(uint32_t usart, enum usart_chrl chrl)
123{
124 uint32_t reg_mr = USART_MR(usart) & (~USART_MR_CHRL_MASK);
125 USART_MR(usart) = reg_mr | (chrl << USART_MR_CHRL_SHIFT);
126}
#define USART_RHR(x)
Definition: usart.h:38
#define USART_CR(x)
Definition: usart.h:32
#define USART_CR_TXEN
Definition: usart.h:77
usart_mode
Definition: usart.h:191
@ USART_MODE_RX
Definition: usart.h:193
@ USART_MODE_TX
Definition: usart.h:194
#define USART_IER(x)
Definition: usart.h:34
#define USART_MR_USCLKS_MASK
Definition: usart.h:126
usart_clock
Definition: usart.h:203
#define USART_CR_RXEN
Definition: usart.h:79
#define USART_MR_USCLKS_SHIFT
Definition: usart.h:125
#define USART_CR_RXDIS
Definition: usart.h:78
usart_parity
Definition: usart.h:182
#define USART_WPMR_WPEN
Definition: usart.h:174
#define USART_CSR_TXRDY
Definition: usart.h:170
#define USART_WPMR_KEY
Definition: usart.h:173
#define USART_CR_TXDIS
Definition: usart.h:76
#define USART_IDR(x)
Definition: usart.h:35
usart_stopbits
Definition: usart.h:176
#define USART_MR(x)
Definition: usart.h:33
#define USART_CSR(x)
Definition: usart.h:37
#define USART_MR_CHRL_SHIFT
Definition: usart.h:119
#define USART_WPMR(x)
Definition: usart.h:52
#define USART_MR_MODE_HW_HANDSHAKING
Definition: usart.h:133
#define USART_CSR_RXRDY
Definition: usart.h:171
#define USART_THR(x)
Definition: usart.h:39
usart_chrl
Definition: usart.h:209
usart_flowcontrol
Definition: usart.h:198
void usart_set_flow_control(uint32_t usart, enum usart_flowcontrol fc)
uint16_t usart_recv(uint32_t usart)
void usart_send(uint32_t usart, uint16_t data)
void usart_set_mode(uint32_t usart, enum usart_mode mode)
void usart_wait_recv_ready(uint32_t usart)
void usart_wp_disable(uint32_t usart)
void usart_set_character_length(uint32_t usart, enum usart_chrl chrl)
void usart_wait_send_ready(uint32_t usart)
void usart_disable_rx_interrupt(uint32_t usart)
void usart_disable(uint32_t usart)
void usart_set_databits(uint32_t usart, int bits)
void usart_wp_enable(uint32_t usart)
void usart_set_parity(uint32_t usart, enum usart_parity par)
uint16_t usart_recv_blocking(uint32_t usart)
void usart_enable_rx_interrupt(uint32_t usart)
void usart_enable(uint32_t usart)
void usart_set_stopbits(uint32_t usart, enum usart_stopbits sb)
void usart_select_clock(uint32_t usart, enum usart_clock clk)
void usart_send_blocking(uint32_t usart, uint16_t data)