summaryrefslogtreecommitdiff
path: root/os/drivers/uart/stm32f7_uart.c
diff options
context:
space:
mode:
Diffstat (limited to 'os/drivers/uart/stm32f7_uart.c')
-rw-r--r--os/drivers/uart/stm32f7_uart.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/os/drivers/uart/stm32f7_uart.c b/os/drivers/uart/stm32f7_uart.c
index 2acb038e..76f67ae9 100644
--- a/os/drivers/uart/stm32f7_uart.c
+++ b/os/drivers/uart/stm32f7_uart.c
@@ -25,6 +25,7 @@ inline static void __uart_enable(struct device *dev) {
int stm32f7_uart_init(struct device *dev) {
USART_TypeDef *p = dev->devptr;
stm32f7_uart_deinit(dev);
+
uint32_t clk_rate = 0;
uint32_t parity = 0;
uint32_t stop_bits = 0;
@@ -57,6 +58,8 @@ int stm32f7_uart_init(struct device *dev) {
case UART8_BASE:
stm32f769_clock_control_get_rate(STM32F769_CLOCK_UART8, &clk_rate);
break;
+ default:
+ return -1;
}
switch (uart->data_bits) {
@@ -109,16 +112,16 @@ int stm32f7_uart_init(struct device *dev) {
}
uint32_t cr1 = word_length | parity | USART_CR1_TE | USART_CR1_RE;
- sys_write32(cr1, p->CR1);
- cr1 = sys_read32(p->CR1);
+ WRITE_REG(p->CR1, cr1);
+ cr1 = READ_REG(p->CR1);
uint32_t cr2 = stop_bits;
- sys_write32(cr2, p->CR2);
- cr2 = sys_read32(p->CR2);
+ WRITE_REG(p->CR2, cr2);
+ cr2 = READ_REG(p->CR2);
uint32_t cr3 = 0;
- sys_write32(cr3, p->CR3);
- cr3 = sys_read32(p->CR3);
+ WRITE_REG(p->CR3, cr3);
+ cr3 = READ_REG(p->CR3);
uint32_t div = (clk_rate + ((uart->baudrate)/2U)) / (uart->baudrate);
if ((div >= UART_BRR_MIN) && (div <= UART_BRR_MAX)) {
@@ -127,10 +130,10 @@ int stm32f7_uart_init(struct device *dev) {
return -1;
}
- sys_clear_bits(p->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
- sys_clear_bits(p->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
+ CLEAR_BIT(p->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
+ CLEAR_BIT(p->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
- stm32f7_uart_init(dev);
+ __uart_enable(dev);
return 0;
}