embox

Форк
0
/
muart_simple_diag.c 
60 строк · 1.2 Кб
1
/**
2
 * @file
3
 *
4
 * @date Mar 11, 2023
5
 * @author Anton Bondarev
6
 */
7

8
#include <hal/reg.h>
9

10
#include <drivers/diag.h>
11

12
#include <drivers/common/memory.h>
13

14
#include <framework/mod/options.h>
15

16
#include "muart.h"
17

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)
21

22

23
static void muart_diag_putc(const struct diag *diag, char ch) {
24
	while ( REG16_LOAD(&UART_DIAG->fifo_status.tx_num)) {
25
		;
26
	}
27

28
	REG32_STORE(&UART_DIAG->dtrans, ch);
29
}
30

31
static int muart_diag_kbhit(const struct diag *diag) {
32
	return REG16_LOAD(&UART_DIAG->fifo_status.rx_num);
33
}
34

35
static char muart_diag_getc(const struct diag *diag) {
36

37
	return (char)(REG32_LOAD(&UART_DIAG->drec) & 0xFF);
38
}
39

40
static int muart_diag_init(const struct diag *diag) {
41
	REG32_STORE(&UART_DIAG->bdiv, 50000000UL/BAUD_RATE);
42

43
	REG32_STORE(&UART_DIAG->ctrl,
44
			MUART_CTRL_STOP_BITS(MUART_1_STOP_BIT) |
45
			MUART_CTRL_WORD_LEN(MUART_WORD_LEN_8) |
46
			MUART_CTRL_POL_MODE |
47
			MUART_CTRL_APB_FIFO_MODE |
48
			MUART_CTRL_ENABLE);
49

50
	return 0;
51
}
52

53
DIAG_OPS_DEF(
54
		.init = muart_diag_init,
55
		.putc = muart_diag_putc,
56
		.getc = muart_diag_getc,
57
		.kbhit = muart_diag_kbhit,
58
);
59

60
PERIPH_MEMORY_DEFINE(muart_uart, BASE_ADDR, 0x1000);
61

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.