forked from xuos/xiuos
Optimize k210 serial port driver for nuttx
This commit is contained in:
parent
f1029b81c3
commit
4fd39c0dd7
|
@ -8,8 +8,8 @@ if ARCH_BOARD_EDU_RISCV64
|
|||
menuconfig BSP_USING_CH376
|
||||
bool "Using CH376 device"
|
||||
default n
|
||||
select K210_16550_UART
|
||||
select K210_16550_UART3
|
||||
select K210_UART
|
||||
select K210_UART3
|
||||
|
||||
if BSP_USING_CH376
|
||||
|
||||
|
@ -40,8 +40,8 @@ menuconfig BSP_USING_TOUCH
|
|||
default n
|
||||
|
||||
menuconfig BSP_USING_CAN
|
||||
select K210_16550_UART
|
||||
select K210_16550_UART1
|
||||
select K210_UART
|
||||
select K210_UART1
|
||||
bool "Using CAN device"
|
||||
default n
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#include <fcntl.h>
|
||||
#include <termios.h>
|
||||
#include <nuttx/ioexpander/gpio.h>
|
||||
#include "k210_uart_16550.h"
|
||||
#include "k210_uart.h"
|
||||
#include "k210_fpioa.h"
|
||||
#include "k210_gpiohs.h"
|
||||
#include "k210_gpio_common.h"
|
||||
|
|
|
@ -95,7 +95,7 @@ int k210_bringup(void)
|
|||
board_touch_initialize();
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART1
|
||||
#ifdef CONFIG_K210_UART1
|
||||
#ifdef CONFIG_ADAPTER_ESP8285_WIFI
|
||||
sysctl_clock_enable(SYSCTL_CLOCK_UART1);
|
||||
sysctl_reset(SYSCTL_RESET_UART1);
|
||||
|
@ -121,7 +121,7 @@ int k210_bringup(void)
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART2
|
||||
#ifdef CONFIG_K210_UART2
|
||||
sysctl_clock_enable(SYSCTL_CLOCK_UART2);
|
||||
sysctl_reset(SYSCTL_RESET_UART2);
|
||||
|
||||
|
@ -129,7 +129,7 @@ int k210_bringup(void)
|
|||
fpioa_set_function(GPIO_EC200T_TXD, FPOA_USART2_TX);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART3
|
||||
#ifdef CONFIG_K210_UART3
|
||||
sysctl_clock_enable(SYSCTL_CLOCK_UART3);
|
||||
sysctl_reset(SYSCTL_RESET_UART3);
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
#include <nuttx/ioexpander/gpio.h>
|
||||
#include "k210_uart_16550.h"
|
||||
#include "k210_uart.h"
|
||||
|
||||
#define ERR_USB_UNKNOWN 0xFA
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@ if ARCH_BOARD_XIDATONG_RISCV64
|
|||
menuconfig BSP_USING_CH376
|
||||
bool "Using CH376 device"
|
||||
default n
|
||||
select K210_16550_UART
|
||||
select K210_16550_UART3
|
||||
select K210_UART
|
||||
select K210_UART3
|
||||
|
||||
if BSP_USING_CH376
|
||||
|
||||
|
@ -40,8 +40,8 @@ menuconfig BSP_USING_TOUCH
|
|||
default n
|
||||
|
||||
menuconfig BSP_USING_CAN
|
||||
select K210_16550_UART
|
||||
select K210_16550_UART1
|
||||
select K210_UART
|
||||
select K210_UART1
|
||||
bool "Using CAN device"
|
||||
default n
|
||||
|
||||
|
|
|
@ -58,17 +58,17 @@ CONFIG_READLINE_TABCOMPLETION=y
|
|||
CONFIG_SCHED_HPWORK=y
|
||||
CONFIG_DEV_GPIO=y
|
||||
CONFIG_BOARDCTL_RESET=y
|
||||
CONFIG_K210_16550_UART=y
|
||||
CONFIG_K210_16550_UART2=y
|
||||
CONFIG_K210_16550_UART2_BASE=0x50220000
|
||||
CONFIG_K210_16550_UART2_CLOCK=195000000
|
||||
CONFIG_K210_16550_UART2_IRQ=39
|
||||
CONFIG_K210_16550_UART2_BAUD=115200
|
||||
CONFIG_K210_16550_UART2_PARITY=0
|
||||
CONFIG_K210_16550_UART2_BITS=8
|
||||
CONFIG_K210_16550_UART2_2STOP=0
|
||||
CONFIG_K210_16550_UART2_RXBUFSIZE=128
|
||||
CONFIG_K210_16550_UART2_TXBUFSIZE=128
|
||||
CONFIG_K210_UART=y
|
||||
CONFIG_K210_UART2=y
|
||||
CONFIG_K210_UART2_BASE=0x50220000
|
||||
CONFIG_K210_UART2_CLOCK=195000000
|
||||
CONFIG_K210_UART2_IRQ=39
|
||||
CONFIG_K210_UART2_BAUD=115200
|
||||
CONFIG_K210_UART2_PARITY=0
|
||||
CONFIG_K210_UART2_BITS=8
|
||||
CONFIG_K210_UART2_2STOP=0
|
||||
CONFIG_K210_UART2_RXBUFSIZE=128
|
||||
CONFIG_K210_UART2_TXBUFSIZE=128
|
||||
CONFIG_SUPPORT_CONNECTION_FRAMEWORK=y
|
||||
CONFIG_CONNECTION_FRAMEWORK_DEBUG=y
|
||||
CONFIG_CONNECTION_ADAPTER_4G=y
|
||||
|
|
|
@ -58,16 +58,16 @@ CONFIG_READLINE_TABCOMPLETION=y
|
|||
CONFIG_SCHED_HPWORK=y
|
||||
CONFIG_DEV_GPIO=y
|
||||
CONFIG_BOARDCTL_RESET=y
|
||||
CONFIG_K210_16550_UART=y
|
||||
CONFIG_K210_16550_UART1=y
|
||||
CONFIG_K210_16550_UART1_BASE=0x50210000
|
||||
CONFIG_K210_16550_UART1_CLOCK=195000000
|
||||
CONFIG_K210_16550_UART1_IRQ=38
|
||||
CONFIG_K210_16550_UART1_BAUD=115200
|
||||
CONFIG_K210_16550_UART1_PARITY=0
|
||||
CONFIG_K210_16550_UART1_BITS=8
|
||||
CONFIG_K210_16550_UART1_2STOP=0
|
||||
CONFIG_K210_16550_UART1_RXBUFSIZE=128
|
||||
CONFIG_K210_16550_UART1_TXBUFSIZE=128
|
||||
CONFIG_K210_UART=y
|
||||
CONFIG_K210_UART1=y
|
||||
CONFIG_K210_UART1_BASE=0x50210000
|
||||
CONFIG_K210_UART1_CLOCK=195000000
|
||||
CONFIG_K210_UART1_IRQ=38
|
||||
CONFIG_K210_UART1_BAUD=115200
|
||||
CONFIG_K210_UART1_PARITY=0
|
||||
CONFIG_K210_UART1_BITS=8
|
||||
CONFIG_K210_UART1_2STOP=0
|
||||
CONFIG_K210_UART1_RXBUFSIZE=128
|
||||
CONFIG_K210_UART1_TXBUFSIZE=128
|
||||
CONFIG_BSP_USING_CAN=y
|
||||
CONFIG_SERIAL_TERMIOS=y
|
||||
|
|
|
@ -58,6 +58,6 @@ CONFIG_READLINE_TABCOMPLETION=y
|
|||
CONFIG_SCHED_HPWORK=y
|
||||
CONFIG_DEV_GPIO=y
|
||||
CONFIG_BOARDCTL_RESET=y
|
||||
CONFIG_K210_16550_UART=y
|
||||
CONFIG_K210_16550_UART3=y
|
||||
CONFIG_K210_UART=y
|
||||
CONFIG_K210_UART3=y
|
||||
CONFIG_BSP_USING_TOUCH=y
|
||||
|
|
|
@ -58,17 +58,17 @@ CONFIG_READLINE_TABCOMPLETION=y
|
|||
CONFIG_SCHED_HPWORK=y
|
||||
CONFIG_DEV_GPIO=y
|
||||
CONFIG_BOARDCTL_RESET=y
|
||||
CONFIG_K210_16550_UART=y
|
||||
CONFIG_K210_16550_UART1=y
|
||||
CONFIG_K210_16550_UART1_BASE=0x50210000
|
||||
CONFIG_K210_16550_UART1_CLOCK=195000000
|
||||
CONFIG_K210_16550_UART1_IRQ=38
|
||||
CONFIG_K210_16550_UART1_BAUD=115200
|
||||
CONFIG_K210_16550_UART1_PARITY=0
|
||||
CONFIG_K210_16550_UART1_BITS=8
|
||||
CONFIG_K210_16550_UART1_2STOP=0
|
||||
CONFIG_K210_16550_UART1_RXBUFSIZE=128
|
||||
CONFIG_K210_16550_UART1_TXBUFSIZE=128
|
||||
CONFIG_K210_UART=y
|
||||
CONFIG_K210_UART1=y
|
||||
CONFIG_K210_UART1_BASE=0x50210000
|
||||
CONFIG_K210_UART1_CLOCK=195000000
|
||||
CONFIG_K210_UART1_IRQ=38
|
||||
CONFIG_K210_UART1_BAUD=115200
|
||||
CONFIG_K210_UART1_PARITY=0
|
||||
CONFIG_K210_UART1_BITS=8
|
||||
CONFIG_K210_UART1_2STOP=0
|
||||
CONFIG_K210_UART1_RXBUFSIZE=128
|
||||
CONFIG_K210_UART1_TXBUFSIZE=128
|
||||
CONFIG_SUPPORT_CONNECTION_FRAMEWORK=y
|
||||
CONFIG_CONNECTION_FRAMEWORK_DEBUG=y
|
||||
CONFIG_CONNECTION_ADAPTER_WIFI=y
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#include <fcntl.h>
|
||||
#include <termios.h>
|
||||
#include <nuttx/ioexpander/gpio.h>
|
||||
#include "k210_uart_16550.h"
|
||||
#include "k210_uart.h"
|
||||
#include "k210_fpioa.h"
|
||||
#include "k210_gpiohs.h"
|
||||
#include "k210_gpio_common.h"
|
||||
|
|
|
@ -95,7 +95,7 @@ int k210_bringup(void)
|
|||
board_touch_initialize();
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART1
|
||||
#ifdef CONFIG_K210_UART1
|
||||
#ifdef CONFIG_ADAPTER_ESP8285_WIFI
|
||||
sysctl_clock_enable(SYSCTL_CLOCK_UART1);
|
||||
sysctl_reset(SYSCTL_RESET_UART1);
|
||||
|
@ -121,7 +121,7 @@ int k210_bringup(void)
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART2
|
||||
#ifdef CONFIG_K210_UART2
|
||||
sysctl_clock_enable(SYSCTL_CLOCK_UART2);
|
||||
sysctl_reset(SYSCTL_RESET_UART2);
|
||||
|
||||
|
@ -129,7 +129,7 @@ int k210_bringup(void)
|
|||
fpioa_set_function(GPIO_EC200T_TXD, FPOA_USART2_TX);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART3
|
||||
#ifdef CONFIG_K210_UART3
|
||||
sysctl_clock_enable(SYSCTL_CLOCK_UART3);
|
||||
sysctl_reset(SYSCTL_RESET_UART3);
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
#include <nuttx/ioexpander/gpio.h>
|
||||
#include "k210_uart_16550.h"
|
||||
#include "k210_uart.h"
|
||||
|
||||
#define ERR_USB_UNKNOWN 0xFA
|
||||
|
||||
|
|
|
@ -40,13 +40,13 @@ config K210_LCD_BACKLIGHT
|
|||
|
||||
endmenu
|
||||
|
||||
menuconfig K210_16550_UART
|
||||
bool "K210 16550 UART Chip support"
|
||||
menuconfig K210_UART
|
||||
bool "K210 UART Chip support"
|
||||
select ARCH_HAVE_SERIAL_TERMIOS
|
||||
default n
|
||||
|
||||
if K210_16550_UART
|
||||
config K210_16550_SERIAL_DISABLE_REORDERING
|
||||
if K210_UART
|
||||
config K210_SERIAL_DISABLE_REORDERING
|
||||
bool "Disable reordering of ttySx devices."
|
||||
default n
|
||||
---help---
|
||||
|
@ -54,227 +54,227 @@ if K210_16550_UART
|
|||
console is always on /dev/ttyS0. If more than one UART is in use this
|
||||
can, however, have the side-effect that all port mappings
|
||||
(hardware USART1 -> /dev/ttyS0) change if the console is moved to another
|
||||
UART. This option disables that re-ordering for 16550 UARTs.
|
||||
UART. This option disables that re-ordering for UARTs.
|
||||
|
||||
config K210_16550_UART1
|
||||
bool "K210 16550 UART1"
|
||||
config K210_UART1
|
||||
bool "K210 UART1"
|
||||
default n
|
||||
|
||||
if K210_16550_UART1
|
||||
if K210_UART1
|
||||
|
||||
config K210_16550_UART1_BASE
|
||||
hex "K210 16550 UART1 base address"
|
||||
config K210_UART1_BASE
|
||||
hex "K210 UART1 base address"
|
||||
default 0x50210000
|
||||
|
||||
config K210_16550_UART1_CLOCK
|
||||
int "K210 16550 UART1 clock"
|
||||
config K210_UART1_CLOCK
|
||||
int "K210 UART1 clock"
|
||||
default 195000000
|
||||
|
||||
|
||||
config K210_16550_UART1_IRQ
|
||||
int "K210 16550 UART1 IRQ number"
|
||||
config K210_UART1_IRQ
|
||||
int "K210 UART1 IRQ number"
|
||||
default 38
|
||||
|
||||
config K210_16550_UART1_BAUD
|
||||
int "K210 16550 UART1 BAUD"
|
||||
config K210_UART1_BAUD
|
||||
int "K210 UART1 BAUD"
|
||||
default 115200
|
||||
|
||||
config K210_16550_UART1_PARITY
|
||||
int "K210 16550 UART1 parity"
|
||||
config K210_UART1_PARITY
|
||||
int "K210 UART1 parity"
|
||||
default 0
|
||||
range 0 2
|
||||
---help---
|
||||
K210 16550 UART1 parity. 0=None, 1=Odd, 2=Even. Default: None
|
||||
K210 UART1 parity. 0=None, 1=Odd, 2=Even. Default: None
|
||||
|
||||
config K210_16550_UART1_BITS
|
||||
int "K210 16550 UART1 number of bits"
|
||||
config K210_UART1_BITS
|
||||
int "K210 UART1 number of bits"
|
||||
default 8
|
||||
---help---
|
||||
K210 16550 UART1 number of bits. Default: 8
|
||||
K210 UART1 number of bits. Default: 8
|
||||
|
||||
config K210_16550_UART1_2STOP
|
||||
int "K210 16550 UART1 two stop bits"
|
||||
config K210_UART1_2STOP
|
||||
int "K210 UART1 two stop bits"
|
||||
default 0
|
||||
---help---
|
||||
0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
|
||||
|
||||
config K210_16550_UART1_RXBUFSIZE
|
||||
int "K210 16550 UART1 Rx buffer size"
|
||||
config K210_UART1_RXBUFSIZE
|
||||
int "K210 UART1 Rx buffer size"
|
||||
default 256
|
||||
---help---
|
||||
K210 16550 UART1 Rx buffer size. Default: 128
|
||||
K210 UART1 Rx buffer size. Default: 128
|
||||
|
||||
config K210_16550_UART1_TXBUFSIZE
|
||||
int "K210 16550 UART1 Tx buffer size"
|
||||
config K210_UART1_TXBUFSIZE
|
||||
int "K210 UART1 Tx buffer size"
|
||||
default 256
|
||||
---help---
|
||||
K210 16550 UART1 Tx buffer size. Default: 128
|
||||
K210 UART1 Tx buffer size. Default: 128
|
||||
|
||||
config K210_16550_UART1_IFLOWCONTROL
|
||||
bool "K210 16550 UART1 RTS flow control"
|
||||
config K210_UART1_IFLOWCONTROL
|
||||
bool "K210 UART1 RTS flow control"
|
||||
default n
|
||||
select SERIAL_IFLOWCONTROL
|
||||
---help---
|
||||
Enable K210 16550 UART1 RTS flow control
|
||||
Enable K210 UART1 RTS flow control
|
||||
|
||||
config K210_16550_UART1_OFLOWCONTROL
|
||||
bool "K210 16550 UART1 CTS flow control"
|
||||
config K210_UART1_OFLOWCONTROL
|
||||
bool "K210 UART1 CTS flow control"
|
||||
default n
|
||||
select SERIAL_OFLOWCONTROL
|
||||
---help---
|
||||
Enable K210 16550 UART1 CTS flow control
|
||||
Enable K210 UART1 CTS flow control
|
||||
|
||||
endif # K210_16550_UART1
|
||||
endif # K210_UART1
|
||||
|
||||
config K210_16550_UART2
|
||||
bool "K210 16550 UART2"
|
||||
config K210_UART2
|
||||
bool "K210 UART2"
|
||||
default n
|
||||
|
||||
if K210_16550_UART2
|
||||
if K210_UART2
|
||||
|
||||
config K210_16550_UART2_BASE
|
||||
hex "K210 16550 UART2 base address"
|
||||
config K210_UART2_BASE
|
||||
hex "K210 UART2 base address"
|
||||
default 0x50220000
|
||||
|
||||
config K210_16550_UART2_CLOCK
|
||||
int "K210 16550 UART2 clock"
|
||||
config K210_UART2_CLOCK
|
||||
int "K210 UART2 clock"
|
||||
default 195000000
|
||||
|
||||
config K210_16550_UART2_IRQ
|
||||
int "K210 16550 UART2 IRQ number"
|
||||
config K210_UART2_IRQ
|
||||
int "K210 UART2 IRQ number"
|
||||
default 39
|
||||
|
||||
config K210_16550_UART2_BAUD
|
||||
int "K210 16550 UART2 BAUD"
|
||||
config K210_UART2_BAUD
|
||||
int "K210 UART2 BAUD"
|
||||
default 115200
|
||||
|
||||
config K210_16550_UART2_PARITY
|
||||
int "K210 16550 UART2 parity"
|
||||
config K210_UART2_PARITY
|
||||
int "K210 UART2 parity"
|
||||
default 0
|
||||
range 0 2
|
||||
---help---
|
||||
K210 16550 UART2 parity. 0=None, 1=Odd, 2=Even. Default: None
|
||||
K210 UART2 parity. 0=None, 1=Odd, 2=Even. Default: None
|
||||
|
||||
config K210_16550_UART2_BITS
|
||||
int "K210 16550 UART2 number of bits"
|
||||
config K210_UART2_BITS
|
||||
int "K210 UART2 number of bits"
|
||||
default 8
|
||||
---help---
|
||||
K210 16550 UART2 number of bits. Default: 8
|
||||
K210 UART2 number of bits. Default: 8
|
||||
|
||||
config K210_16550_UART2_2STOP
|
||||
int "K210 16550 UART2 two stop bits"
|
||||
config K210_UART2_2STOP
|
||||
int "K210 UART2 two stop bits"
|
||||
default 0
|
||||
---help---
|
||||
0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
|
||||
|
||||
config K210_16550_UART2_RXBUFSIZE
|
||||
int "K210 16550 UART2 Rx buffer size"
|
||||
config K210_UART2_RXBUFSIZE
|
||||
int "K210 UART2 Rx buffer size"
|
||||
default 256
|
||||
---help---
|
||||
K210 16550 UART2 Rx buffer size. Default: 128
|
||||
K210 UART2 Rx buffer size. Default: 128
|
||||
|
||||
config K210_16550_UART2_TXBUFSIZE
|
||||
int "K210 16550 UART2 Tx buffer size"
|
||||
config K210_UART2_TXBUFSIZE
|
||||
int "K210 UART2 Tx buffer size"
|
||||
default 256
|
||||
---help---
|
||||
K210 16550 UART2 Tx buffer size. Default: 128
|
||||
K210 UART2 Tx buffer size. Default: 128
|
||||
|
||||
config K210_16550_UART2_IFLOWCONTROL
|
||||
bool "K210 16550 UART2 RTS flow control"
|
||||
config K210_UART2_IFLOWCONTROL
|
||||
bool "K210 UART2 RTS flow control"
|
||||
default n
|
||||
select SERIAL_IFLOWCONTROL
|
||||
---help---
|
||||
Enable K210 16550 UART2 RTS flow control
|
||||
Enable K210 UART2 RTS flow control
|
||||
|
||||
config K210_16550_UART2_OFLOWCONTROL
|
||||
bool "K210 16550 UART2 CTS flow control"
|
||||
config K210_UART2_OFLOWCONTROL
|
||||
bool "K210 UART2 CTS flow control"
|
||||
default n
|
||||
select SERIAL_OFLOWCONTROL
|
||||
---help---
|
||||
Enable K210 16550 UART2 CTS flow control
|
||||
Enable K210 UART2 CTS flow control
|
||||
|
||||
endif # K210_16550_UART2
|
||||
endif # K210_UART2
|
||||
|
||||
config K210_16550_UART3
|
||||
bool "K210 16550 UART3"
|
||||
config K210_UART3
|
||||
bool "K210 UART3"
|
||||
default n
|
||||
|
||||
if K210_16550_UART3
|
||||
if K210_UART3
|
||||
|
||||
config K210_16550_UART3_BASE
|
||||
hex "K210 16550 UART3 base address"
|
||||
config K210_UART3_BASE
|
||||
hex "K210 UART3 base address"
|
||||
default 0x50230000
|
||||
|
||||
config K210_16550_UART3_CLOCK
|
||||
int "K210 16550 UART3 clock"
|
||||
config K210_UART3_CLOCK
|
||||
int "K210 UART3 clock"
|
||||
default 195000000
|
||||
|
||||
config K210_16550_UART3_IRQ
|
||||
int "K210 16550 UART3 IRQ number"
|
||||
config K210_UART3_IRQ
|
||||
int "K210 UART3 IRQ number"
|
||||
default 40
|
||||
|
||||
config K210_16550_UART3_BAUD
|
||||
int "K210 16550 UART3 BAUD"
|
||||
config K210_UART3_BAUD
|
||||
int "K210 UART3 BAUD"
|
||||
default 115200
|
||||
|
||||
config K210_16550_UART3_PARITY
|
||||
int "K210 16550 UART3 parity"
|
||||
config K210_UART3_PARITY
|
||||
int "K210 UART3 parity"
|
||||
default 0
|
||||
range 0 2
|
||||
---help---
|
||||
K210 16550 UART3 parity. 0=None, 1=Odd, 2=Even. Default: None
|
||||
K210 UART3 parity. 0=None, 1=Odd, 2=Even. Default: None
|
||||
|
||||
config K210_16550_UART3_BITS
|
||||
int "K210 16550 UART3 number of bits"
|
||||
config K210_UART3_BITS
|
||||
int "K210 UART3 number of bits"
|
||||
default 8
|
||||
---help---
|
||||
K210 16550 UART3 number of bits. Default: 8
|
||||
K210 UART3 number of bits. Default: 8
|
||||
|
||||
config K210_16550_UART3_2STOP
|
||||
int "K210 16550 UART3 two stop bits"
|
||||
config K210_UART3_2STOP
|
||||
int "K210 UART3 two stop bits"
|
||||
default 0
|
||||
---help---
|
||||
0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
|
||||
|
||||
config K210_16550_UART3_RXBUFSIZE
|
||||
int "K210 16550 UART3 Rx buffer size"
|
||||
config K210_UART3_RXBUFSIZE
|
||||
int "K210 UART3 Rx buffer size"
|
||||
default 256
|
||||
---help---
|
||||
K210 16550 UART3 Rx buffer size. Default: 128
|
||||
K210 UART3 Rx buffer size. Default: 128
|
||||
|
||||
config K210_16550_UART3_TXBUFSIZE
|
||||
int "K210 16550 UART3 Tx buffer size"
|
||||
config K210_UART3_TXBUFSIZE
|
||||
int "K210 UART3 Tx buffer size"
|
||||
default 256
|
||||
---help---
|
||||
K210 16550 UART3 Tx buffer size. Default: 128
|
||||
K210 UART3 Tx buffer size. Default: 128
|
||||
|
||||
config K210_16550_UART3_IFLOWCONTROL
|
||||
bool "K210 16550 UART3 RTS flow control"
|
||||
config K210_UART3_IFLOWCONTROL
|
||||
bool "K210 UART3 RTS flow control"
|
||||
default n
|
||||
select SERIAL_IFLOWCONTROL
|
||||
---help---
|
||||
Enable K210 16550 UART3 RTS flow control
|
||||
Enable K210 UART3 RTS flow control
|
||||
|
||||
config K210_16550_UART3_OFLOWCONTROL
|
||||
bool "K210 16550 UART3 CTS flow control"
|
||||
config K210_UART3_OFLOWCONTROL
|
||||
bool "K210 UART3 CTS flow control"
|
||||
default n
|
||||
select SERIAL_OFLOWCONTROL
|
||||
---help---
|
||||
Enable K210 16550 UART3 CTS flow control
|
||||
Enable K210 UART3 CTS flow control
|
||||
|
||||
endif # K210_16550_UART3
|
||||
endif # K210_UART3
|
||||
|
||||
config K210_16550_SUPRESS_CONFIG
|
||||
bool "Suppress K210 16550 configuration"
|
||||
config K210_UART_SUPRESS_CONFIG
|
||||
bool "Suppress K210 configuration"
|
||||
default n
|
||||
|
||||
config K210_16550_SUPRESS_INITIAL_CONFIG
|
||||
bool "Suppress initial K210 16550 configuration"
|
||||
depends on !K210_16550_SUPRESS_CONFIG
|
||||
config K210_UART_SUPRESS_INITIAL_CONFIG
|
||||
bool "Suppress initial K210 configuration"
|
||||
depends on !K210_UART_SUPRESS_CONFIG
|
||||
default y
|
||||
---help---
|
||||
This option is useful, for example, if you are using a bootloader
|
||||
that configures the K210_16550_UART. In that case, you may want to
|
||||
that configures the K210_UART. In that case, you may want to
|
||||
just leave the existing console configuration in place. Default: n
|
||||
|
||||
config SERIAL_UART_ARCH_MMIO
|
||||
|
@ -285,21 +285,21 @@ if K210_16550_UART
|
|||
bool "Platform has own custom IOCTL"
|
||||
default n
|
||||
|
||||
config K210_16550_REGINCR
|
||||
int "Address increment between K210 16550 registers"
|
||||
config K210_UART_REGINCR
|
||||
int "Address increment between K210 registers"
|
||||
default 4
|
||||
---help---
|
||||
The address increment between K210 16550 registers. Options are 1, 2, or 4.
|
||||
The address increment between K210 registers. Options are 1, 2, or 4.
|
||||
Default: 1
|
||||
|
||||
config K210_16550_REGWIDTH
|
||||
int "Bit width of K210 16550 registers"
|
||||
config K210_UART_REGWIDTH
|
||||
int "Bit width of K210 registers"
|
||||
default 32
|
||||
---help---
|
||||
The bit width of registers. Options are 8, 16, or 32. Default: 32
|
||||
|
||||
config K210_16550_ADDRWIDTH
|
||||
int "Address width of K210 16550 registers"
|
||||
config K210_UART_ADDRWIDTH
|
||||
int "Address width of K210 registers"
|
||||
default 32
|
||||
---help---
|
||||
The bit width of registers. Options are 0, 8, 16, or 32.
|
||||
|
|
|
@ -57,7 +57,7 @@ CHIP_CSRCS = k210_allocateheap.c k210_clockconfig.c
|
|||
CHIP_CSRCS += k210_irq.c k210_irq_dispatch.c k210_systemreset.c
|
||||
CHIP_CSRCS += k210_lowputc.c k210_serial.c k210_fpioa.c fpioa.c
|
||||
CHIP_CSRCS += k210_start.c k210_timerisr.c k210_gpiohs.c k210_gpio.c
|
||||
CHIP_CSRCS += k210_sysctl.c k210_uart_16550.c
|
||||
CHIP_CSRCS += k210_sysctl.c k210_uart.c
|
||||
|
||||
ifeq ($(CONFIG_BUILD_PROTECTED),y)
|
||||
CMN_CSRCS += riscv_task_start.c riscv_pthread_start.c
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
#include "k210_config.h"
|
||||
#include "chip.h"
|
||||
#include "k210.h"
|
||||
#include "k210_uart_16550.h"
|
||||
#include "k210_uart.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
|
@ -649,9 +649,9 @@ void riscv_serialinit(void)
|
|||
/* Register all UARTs */
|
||||
uart_register("/dev/ttyS0", &TTYS0_DEV);
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART
|
||||
#ifdef CONFIG_K210_UART
|
||||
/* Register UART1-UART3 */
|
||||
k210_uart_16550_register();
|
||||
k210_uart_register();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file k210_uart_16550.c
|
||||
* @file k210_uart.c
|
||||
* @brief k210 uart1-uart3 support
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
|
@ -37,13 +37,13 @@
|
|||
#include <nuttx/arch.h>
|
||||
#include <nuttx/serial/serial.h>
|
||||
#include <nuttx/fs/ioctl.h>
|
||||
#include "k210_uart_16550.h"
|
||||
#include "k210_uart.h"
|
||||
|
||||
#ifdef CONFIG_SERIAL_TERMIOS
|
||||
# include <termios.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART
|
||||
#ifdef CONFIG_K210_UART
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -58,31 +58,31 @@
|
|||
* Private Function Prototypes
|
||||
****************************************************************************/
|
||||
|
||||
static int k210_16550_setup(FAR struct uart_dev_s *dev);
|
||||
static void k210_16550_shutdown(FAR struct uart_dev_s *dev);
|
||||
static int k210_16550_attach(FAR struct uart_dev_s *dev);
|
||||
static void k210_16550_detach(FAR struct uart_dev_s *dev);
|
||||
static int k210_16550_interrupt(int irq, FAR void *context, FAR void *arg);
|
||||
static int k210_16550_ioctl(FAR struct file *filep, int cmd, unsigned long arg);
|
||||
static int k210_16550_receive(FAR struct uart_dev_s *dev, unsigned int *status);
|
||||
static void k210_16550_rxint(FAR struct uart_dev_s *dev, bool enable);
|
||||
static bool k210_16550_rxavailable(FAR struct uart_dev_s *dev);
|
||||
static int k210_uart_setup(FAR struct uart_dev_s *dev);
|
||||
static void k210_uart_shutdown(FAR struct uart_dev_s *dev);
|
||||
static int k210_uart_attach(FAR struct uart_dev_s *dev);
|
||||
static void k210_uart_detach(FAR struct uart_dev_s *dev);
|
||||
static int k210_uart_interrupt(int irq, FAR void *context, FAR void *arg);
|
||||
static int k210_uart_ioctl(FAR struct file *filep, int cmd, unsigned long arg);
|
||||
static int k210_uart_receive(FAR struct uart_dev_s *dev, unsigned int *status);
|
||||
static void k210_uart_rxint(FAR struct uart_dev_s *dev, bool enable);
|
||||
static bool k210_uart_rxavailable(FAR struct uart_dev_s *dev);
|
||||
#ifdef CONFIG_SERIAL_IFLOWCONTROL
|
||||
static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
|
||||
static bool k210_uart_rxflowcontrol(struct uart_dev_s *dev,
|
||||
unsigned int nbuffered, bool upper);
|
||||
#endif
|
||||
#ifdef CONFIG_SERIAL_TXDMA
|
||||
static void k210_16550_dmasend(FAR struct uart_dev_s *dev);
|
||||
static void k210_16550_dmatxavail(FAR struct uart_dev_s *dev);
|
||||
static void k210_uart_dmasend(FAR struct uart_dev_s *dev);
|
||||
static void k210_uart_dmatxavail(FAR struct uart_dev_s *dev);
|
||||
#endif
|
||||
#ifdef CONFIG_SERIAL_RXDMA
|
||||
static void k210_16550_dmareceive(FAR struct uart_dev_s *dev);
|
||||
static void k210_16550_dmarxfree(FAR struct uart_dev_s *dev);
|
||||
static void k210_uart_dmareceive(FAR struct uart_dev_s *dev);
|
||||
static void k210_uart_dmarxfree(FAR struct uart_dev_s *dev);
|
||||
#endif
|
||||
static void k210_16550_send(FAR struct uart_dev_s *dev, int ch);
|
||||
static void k210_16550_txint(FAR struct uart_dev_s *dev, bool enable);
|
||||
static bool k210_16550_txready(FAR struct uart_dev_s *dev);
|
||||
static bool k210_16550_txempty(FAR struct uart_dev_s *dev);
|
||||
static void k210_uart_send(FAR struct uart_dev_s *dev, int ch);
|
||||
static void k210_uart_txint(FAR struct uart_dev_s *dev, bool enable);
|
||||
static bool k210_uart_txready(FAR struct uart_dev_s *dev);
|
||||
static bool k210_uart_txempty(FAR struct uart_dev_s *dev);
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
|
@ -90,64 +90,64 @@ static bool k210_16550_txempty(FAR struct uart_dev_s *dev);
|
|||
|
||||
static const struct uart_ops_s g_uart_ops =
|
||||
{
|
||||
.setup = k210_16550_setup,
|
||||
.shutdown = k210_16550_shutdown,
|
||||
.attach = k210_16550_attach,
|
||||
.detach = k210_16550_detach,
|
||||
.ioctl = k210_16550_ioctl,
|
||||
.receive = k210_16550_receive,
|
||||
.rxint = k210_16550_rxint,
|
||||
.rxavailable = k210_16550_rxavailable,
|
||||
.setup = k210_uart_setup,
|
||||
.shutdown = k210_uart_shutdown,
|
||||
.attach = k210_uart_attach,
|
||||
.detach = k210_uart_detach,
|
||||
.ioctl = k210_uart_ioctl,
|
||||
.receive = k210_uart_receive,
|
||||
.rxint = k210_uart_rxint,
|
||||
.rxavailable = k210_uart_rxavailable,
|
||||
#ifdef CONFIG_SERIAL_IFLOWCONTROL
|
||||
.rxflowcontrol = k210_16550_rxflowcontrol,
|
||||
.rxflowcontrol = k210_uart_rxflowcontrol,
|
||||
#endif
|
||||
#ifdef CONFIG_SERIAL_TXDMA
|
||||
.dmasend = k210_16550_dmasend,
|
||||
.dmasend = k210_uart_dmasend,
|
||||
#endif
|
||||
#ifdef CONFIG_SERIAL_RXDMA
|
||||
.dmareceive = k210_16550_dmareceive,
|
||||
.dmarxfree = k210_16550_dmarxfree,
|
||||
.dmareceive = k210_uart_dmareceive,
|
||||
.dmarxfree = k210_uart_dmarxfree,
|
||||
#endif
|
||||
#ifdef CONFIG_SERIAL_TXDMA
|
||||
.dmatxavail = k210_16550_dmatxavail,
|
||||
.dmatxavail = k210_uart_dmatxavail,
|
||||
#endif
|
||||
.send = k210_16550_send,
|
||||
.txint = k210_16550_txint,
|
||||
.txready = k210_16550_txready,
|
||||
.txempty = k210_16550_txempty,
|
||||
.send = k210_uart_send,
|
||||
.txint = k210_uart_txint,
|
||||
.txready = k210_uart_txready,
|
||||
.txempty = k210_uart_txempty,
|
||||
};
|
||||
|
||||
/* I/O buffers */
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART1
|
||||
static char g_uart1rxbuffer[CONFIG_K210_16550_UART1_RXBUFSIZE];
|
||||
static char g_uart1txbuffer[CONFIG_K210_16550_UART1_TXBUFSIZE];
|
||||
#ifdef CONFIG_K210_UART1
|
||||
static char g_uart1rxbuffer[CONFIG_K210_UART1_RXBUFSIZE];
|
||||
static char g_uart1txbuffer[CONFIG_K210_UART1_TXBUFSIZE];
|
||||
#endif
|
||||
#ifdef CONFIG_K210_16550_UART2
|
||||
static char g_uart2rxbuffer[CONFIG_K210_16550_UART2_RXBUFSIZE];
|
||||
static char g_uart2txbuffer[CONFIG_K210_16550_UART2_TXBUFSIZE];
|
||||
#ifdef CONFIG_K210_UART2
|
||||
static char g_uart2rxbuffer[CONFIG_K210_UART2_RXBUFSIZE];
|
||||
static char g_uart2txbuffer[CONFIG_K210_UART2_TXBUFSIZE];
|
||||
#endif
|
||||
#ifdef CONFIG_K210_16550_UART3
|
||||
static char g_uart3rxbuffer[CONFIG_K210_16550_UART3_RXBUFSIZE];
|
||||
static char g_uart3txbuffer[CONFIG_K210_16550_UART3_TXBUFSIZE];
|
||||
#ifdef CONFIG_K210_UART3
|
||||
static char g_uart3rxbuffer[CONFIG_K210_UART3_RXBUFSIZE];
|
||||
static char g_uart3txbuffer[CONFIG_K210_UART3_TXBUFSIZE];
|
||||
#endif
|
||||
|
||||
/* This describes the state of the 16550 uart1 port. */
|
||||
/* This describes the state of the uart1 port. */
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART1
|
||||
static struct k210_16550_s g_uart1priv =
|
||||
#ifdef CONFIG_K210_UART1
|
||||
static struct k210_uart_s g_uart1priv =
|
||||
{
|
||||
.uartbase = CONFIG_K210_16550_UART1_BASE,
|
||||
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
|
||||
.baud = CONFIG_K210_16550_UART1_BAUD,
|
||||
.uartclk = CONFIG_K210_16550_UART1_CLOCK,
|
||||
.uartbase = CONFIG_K210_UART1_BASE,
|
||||
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
|
||||
.baud = CONFIG_K210_UART1_BAUD,
|
||||
.uartclk = CONFIG_K210_UART1_CLOCK,
|
||||
#endif
|
||||
.irq = CONFIG_K210_16550_UART1_IRQ,
|
||||
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
|
||||
.parity = CONFIG_K210_16550_UART1_PARITY,
|
||||
.bits = CONFIG_K210_16550_UART1_BITS,
|
||||
.stopbits2 = CONFIG_K210_16550_UART1_2STOP,
|
||||
#if defined(CONFIG_K210_16550_UART1_IFLOWCONTROL) || defined(CONFIG_K210_16550_UART1_OFLOWCONTROL)
|
||||
.irq = CONFIG_K210_UART1_IRQ,
|
||||
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
|
||||
.parity = CONFIG_K210_UART1_PARITY,
|
||||
.bits = CONFIG_K210_UART1_BITS,
|
||||
.stopbits2 = CONFIG_K210_UART1_2STOP,
|
||||
#if defined(CONFIG_K210_UART1_IFLOWCONTROL) || defined(CONFIG_K210_UART1_OFLOWCONTROL)
|
||||
.flow = true,
|
||||
#endif
|
||||
#endif
|
||||
|
@ -157,12 +157,12 @@ static uart_dev_t g_uart1port =
|
|||
{
|
||||
.recv =
|
||||
{
|
||||
.size = CONFIG_K210_16550_UART1_RXBUFSIZE,
|
||||
.size = CONFIG_K210_UART1_RXBUFSIZE,
|
||||
.buffer = g_uart1rxbuffer,
|
||||
},
|
||||
.xmit =
|
||||
{
|
||||
.size = CONFIG_K210_16550_UART1_TXBUFSIZE,
|
||||
.size = CONFIG_K210_UART1_TXBUFSIZE,
|
||||
.buffer = g_uart1txbuffer,
|
||||
},
|
||||
.ops = &g_uart_ops,
|
||||
|
@ -170,22 +170,22 @@ static uart_dev_t g_uart1port =
|
|||
};
|
||||
#endif
|
||||
|
||||
/* This describes the state of the 16550 uart2 port. */
|
||||
/* This describes the state of the uart2 port. */
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART2
|
||||
static struct k210_16550_s g_uart2priv =
|
||||
#ifdef CONFIG_K210_UART2
|
||||
static struct k210_uart_s g_uart2priv =
|
||||
{
|
||||
.uartbase = CONFIG_K210_16550_UART2_BASE,
|
||||
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
|
||||
.baud = CONFIG_K210_16550_UART2_BAUD,
|
||||
.uartclk = CONFIG_K210_16550_UART2_CLOCK,
|
||||
.uartbase = CONFIG_K210_UART2_BASE,
|
||||
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
|
||||
.baud = CONFIG_K210_UART2_BAUD,
|
||||
.uartclk = CONFIG_K210_UART2_CLOCK,
|
||||
#endif
|
||||
.irq = CONFIG_K210_16550_UART2_IRQ,
|
||||
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
|
||||
.parity = CONFIG_K210_16550_UART2_PARITY,
|
||||
.bits = CONFIG_K210_16550_UART2_BITS,
|
||||
.stopbits2 = CONFIG_K210_16550_UART2_2STOP,
|
||||
#if defined(CONFIG_K210_16550_UART2_IFLOWCONTROL) || defined(CONFIG_K210_16550_UART2_OFLOWCONTROL)
|
||||
.irq = CONFIG_K210_UART2_IRQ,
|
||||
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
|
||||
.parity = CONFIG_K210_UART2_PARITY,
|
||||
.bits = CONFIG_K210_UART2_BITS,
|
||||
.stopbits2 = CONFIG_K210_UART2_2STOP,
|
||||
#if defined(CONFIG_K210_UART2_IFLOWCONTROL) || defined(CONFIG_K210_UART2_OFLOWCONTROL)
|
||||
.flow = true,
|
||||
#endif
|
||||
#endif
|
||||
|
@ -195,12 +195,12 @@ static uart_dev_t g_uart2port =
|
|||
{
|
||||
.recv =
|
||||
{
|
||||
.size = CONFIG_K210_16550_UART2_RXBUFSIZE,
|
||||
.size = CONFIG_K210_UART2_RXBUFSIZE,
|
||||
.buffer = g_uart2rxbuffer,
|
||||
},
|
||||
.xmit =
|
||||
{
|
||||
.size = CONFIG_K210_16550_UART2_TXBUFSIZE,
|
||||
.size = CONFIG_K210_UART2_TXBUFSIZE,
|
||||
.buffer = g_uart2txbuffer,
|
||||
},
|
||||
.ops = &g_uart_ops,
|
||||
|
@ -209,22 +209,22 @@ static uart_dev_t g_uart2port =
|
|||
|
||||
#endif
|
||||
|
||||
/* This describes the state of the 16550 uart1 port. */
|
||||
/* This describes the state of the uart1 port. */
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART3
|
||||
static struct k210_16550_s g_uart3priv =
|
||||
#ifdef CONFIG_K210_UART3
|
||||
static struct k210_uart_s g_uart3priv =
|
||||
{
|
||||
.uartbase = CONFIG_K210_16550_UART3_BASE,
|
||||
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
|
||||
.baud = CONFIG_K210_16550_UART3_BAUD,
|
||||
.uartclk = CONFIG_K210_16550_UART3_CLOCK,
|
||||
.uartbase = CONFIG_K210_UART3_BASE,
|
||||
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
|
||||
.baud = CONFIG_K210_UART3_BAUD,
|
||||
.uartclk = CONFIG_K210_UART3_CLOCK,
|
||||
#endif
|
||||
.irq = CONFIG_K210_16550_UART3_IRQ,
|
||||
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
|
||||
.parity = CONFIG_K210_16550_UART3_PARITY,
|
||||
.bits = CONFIG_K210_16550_UART3_BITS,
|
||||
.stopbits2 = CONFIG_K210_16550_UART3_2STOP,
|
||||
#if defined(CONFIG_K210_16550_UART3_IFLOWCONTROL) || defined(CONFIG_K210_16550_UART3_OFLOWCONTROL)
|
||||
.irq = CONFIG_K210_UART3_IRQ,
|
||||
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
|
||||
.parity = CONFIG_K210_UART3_PARITY,
|
||||
.bits = CONFIG_K210_UART3_BITS,
|
||||
.stopbits2 = CONFIG_K210_UART3_2STOP,
|
||||
#if defined(CONFIG_K210_UART3_IFLOWCONTROL) || defined(CONFIG_K210_UART3_OFLOWCONTROL)
|
||||
.flow = true,
|
||||
#endif
|
||||
#endif
|
||||
|
@ -234,12 +234,12 @@ static uart_dev_t g_uart3port =
|
|||
{
|
||||
.recv =
|
||||
{
|
||||
.size = CONFIG_K210_16550_UART3_RXBUFSIZE,
|
||||
.size = CONFIG_K210_UART3_RXBUFSIZE,
|
||||
.buffer = g_uart3rxbuffer,
|
||||
},
|
||||
.xmit =
|
||||
{
|
||||
.size = CONFIG_K210_16550_UART3_TXBUFSIZE,
|
||||
.size = CONFIG_K210_UART3_TXBUFSIZE,
|
||||
.buffer = g_uart3txbuffer,
|
||||
},
|
||||
.ops = &g_uart_ops,
|
||||
|
@ -253,10 +253,10 @@ static uart_dev_t g_uart3port =
|
|||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_serialin
|
||||
* Name: k210_uart_serialin
|
||||
****************************************************************************/
|
||||
|
||||
static inline uart_datawidth_t k210_16550_serialin(FAR struct k210_16550_s *priv,
|
||||
static inline uart_datawidth_t k210_uart_serialin(FAR struct k210_uart_s *priv,
|
||||
int offset)
|
||||
{
|
||||
#ifdef CONFIG_SERIAL_UART_ARCH_MMIO
|
||||
|
@ -267,10 +267,10 @@ static inline uart_datawidth_t k210_16550_serialin(FAR struct k210_16550_s *priv
|
|||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_serialout
|
||||
* Name: k210_uart_serialout
|
||||
****************************************************************************/
|
||||
|
||||
static inline void k210_16550_serialout(FAR struct k210_16550_s *priv, int offset,
|
||||
static inline void k210_uart_serialout(FAR struct k210_uart_s *priv, int offset,
|
||||
uart_datawidth_t value)
|
||||
{
|
||||
#ifdef CONFIG_SERIAL_UART_ARCH_MMIO
|
||||
|
@ -281,10 +281,10 @@ static inline void k210_16550_serialout(FAR struct k210_16550_s *priv, int offse
|
|||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_disableuartint
|
||||
* Name: k210_uart_disableuartint
|
||||
****************************************************************************/
|
||||
|
||||
static inline void k210_16550_disableuartint(FAR struct k210_16550_s *priv,
|
||||
static inline void k210_uart_disableuartint(FAR struct k210_uart_s *priv,
|
||||
FAR uart_datawidth_t *ier)
|
||||
{
|
||||
if (ier)
|
||||
|
@ -293,28 +293,28 @@ static inline void k210_16550_disableuartint(FAR struct k210_16550_s *priv,
|
|||
}
|
||||
|
||||
priv->ier &= ~UART_IER_ALLIE;
|
||||
k210_16550_serialout(priv, UART_IER_OFFSET, priv->ier);
|
||||
k210_uart_serialout(priv, UART_IER_OFFSET, priv->ier);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_restoreuartint
|
||||
* Name: k210_uart_restoreuartint
|
||||
****************************************************************************/
|
||||
|
||||
static inline void k210_16550_restoreuartint(FAR struct k210_16550_s *priv,
|
||||
static inline void k210_uart_restoreuartint(FAR struct k210_uart_s *priv,
|
||||
uint32_t ier)
|
||||
{
|
||||
priv->ier |= ier & UART_IER_ALLIE;
|
||||
k210_16550_serialout(priv, UART_IER_OFFSET, priv->ier);
|
||||
k210_uart_serialout(priv, UART_IER_OFFSET, priv->ier);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_enablebreaks
|
||||
* Name: k210_uart_enablebreaks
|
||||
****************************************************************************/
|
||||
|
||||
static inline void k210_16550_enablebreaks(FAR struct k210_16550_s *priv,
|
||||
static inline void k210_uart_enablebreaks(FAR struct k210_uart_s *priv,
|
||||
bool enable)
|
||||
{
|
||||
uint32_t lcr = k210_16550_serialin(priv, UART_LCR_OFFSET);
|
||||
uint32_t lcr = k210_uart_serialin(priv, UART_LCR_OFFSET);
|
||||
|
||||
if (enable)
|
||||
{
|
||||
|
@ -325,11 +325,11 @@ static inline void k210_16550_enablebreaks(FAR struct k210_16550_s *priv,
|
|||
lcr &= ~UART_LCR_BRK;
|
||||
}
|
||||
|
||||
k210_16550_serialout(priv, UART_LCR_OFFSET, lcr);
|
||||
k210_uart_serialout(priv, UART_LCR_OFFSET, lcr);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_divisor
|
||||
* Name: k210_uart_divisor
|
||||
*
|
||||
* Description:
|
||||
* Select a divider to produce the BAUD from the UART_CLK.
|
||||
|
@ -341,8 +341,8 @@ static inline void k210_16550_enablebreaks(FAR struct k210_16550_s *priv,
|
|||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
|
||||
static inline uint32_t k210_16550_divisor(FAR struct k210_16550_s *priv)
|
||||
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
|
||||
static inline uint32_t k210_uart_divisor(FAR struct k210_uart_s *priv)
|
||||
{
|
||||
return (priv->uartclk / (uint32_t)priv->baud);
|
||||
// return (priv->uartclk + (priv->baud << 3)) / (priv->baud << 4);
|
||||
|
@ -350,7 +350,7 @@ static inline uint32_t k210_16550_divisor(FAR struct k210_16550_s *priv)
|
|||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_setup
|
||||
* Name: k210_uart_setup
|
||||
*
|
||||
* Description:
|
||||
* Configure the UART baud, bits, parity, fifos, etc. This
|
||||
|
@ -359,10 +359,10 @@ static inline uint32_t k210_16550_divisor(FAR struct k210_16550_s *priv)
|
|||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int k210_16550_setup(FAR struct uart_dev_s *dev)
|
||||
static int k210_uart_setup(FAR struct uart_dev_s *dev)
|
||||
{
|
||||
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
uint16_t div;
|
||||
uint8_t dlh, dll, dlf;
|
||||
uint32_t lcr;
|
||||
|
@ -372,17 +372,17 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
|
|||
|
||||
/* Clear fifos */
|
||||
|
||||
k210_16550_serialout(priv, UART_FCR_OFFSET,
|
||||
k210_uart_serialout(priv, UART_FCR_OFFSET,
|
||||
(UART_FCR_RXRST | UART_FCR_TXRST));
|
||||
|
||||
/* Set trigger */
|
||||
|
||||
k210_16550_serialout(priv, UART_FCR_OFFSET,
|
||||
k210_uart_serialout(priv, UART_FCR_OFFSET,
|
||||
(UART_FCR_FIFOEN | UART_FCR_RXTRIGGER_8));
|
||||
|
||||
/* Set up the IER */
|
||||
|
||||
priv->ier = k210_16550_serialin(priv, UART_IER_OFFSET);
|
||||
priv->ier = k210_uart_serialin(priv, UART_IER_OFFSET);
|
||||
|
||||
/* Set up the LCR */
|
||||
|
||||
|
@ -423,33 +423,33 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
|
|||
|
||||
/* Enter DLAB=1 */
|
||||
|
||||
k210_16550_serialout(priv, UART_LCR_OFFSET, (lcr | UART_LCR_DLAB));
|
||||
k210_uart_serialout(priv, UART_LCR_OFFSET, (lcr | UART_LCR_DLAB));
|
||||
|
||||
/* Set the BAUD divisor */
|
||||
|
||||
div = k210_16550_divisor(priv);
|
||||
div = k210_uart_divisor(priv);
|
||||
dlh = div >> 12;
|
||||
dll = (div - (dlh << 12)) / 16;
|
||||
dlf = div - (dlh << 12) - dll * 16;
|
||||
|
||||
k210_16550_serialout(priv, UART_DLM_OFFSET, dlh);
|
||||
k210_16550_serialout(priv, UART_DLL_OFFSET, dll);
|
||||
k210_16550_serialout(priv, UART_DLF_OFFSET, dlf);
|
||||
k210_uart_serialout(priv, UART_DLM_OFFSET, dlh);
|
||||
k210_uart_serialout(priv, UART_DLL_OFFSET, dll);
|
||||
k210_uart_serialout(priv, UART_DLF_OFFSET, dlf);
|
||||
|
||||
/* Clear DLAB */
|
||||
|
||||
k210_16550_serialout(priv, UART_LCR_OFFSET, lcr);
|
||||
k210_uart_serialout(priv, UART_LCR_OFFSET, lcr);
|
||||
|
||||
/* Configure the FIFOs */
|
||||
|
||||
k210_16550_serialout(priv, UART_FCR_OFFSET,
|
||||
k210_uart_serialout(priv, UART_FCR_OFFSET,
|
||||
(UART_FCR_RXTRIGGER_8 | UART_FCR_TXRST | UART_FCR_RXRST |
|
||||
UART_FCR_FIFOEN));
|
||||
|
||||
/* Set up the auto flow control */
|
||||
|
||||
#if defined(CONFIG_SERIAL_IFLOWCONTROL) || defined(CONFIG_SERIAL_OFLOWCONTROL)
|
||||
mcr = k210_16550_serialin(priv, UART_MCR_OFFSET);
|
||||
mcr = k210_uart_serialin(priv, UART_MCR_OFFSET);
|
||||
if (priv->flow)
|
||||
{
|
||||
mcr |= UART_MCR_AFCE;
|
||||
|
@ -461,9 +461,9 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
|
|||
|
||||
mcr |= UART_MCR_RTS;
|
||||
|
||||
k210_16550_serialout(priv, UART_MCR_OFFSET, mcr);
|
||||
k210_uart_serialout(priv, UART_MCR_OFFSET, mcr);
|
||||
|
||||
k210_16550_serialout(priv, UART_SRT_OFFSET, 0x0);
|
||||
k210_uart_serialout(priv, UART_SRT_OFFSET, 0x0);
|
||||
|
||||
#endif /* defined(CONFIG_SERIAL_IFLOWCONTROL) || defined(CONFIG_SERIAL_OFLOWCONTROL) */
|
||||
|
||||
|
@ -472,7 +472,7 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
|
|||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_shutdown
|
||||
* Name: k210_uart_shutdown
|
||||
*
|
||||
* Description:
|
||||
* Disable the UART. This method is called when the serial
|
||||
|
@ -480,14 +480,14 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
|
|||
*
|
||||
****************************************************************************/
|
||||
|
||||
static void k210_16550_shutdown(struct uart_dev_s *dev)
|
||||
static void k210_uart_shutdown(struct uart_dev_s *dev)
|
||||
{
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
k210_16550_disableuartint(priv, NULL);
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
k210_uart_disableuartint(priv, NULL);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_attach
|
||||
* Name: k210_uart_attach
|
||||
*
|
||||
* Description:
|
||||
* Configure the UART to operation in interrupt driven mode. This method
|
||||
|
@ -502,14 +502,14 @@ static void k210_16550_shutdown(struct uart_dev_s *dev)
|
|||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int k210_16550_attach(struct uart_dev_s *dev)
|
||||
static int k210_uart_attach(struct uart_dev_s *dev)
|
||||
{
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
int ret;
|
||||
|
||||
/* Attach and enable the IRQ */
|
||||
|
||||
ret = irq_attach(priv->irq, k210_16550_interrupt, dev);
|
||||
ret = irq_attach(priv->irq, k210_uart_interrupt, dev);
|
||||
#ifndef CONFIG_ARCH_NOINTC
|
||||
if (ret == OK)
|
||||
{
|
||||
|
@ -525,7 +525,7 @@ static int k210_16550_attach(struct uart_dev_s *dev)
|
|||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_detach
|
||||
* Name: k210_uart_detach
|
||||
*
|
||||
* Description:
|
||||
* Detach UART interrupts. This method is called when the serial port is
|
||||
|
@ -534,36 +534,36 @@ static int k210_16550_attach(struct uart_dev_s *dev)
|
|||
*
|
||||
****************************************************************************/
|
||||
|
||||
static void k210_16550_detach(FAR struct uart_dev_s *dev)
|
||||
static void k210_uart_detach(FAR struct uart_dev_s *dev)
|
||||
{
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
|
||||
up_disable_irq(priv->irq);
|
||||
irq_detach(priv->irq);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_interrupt
|
||||
* Name: k210_uart_interrupt
|
||||
*
|
||||
* Description:
|
||||
* This is the UART interrupt handler. It will be invoked when an
|
||||
* interrupt received on the 'irq' It should call uart_transmitchars or
|
||||
* uart_receivechar to perform the appropriate data transfers. The
|
||||
* interrupt handling logic must be able to map the 'irq' number into the
|
||||
* appropriate k210_16550_s structure in order to call these functions.
|
||||
* appropriate k210_uart_s structure in order to call these functions.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int k210_16550_interrupt(int irq, FAR void *context, FAR void *arg)
|
||||
static int k210_uart_interrupt(int irq, FAR void *context, FAR void *arg)
|
||||
{
|
||||
FAR struct uart_dev_s *dev = (struct uart_dev_s *)arg;
|
||||
FAR struct k210_16550_s *priv;
|
||||
FAR struct k210_uart_s *priv;
|
||||
uint32_t status;
|
||||
int passes;
|
||||
uint8_t v_int_status;
|
||||
|
||||
DEBUGASSERT(dev != NULL && dev->priv != NULL);
|
||||
priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
|
||||
/* Loop until there are no characters to be transferred or,
|
||||
* until we have been looping for a long time.
|
||||
|
@ -575,7 +575,7 @@ static int k210_16550_interrupt(int irq, FAR void *context, FAR void *arg)
|
|||
* termination conditions
|
||||
*/
|
||||
|
||||
status = k210_16550_serialin(priv, UART_IIR_OFFSET);
|
||||
status = k210_uart_serialin(priv, UART_IIR_OFFSET);
|
||||
|
||||
if (status == 0)
|
||||
{
|
||||
|
@ -603,18 +603,18 @@ static int k210_16550_interrupt(int irq, FAR void *context, FAR void *arg)
|
|||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_ioctl
|
||||
* Name: k210_uart_ioctl
|
||||
*
|
||||
* Description:
|
||||
* All ioctl calls will be routed through this method
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
|
||||
static int k210_uart_ioctl(struct file *filep, int cmd, unsigned long arg)
|
||||
{
|
||||
FAR struct inode *inode = filep->f_inode;
|
||||
FAR struct uart_dev_s *dev = inode->i_private;
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
int ret;
|
||||
|
||||
#ifdef CONFIG_SERIAL_UART_ARCH_IOCTL
|
||||
|
@ -634,14 +634,14 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
|
|||
#ifdef CONFIG_SERIAL_TIOCSERGSTRUCT
|
||||
case TIOCSERGSTRUCT:
|
||||
{
|
||||
FAR struct k210_16550_s *user = (FAR struct k210_16550_s *)arg;
|
||||
FAR struct k210_uart_s *user = (FAR struct k210_uart_s *)arg;
|
||||
if (!user)
|
||||
{
|
||||
ret = -EINVAL;
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(user, dev, sizeof(struct k210_16550_s));
|
||||
memcpy(user, dev, sizeof(struct k210_uart_s));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -650,7 +650,7 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
|
|||
case TIOCSBRK: /* BSD compatibility: Turn break on, unconditionally */
|
||||
{
|
||||
irqstate_t flags = enter_critical_section();
|
||||
k210_16550_enablebreaks(priv, true);
|
||||
k210_uart_enablebreaks(priv, true);
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
break;
|
||||
|
@ -659,12 +659,12 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
|
|||
{
|
||||
irqstate_t flags;
|
||||
flags = enter_critical_section();
|
||||
k210_16550_enablebreaks(priv, false);
|
||||
k210_uart_enablebreaks(priv, false);
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(CONFIG_SERIAL_TERMIOS) && !defined(CONFIG_K210_16550_SUPRESS_CONFIG)
|
||||
#if defined(CONFIG_SERIAL_TERMIOS) && !defined(CONFIG_K210_UART_SUPRESS_CONFIG)
|
||||
case TCGETS:
|
||||
{
|
||||
FAR struct termios *termiosp = (FAR struct termios *)arg;
|
||||
|
@ -758,7 +758,7 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
|
|||
priv->flow = (termiosp->c_cflag & CRTSCTS) != 0;
|
||||
#endif
|
||||
|
||||
k210_16550_setup(dev);
|
||||
k210_uart_setup(dev);
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
break;
|
||||
|
@ -773,7 +773,7 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
|
|||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_receive
|
||||
* Name: k210_uart_receive
|
||||
*
|
||||
* Description:
|
||||
* Called (usually) from the interrupt level to receive one
|
||||
|
@ -782,26 +782,26 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
|
|||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int k210_16550_receive(struct uart_dev_s *dev, unsigned int *status)
|
||||
static int k210_uart_receive(struct uart_dev_s *dev, unsigned int *status)
|
||||
{
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
uint32_t rbr = 0;
|
||||
*status = k210_16550_serialin(priv, UART_LSR_OFFSET);
|
||||
rbr = k210_16550_serialin(priv, UART_RBR_OFFSET);
|
||||
*status = k210_uart_serialin(priv, UART_LSR_OFFSET);
|
||||
rbr = k210_uart_serialin(priv, UART_RBR_OFFSET);
|
||||
return rbr;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_rxint
|
||||
* Name: k210_uart_rxint
|
||||
*
|
||||
* Description:
|
||||
* Call to enable or disable RX interrupts
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static void k210_16550_rxint(struct uart_dev_s *dev, bool enable)
|
||||
static void k210_uart_rxint(struct uart_dev_s *dev, bool enable)
|
||||
{
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
|
||||
if (enable)
|
||||
{
|
||||
|
@ -812,25 +812,25 @@ static void k210_16550_rxint(struct uart_dev_s *dev, bool enable)
|
|||
priv->ier &= ~UART_IER_ERBFI;
|
||||
}
|
||||
|
||||
k210_16550_serialout(priv, UART_IER_OFFSET, priv->ier);
|
||||
k210_uart_serialout(priv, UART_IER_OFFSET, priv->ier);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_rxavailable
|
||||
* Name: k210_uart_rxavailable
|
||||
*
|
||||
* Description:
|
||||
* Return true if the receive fifo is not empty
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static bool k210_16550_rxavailable(struct uart_dev_s *dev)
|
||||
static bool k210_uart_rxavailable(struct uart_dev_s *dev)
|
||||
{
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
return ((k210_16550_serialin(priv, UART_LSR_OFFSET) & UART_LSR_DR) != 0);
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
return ((k210_uart_serialin(priv, UART_LSR_OFFSET) & UART_LSR_DR) != 0);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_dma*
|
||||
* Name: k210_uart_dma*
|
||||
*
|
||||
* Description:
|
||||
* Stubbed out DMA-related methods
|
||||
|
@ -838,11 +838,11 @@ static bool k210_16550_rxavailable(struct uart_dev_s *dev)
|
|||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_SERIAL_IFLOWCONTROL
|
||||
static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
|
||||
static bool k210_uart_rxflowcontrol(struct uart_dev_s *dev,
|
||||
unsigned int nbuffered, bool upper)
|
||||
{
|
||||
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
|
||||
if (priv->flow)
|
||||
{
|
||||
|
@ -853,7 +853,7 @@ static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
|
|||
* input is received.
|
||||
*/
|
||||
|
||||
k210_16550_rxint(dev, !upper);
|
||||
k210_uart_rxint(dev, !upper);
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
@ -863,7 +863,7 @@ static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
|
|||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_dma*
|
||||
* Name: k210_uart_dma*
|
||||
*
|
||||
* Description:
|
||||
* Stub functions used when serial DMA is enabled.
|
||||
|
@ -871,59 +871,59 @@ static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
|
|||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_SERIAL_TXDMA
|
||||
static void k210_16550_dmasend(FAR struct uart_dev_s *dev)
|
||||
static void k210_uart_dmasend(FAR struct uart_dev_s *dev)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_RXDMA
|
||||
static void k210_16550_dmareceive(FAR struct uart_dev_s *dev)
|
||||
static void k210_uart_dmareceive(FAR struct uart_dev_s *dev)
|
||||
{
|
||||
}
|
||||
|
||||
static void k210_16550_dmarxfree(FAR struct uart_dev_s *dev)
|
||||
static void k210_uart_dmarxfree(FAR struct uart_dev_s *dev)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_TXDMA
|
||||
static void k210_16550_dmatxavail(FAR struct uart_dev_s *dev)
|
||||
static void k210_uart_dmatxavail(FAR struct uart_dev_s *dev)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_send
|
||||
* Name: k210_uart_send
|
||||
*
|
||||
* Description:
|
||||
* This method will send one byte on the UART
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static void k210_16550_send(struct uart_dev_s *dev, int ch)
|
||||
static void k210_uart_send(struct uart_dev_s *dev, int ch)
|
||||
{
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
k210_16550_serialout(priv, UART_THR_OFFSET, (uart_datawidth_t)ch);
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
k210_uart_serialout(priv, UART_THR_OFFSET, (uart_datawidth_t)ch);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_txint
|
||||
* Name: k210_uart_txint
|
||||
*
|
||||
* Description:
|
||||
* Call to enable or disable TX interrupts
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static void k210_16550_txint(struct uart_dev_s *dev, bool enable)
|
||||
static void k210_uart_txint(struct uart_dev_s *dev, bool enable)
|
||||
{
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
irqstate_t flags;
|
||||
|
||||
flags = enter_critical_section();
|
||||
if (enable)
|
||||
{
|
||||
priv->ier |= UART_IER_ETBEI;
|
||||
k210_16550_serialout(priv, UART_IER_OFFSET, priv->ier);
|
||||
k210_uart_serialout(priv, UART_IER_OFFSET, priv->ier);
|
||||
|
||||
/* Fake a TX interrupt here by just calling uart_xmitchars() with
|
||||
* interrupts disabled (note this may recurse).
|
||||
|
@ -934,38 +934,38 @@ static void k210_16550_txint(struct uart_dev_s *dev, bool enable)
|
|||
else
|
||||
{
|
||||
priv->ier &= ~UART_IER_ETBEI;
|
||||
k210_16550_serialout(priv, UART_IER_OFFSET, priv->ier);
|
||||
k210_uart_serialout(priv, UART_IER_OFFSET, priv->ier);
|
||||
}
|
||||
|
||||
leave_critical_section(flags);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_txready
|
||||
* Name: k210_uart_txready
|
||||
*
|
||||
* Description:
|
||||
* Return true if the tranmsit fifo is not full
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static bool k210_16550_txready(struct uart_dev_s *dev)
|
||||
static bool k210_uart_txready(struct uart_dev_s *dev)
|
||||
{
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
return (((k210_16550_serialin(priv, UART_LSR_OFFSET) & UART_LSR_THRE) != 0));
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
return (((k210_uart_serialin(priv, UART_LSR_OFFSET) & UART_LSR_THRE) != 0));
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_16550_txempty
|
||||
* Name: k210_uart_txempty
|
||||
*
|
||||
* Description:
|
||||
* Return true if the transmit fifo is empty
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static bool k210_16550_txempty(struct uart_dev_s *dev)
|
||||
static bool k210_uart_txempty(struct uart_dev_s *dev)
|
||||
{
|
||||
FAR struct k210_16550_s *priv = (FAR struct k210_16550_s *)dev->priv;
|
||||
return ((k210_16550_serialin(priv, UART_LSR_OFFSET) & UART_LSR_TEMT) != 0);
|
||||
FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
|
||||
return ((k210_uart_serialin(priv, UART_LSR_OFFSET) & UART_LSR_TEMT) != 0);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -973,7 +973,7 @@ static bool k210_16550_txempty(struct uart_dev_s *dev)
|
|||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: k210_uart_16550_register
|
||||
* Name: k210_uart_register
|
||||
*
|
||||
* Description:
|
||||
* Register serial console and serial ports. This assumes that
|
||||
|
@ -981,20 +981,20 @@ static bool k210_16550_txempty(struct uart_dev_s *dev)
|
|||
*
|
||||
****************************************************************************/
|
||||
|
||||
void k210_uart_16550_register(void)
|
||||
void k210_uart_register(void)
|
||||
{
|
||||
#if defined(CONFIG_K210_16550_UART1)
|
||||
k210_16550_setup(&g_uart1port);
|
||||
#if defined(CONFIG_K210_UART1)
|
||||
k210_uart_setup(&g_uart1port);
|
||||
uart_register("/dev/ttyS1", &g_uart1port);
|
||||
#endif
|
||||
#if defined(CONFIG_K210_16550_UART2)
|
||||
k210_16550_setup(&g_uart2port);
|
||||
#if defined(CONFIG_K210_UART2)
|
||||
k210_uart_setup(&g_uart2port);
|
||||
uart_register("/dev/ttyS2", &g_uart2port);
|
||||
#endif
|
||||
#if defined(CONFIG_K210_16550_UART3)
|
||||
k210_16550_setup(&g_uart3port);
|
||||
#if defined(CONFIG_K210_UART3)
|
||||
k210_uart_setup(&g_uart3port);
|
||||
uart_register("/dev/ttyS3", &g_uart3port);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* CONFIG_K210_16550_UART */
|
||||
#endif /* CONFIG_K210_UART */
|
|
@ -18,8 +18,8 @@
|
|||
* @date 2022.09.28
|
||||
*/
|
||||
|
||||
#ifndef __INCLUDE_NUTTX_SERIAL_UART_K210_16550_H
|
||||
#define __INCLUDE_NUTTX_SERIAL_UART_K210_16550_H
|
||||
#ifndef __INCLUDE_NUTTX_SERIAL_UART_K210_H
|
||||
#define __INCLUDE_NUTTX_SERIAL_UART_K210_H
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
|
@ -27,7 +27,7 @@
|
|||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART
|
||||
#ifdef CONFIG_K210_UART
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
|
@ -38,7 +38,7 @@
|
|||
/* Are any UARTs enabled? */
|
||||
|
||||
#undef HAVE_UART
|
||||
#if defined(CONFIG_K210_16550_UART1) || defined(CONFIG_K210_16550_UART2) || defined(CONFIG_K210_16550_UART3)
|
||||
#if defined(CONFIG_K210_UART1) || defined(CONFIG_K210_UART2) || defined(CONFIG_K210_UART3)
|
||||
# define HAVE_UART 1
|
||||
#endif
|
||||
|
||||
|
@ -46,78 +46,78 @@
|
|||
* register bit width.
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_K210_16550_REGINCR
|
||||
# error "CONFIG_K210_16550_REGINCR not defined"
|
||||
#ifndef CONFIG_K210_UART_REGINCR
|
||||
# error "CONFIG_K210_UART_REGINCR not defined"
|
||||
#endif
|
||||
|
||||
#if CONFIG_K210_16550_REGINCR != 1 && CONFIG_K210_16550_REGINCR != 2 && CONFIG_K210_16550_REGINCR != 4
|
||||
# error "CONFIG_K210_16550_REGINCR not supported"
|
||||
#if CONFIG_K210_UART_REGINCR != 1 && CONFIG_K210_UART_REGINCR != 2 && CONFIG_K210_UART_REGINCR != 4
|
||||
# error "CONFIG_K210_UART_REGINCR not supported"
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_K210_16550_REGWIDTH
|
||||
# error "CONFIG_K210_16550_REGWIDTH not defined"
|
||||
#ifndef CONFIG_K210_UART_REGWIDTH
|
||||
# error "CONFIG_K210_UART_REGWIDTH not defined"
|
||||
#endif
|
||||
|
||||
#if CONFIG_K210_16550_REGWIDTH != 8 && CONFIG_K210_16550_REGWIDTH != 16 && CONFIG_K210_16550_REGWIDTH != 32
|
||||
# error "CONFIG_K210_16550_REGWIDTH not supported"
|
||||
#if CONFIG_K210_UART_REGWIDTH != 8 && CONFIG_K210_UART_REGWIDTH != 16 && CONFIG_K210_UART_REGWIDTH != 32
|
||||
# error "CONFIG_K210_UART_REGWIDTH not supported"
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_K210_16550_ADDRWIDTH
|
||||
# error "CONFIG_K210_16550_ADDRWIDTH not defined"
|
||||
#ifndef CONFIG_K210_UART_ADDRWIDTH
|
||||
# error "CONFIG_K210_UART_ADDRWIDTH not defined"
|
||||
#endif
|
||||
|
||||
#if CONFIG_K210_16550_ADDRWIDTH != 0 && CONFIG_K210_16550_ADDRWIDTH != 8 && \
|
||||
CONFIG_K210_16550_ADDRWIDTH != 16 && CONFIG_K210_16550_ADDRWIDTH != 32 && \
|
||||
CONFIG_K210_16550_ADDRWIDTH != 64
|
||||
# error "CONFIG_K210_16550_ADDRWIDTH not supported"
|
||||
#if CONFIG_K210_UART_ADDRWIDTH != 0 && CONFIG_K210_UART_ADDRWIDTH != 8 && \
|
||||
CONFIG_K210_UART_ADDRWIDTH != 16 && CONFIG_K210_UART_ADDRWIDTH != 32 && \
|
||||
CONFIG_K210_UART_ADDRWIDTH != 64
|
||||
# error "CONFIG_K210_UART_ADDRWIDTH not supported"
|
||||
#endif
|
||||
|
||||
/* If a UART is enabled, then its base address, clock, and IRQ
|
||||
* must also be provided
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART1
|
||||
# ifndef CONFIG_K210_16550_UART1_BASE
|
||||
# error "CONFIG_K210_16550_UART1_BASE not provided"
|
||||
# undef CONFIG_K210_16550_UART1
|
||||
#ifdef CONFIG_K210_UART1
|
||||
# ifndef CONFIG_K210_UART1_BASE
|
||||
# error "CONFIG_K210_UART1_BASE not provided"
|
||||
# undef CONFIG_K210_UART1
|
||||
# endif
|
||||
# ifndef CONFIG_K210_16550_UART1_CLOCK
|
||||
# error "CONFIG_K210_16550_UART1_CLOCK not provided"
|
||||
# undef CONFIG_K210_16550_UART1
|
||||
# ifndef CONFIG_K210_UART1_CLOCK
|
||||
# error "CONFIG_K210_UART1_CLOCK not provided"
|
||||
# undef CONFIG_K210_UART1
|
||||
# endif
|
||||
# ifndef CONFIG_K210_16550_UART1_IRQ
|
||||
# error "CONFIG_K210_16550_UART1_IRQ not provided"
|
||||
# undef CONFIG_K210_16550_UART1
|
||||
# ifndef CONFIG_K210_UART1_IRQ
|
||||
# error "CONFIG_K210_UART1_IRQ not provided"
|
||||
# undef CONFIG_K210_UART1
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART2
|
||||
# ifndef CONFIG_K210_16550_UART2_BASE
|
||||
# error "CONFIG_K210_16550_UART2_BASE not provided"
|
||||
# undef CONFIG_K210_16550_UART2
|
||||
#ifdef CONFIG_K210_UART2
|
||||
# ifndef CONFIG_K210_UART2_BASE
|
||||
# error "CONFIG_K210_UART2_BASE not provided"
|
||||
# undef CONFIG_K210_UART2
|
||||
# endif
|
||||
# ifndef CONFIG_K210_16550_UART2_CLOCK
|
||||
# error "CONFIG_K210_16550_UART2_CLOCK not provided"
|
||||
# undef CONFIG_K210_16550_UART2
|
||||
# ifndef CONFIG_K210_UART2_CLOCK
|
||||
# error "CONFIG_K210_UART2_CLOCK not provided"
|
||||
# undef CONFIG_K210_UART2
|
||||
# endif
|
||||
# ifndef CONFIG_K210_16550_UART2_IRQ
|
||||
# error "CONFIG_K210_16550_UART2_IRQ not provided"
|
||||
# undef CONFIG_K210_16550_UART2
|
||||
# ifndef CONFIG_K210_UART2_IRQ
|
||||
# error "CONFIG_K210_UART2_IRQ not provided"
|
||||
# undef CONFIG_K210_UART2
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_K210_16550_UART3
|
||||
# ifndef CONFIG_K210_16550_UART3_BASE
|
||||
# error "CONFIG_K210_16550_UART3_BASE not provided"
|
||||
# undef CONFIG_K210_16550_UART3
|
||||
#ifdef CONFIG_K210_UART3
|
||||
# ifndef CONFIG_K210_UART3_BASE
|
||||
# error "CONFIG_K210_UART3_BASE not provided"
|
||||
# undef CONFIG_K210_UART3
|
||||
# endif
|
||||
# ifndef CONFIG_K210_16550_UART3_CLOCK
|
||||
# error "CONFIG_K210_16550_UART3_CLOCK not provided"
|
||||
# undef CONFIG_K210_16550_UART3
|
||||
# ifndef CONFIG_K210_UART3_CLOCK
|
||||
# error "CONFIG_K210_UART3_CLOCK not provided"
|
||||
# undef CONFIG_K210_UART3
|
||||
# endif
|
||||
# ifndef CONFIG_K210_16550_UART3_IRQ
|
||||
# error "CONFIG_K210_16550_UART3_IRQ not provided"
|
||||
# undef CONFIG_K210_16550_UART3
|
||||
# ifndef CONFIG_K210_UART3_IRQ
|
||||
# error "CONFIG_K210_UART3_IRQ not provided"
|
||||
# undef CONFIG_K210_UART3
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
@ -143,21 +143,21 @@
|
|||
#define UART_DLF_INCR 48 /* Divisor factor Register*/
|
||||
#define UART_CPR_INCR 61 /* Component Register */
|
||||
|
||||
#define UART_RBR_OFFSET (CONFIG_K210_16550_REGINCR*UART_RBR_INCR)
|
||||
#define UART_THR_OFFSET (CONFIG_K210_16550_REGINCR*UART_THR_INCR)
|
||||
#define UART_DLL_OFFSET (CONFIG_K210_16550_REGINCR*UART_DLL_INCR)
|
||||
#define UART_DLM_OFFSET (CONFIG_K210_16550_REGINCR*UART_DLM_INCR)
|
||||
#define UART_IER_OFFSET (CONFIG_K210_16550_REGINCR*UART_IER_INCR)
|
||||
#define UART_IIR_OFFSET (CONFIG_K210_16550_REGINCR*UART_IIR_INCR)
|
||||
#define UART_FCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_FCR_INCR)
|
||||
#define UART_LCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_LCR_INCR)
|
||||
#define UART_MCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_MCR_INCR)
|
||||
#define UART_LSR_OFFSET (CONFIG_K210_16550_REGINCR*UART_LSR_INCR)
|
||||
#define UART_MSR_OFFSET (CONFIG_K210_16550_REGINCR*UART_MSR_INCR)
|
||||
#define UART_SCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_SCR_INCR)
|
||||
#define UART_SRT_OFFSET (CONFIG_K210_16550_REGINCR*UART_SRT_INCR)
|
||||
#define UART_DLF_OFFSET (CONFIG_K210_16550_REGINCR*UART_DLF_INCR)
|
||||
#define UART_CPR_OFFSET (CONFIG_K210_16550_REGINCR*UART_CPR_INCR)
|
||||
#define UART_RBR_OFFSET (CONFIG_K210_UART_REGINCR*UART_RBR_INCR)
|
||||
#define UART_THR_OFFSET (CONFIG_K210_UART_REGINCR*UART_THR_INCR)
|
||||
#define UART_DLL_OFFSET (CONFIG_K210_UART_REGINCR*UART_DLL_INCR)
|
||||
#define UART_DLM_OFFSET (CONFIG_K210_UART_REGINCR*UART_DLM_INCR)
|
||||
#define UART_IER_OFFSET (CONFIG_K210_UART_REGINCR*UART_IER_INCR)
|
||||
#define UART_IIR_OFFSET (CONFIG_K210_UART_REGINCR*UART_IIR_INCR)
|
||||
#define UART_FCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_FCR_INCR)
|
||||
#define UART_LCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_LCR_INCR)
|
||||
#define UART_MCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_MCR_INCR)
|
||||
#define UART_LSR_OFFSET (CONFIG_K210_UART_REGINCR*UART_LSR_INCR)
|
||||
#define UART_MSR_OFFSET (CONFIG_K210_UART_REGINCR*UART_MSR_INCR)
|
||||
#define UART_SCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_SCR_INCR)
|
||||
#define UART_SRT_OFFSET (CONFIG_K210_UART_REGINCR*UART_SRT_INCR)
|
||||
#define UART_DLF_OFFSET (CONFIG_K210_UART_REGINCR*UART_DLF_INCR)
|
||||
#define UART_CPR_OFFSET (CONFIG_K210_UART_REGINCR*UART_CPR_INCR)
|
||||
|
||||
/* Register bit definitions *************************************************/
|
||||
|
||||
|
@ -267,36 +267,36 @@
|
|||
* Public Types
|
||||
****************************************************************************/
|
||||
|
||||
#if CONFIG_K210_16550_REGWIDTH == 8
|
||||
#if CONFIG_K210_UART_REGWIDTH == 8
|
||||
typedef uint8_t uart_datawidth_t;
|
||||
#elif CONFIG_K210_16550_REGWIDTH == 16
|
||||
#elif CONFIG_K210_UART_REGWIDTH == 16
|
||||
typedef uint16_t uart_datawidth_t;
|
||||
#elif CONFIG_K210_16550_REGWIDTH == 32
|
||||
#elif CONFIG_K210_UART_REGWIDTH == 32
|
||||
typedef uint32_t uart_datawidth_t;
|
||||
#endif
|
||||
|
||||
#if CONFIG_K210_16550_ADDRWIDTH == 0
|
||||
#if CONFIG_K210_UART_ADDRWIDTH == 0
|
||||
typedef uintptr_t uart_addrwidth_t;
|
||||
#elif CONFIG_K210_16550_ADDRWIDTH == 8
|
||||
#elif CONFIG_K210_UART_ADDRWIDTH == 8
|
||||
typedef uint8_t uart_addrwidth_t;
|
||||
#elif CONFIG_K210_16550_ADDRWIDTH == 16
|
||||
#elif CONFIG_K210_UART_ADDRWIDTH == 16
|
||||
typedef uint16_t uart_addrwidth_t;
|
||||
#elif CONFIG_K210_16550_ADDRWIDTH == 32
|
||||
#elif CONFIG_K210_UART_ADDRWIDTH == 32
|
||||
typedef uint32_t uart_addrwidth_t;
|
||||
#elif CONFIG_K210_16550_ADDRWIDTH == 64
|
||||
#elif CONFIG_K210_UART_ADDRWIDTH == 64
|
||||
typedef uint64_t uart_addrwidth_t;
|
||||
#endif
|
||||
|
||||
struct k210_16550_s
|
||||
struct k210_uart_s
|
||||
{
|
||||
uart_addrwidth_t uartbase; /* Base address of UART registers */
|
||||
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
|
||||
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
|
||||
uint32_t baud; /* Configured baud */
|
||||
uint32_t uartclk; /* UART clock frequency */
|
||||
#endif
|
||||
uart_datawidth_t ier; /* Saved IER value */
|
||||
uint8_t irq; /* IRQ associated with this UART */
|
||||
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG
|
||||
#ifndef CONFIG_K210_UART_SUPRESS_CONFIG
|
||||
uint8_t parity; /* 0=none, 1=odd, 2=even */
|
||||
uint8_t bits; /* Number of bits (7 or 8) */
|
||||
int stopbits2; /* true: Configure with 2 stop bits instead of 1 */
|
||||
|
@ -319,7 +319,7 @@ struct k210_16550_s
|
|||
*
|
||||
* Description:
|
||||
* These functions must be provided by the processor-specific code in order
|
||||
* to correctly access 16550 registers
|
||||
* to correctly access registers
|
||||
* uart_ioctl() is optional to provide custom IOCTLs
|
||||
*
|
||||
****************************************************************************/
|
||||
|
@ -334,6 +334,6 @@ void uart_putreg(uart_addrwidth_t base,
|
|||
struct file; /* Forward reference */
|
||||
int uart_ioctl(struct file *filep, int cmd, unsigned long arg);
|
||||
|
||||
void k210_uart_16550_register(void);
|
||||
#endif /* CONFIG_K210_16550_UART */
|
||||
void k210_uart_register(void);
|
||||
#endif /* CONFIG_K210_UART */
|
||||
#endif /* __INCLUDE_NUTTX_SERIAL_UART_16550_H */
|
Loading…
Reference in New Issue