5
* @author Anton Bondarev
10
#include <drivers/diag.h>
12
#include <drivers/common/memory.h>
14
#include <framework/mod/options.h>
18
#define BASE_ADDR OPTION_GET(NUMBER, base_addr)
19
#define UART_DIAG ((struct muart_regs *)BASE_ADDR)
20
#define BAUD_RATE OPTION_GET(NUMBER, baud_rate)
23
static void muart_diag_putc(const struct diag *diag, char ch) {
24
while ( REG16_LOAD(&UART_DIAG->fifo_status.tx_num)) {
28
REG32_STORE(&UART_DIAG->dtrans, ch);
31
static int muart_diag_kbhit(const struct diag *diag) {
32
return REG16_LOAD(&UART_DIAG->fifo_status.rx_num);
35
static char muart_diag_getc(const struct diag *diag) {
37
return (char)(REG32_LOAD(&UART_DIAG->drec) & 0xFF);
40
static int muart_diag_init(const struct diag *diag) {
41
REG32_STORE(&UART_DIAG->bdiv, 50000000UL/BAUD_RATE);
43
REG32_STORE(&UART_DIAG->ctrl,
44
MUART_CTRL_STOP_BITS(MUART_1_STOP_BIT) |
45
MUART_CTRL_WORD_LEN(MUART_WORD_LEN_8) |
47
MUART_CTRL_APB_FIFO_MODE |
54
.init = muart_diag_init,
55
.putc = muart_diag_putc,
56
.getc = muart_diag_getc,
57
.kbhit = muart_diag_kbhit,
60
PERIPH_MEMORY_DEFINE(muart_uart, BASE_ADDR, 0x1000);