2 * nRF51 SoC UART emulation
4 * Copyright (c) 2018 Julia Suvorova <jusual@mail.ru>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 or
8 * (at your option) any later version.
14 #include "hw/sysbus.h"
15 #include "chardev/char-fe.h"
16 #include "hw/registerfields.h"
17 #include "qom/object.h"
19 #define UART_FIFO_LENGTH 6
20 #define UART_SIZE 0x1000
22 #define TYPE_NRF51_UART "nrf51_soc.uart"
23 typedef struct NRF51UARTState NRF51UARTState
;
24 DECLARE_INSTANCE_CHECKER(NRF51UARTState
, NRF51_UART
,
27 REG32(UART_STARTRX
, 0x000)
28 REG32(UART_STOPRX
, 0x004)
29 REG32(UART_STARTTX
, 0x008)
30 REG32(UART_STOPTX
, 0x00C)
31 REG32(UART_SUSPEND
, 0x01C)
33 REG32(UART_CTS
, 0x100)
34 REG32(UART_NCTS
, 0x104)
35 REG32(UART_RXDRDY
, 0x108)
36 REG32(UART_TXDRDY
, 0x11C)
37 REG32(UART_ERROR
, 0x124)
38 REG32(UART_RXTO
, 0x144)
40 REG32(UART_INTEN
, 0x300)
41 FIELD(UART_INTEN
, CTS
, 0, 1)
42 FIELD(UART_INTEN
, NCTS
, 1, 1)
43 FIELD(UART_INTEN
, RXDRDY
, 2, 1)
44 FIELD(UART_INTEN
, TXDRDY
, 7, 1)
45 FIELD(UART_INTEN
, ERROR
, 9, 1)
46 FIELD(UART_INTEN
, RXTO
, 17, 1)
47 REG32(UART_INTENSET
, 0x304)
48 REG32(UART_INTENCLR
, 0x308)
49 REG32(UART_ERRORSRC
, 0x480)
50 REG32(UART_ENABLE
, 0x500)
51 REG32(UART_PSELRTS
, 0x508)
52 REG32(UART_PSELTXD
, 0x50C)
53 REG32(UART_PSELCTS
, 0x510)
54 REG32(UART_PSELRXD
, 0x514)
55 REG32(UART_RXD
, 0x518)
56 REG32(UART_TXD
, 0x51C)
57 REG32(UART_BAUDRATE
, 0x524)
58 REG32(UART_CONFIG
, 0x56C)
60 struct NRF51UARTState
{
61 SysBusDevice parent_obj
;
68 uint8_t rx_fifo
[UART_FIFO_LENGTH
];
69 unsigned int rx_fifo_pos
;
70 unsigned int rx_fifo_len
;