embox
76 строк · 2.0 Кб
1/**
2* @file
3*
4* @date Feb 11, 2023
5* @author Anton Bondarev
6*/
7
8#include <drivers/serial/uart_dev.h>
9#include <drivers/serial/diag_serial.h>
10
11#include <drivers/diag.h>
12
13#include <drivers/common/memory.h>
14
15#include <framework/mod/options.h>
16
17#include <framework/mod/options.h>
18
19#define UART_BASE OPTION_GET(NUMBER, base_addr)
20#define IRQ_NUM OPTION_GET(NUMBER, irq_num)
21
22#define PINS_INIT OPTION_GET(NUMBER, pins_init)
23
24extern int elvees_uart_setup_common(struct uart *dev, const struct uart_params *params);
25extern int elvees_uart_has_symbol(struct uart *dev);
26extern int elvees_uart_getc(struct uart *dev);
27extern int elvees_uart_putc(struct uart *dev, int ch);
28
29#if PINS_INIT == 0
30
31static int elvees_uart_setup(struct uart *dev, const struct uart_params *params) {
32return 0;
33}
34
35#else
36
37#include <drivers/gpio/gpio_driver.h>
38
39#define PIN_RX_PORT OPTION_GET(NUMBER, pin_rx_port)
40#define PIN_RX_PIN OPTION_GET(NUMBER, pin_rx_pin)
41#define PIN_TX_PORT OPTION_GET(NUMBER, pin_tx_port)
42#define PIN_TX_PIN OPTION_GET(NUMBER, pin_tx_pin)
43
44static int elvees_uart_setup(struct uart *dev, const struct uart_params *params) {
45#define GPIO_ALT_FUNC_UART (4)
46
47gpio_setup_mode(PIN_RX_PORT, 1 << PIN_RX_PIN, GPIO_MODE_OUT_ALTERNATE | GPIO_ALTERNATE(GPIO_ALT_FUNC_UART));
48gpio_setup_mode(PIN_TX_PORT, 1 << PIN_TX_PIN, GPIO_MODE_OUT_ALTERNATE | GPIO_ALTERNATE(GPIO_ALT_FUNC_UART));
49
50elvees_uart_setup_common(dev, params);
51
52return 0;
53}
54#endif
55
56static const struct uart_ops elvees_uart_uart_ops = {
57.uart_getc = elvees_uart_getc,
58.uart_putc = elvees_uart_putc,
59.uart_hasrx = elvees_uart_has_symbol,
60.uart_setup = elvees_uart_setup,
61};
62
63static struct uart uart0 = {
64.uart_ops = &elvees_uart_uart_ops,
65.irq_num = IRQ_NUM,
66.base_addr = UART_BASE,
67};
68
69static const struct uart_params uart_diag_params = {
70.baud_rate = OPTION_GET(NUMBER,baud_rate),
71.uart_param_flags = UART_PARAM_FLAGS_8BIT_WORD,
72};
73
74DIAG_SERIAL_DEF(&uart0, &uart_diag_params);
75
76PERIPH_MEMORY_DEFINE(elvees_uart, UART_BASE, 0x1000);
77