Optimize k210 serial port driver for nuttx

This commit is contained in:
wgzAIIT 2022-11-28 17:39:30 +08:00
parent f1029b81c3
commit 4fd39c0dd7
17 changed files with 449 additions and 449 deletions

View File

@ -8,8 +8,8 @@ if ARCH_BOARD_EDU_RISCV64
menuconfig BSP_USING_CH376 menuconfig BSP_USING_CH376
bool "Using CH376 device" bool "Using CH376 device"
default n default n
select K210_16550_UART select K210_UART
select K210_16550_UART3 select K210_UART3
if BSP_USING_CH376 if BSP_USING_CH376
@ -40,8 +40,8 @@ menuconfig BSP_USING_TOUCH
default n default n
menuconfig BSP_USING_CAN menuconfig BSP_USING_CAN
select K210_16550_UART select K210_UART
select K210_16550_UART1 select K210_UART1
bool "Using CAN device" bool "Using CAN device"
default n default n

View File

@ -40,7 +40,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <termios.h> #include <termios.h>
#include <nuttx/ioexpander/gpio.h> #include <nuttx/ioexpander/gpio.h>
#include "k210_uart_16550.h" #include "k210_uart.h"
#include "k210_fpioa.h" #include "k210_fpioa.h"
#include "k210_gpiohs.h" #include "k210_gpiohs.h"
#include "k210_gpio_common.h" #include "k210_gpio_common.h"

View File

@ -95,7 +95,7 @@ int k210_bringup(void)
board_touch_initialize(); board_touch_initialize();
#endif #endif
#ifdef CONFIG_K210_16550_UART1 #ifdef CONFIG_K210_UART1
#ifdef CONFIG_ADAPTER_ESP8285_WIFI #ifdef CONFIG_ADAPTER_ESP8285_WIFI
sysctl_clock_enable(SYSCTL_CLOCK_UART1); sysctl_clock_enable(SYSCTL_CLOCK_UART1);
sysctl_reset(SYSCTL_RESET_UART1); sysctl_reset(SYSCTL_RESET_UART1);
@ -121,7 +121,7 @@ int k210_bringup(void)
#endif #endif
#endif #endif
#ifdef CONFIG_K210_16550_UART2 #ifdef CONFIG_K210_UART2
sysctl_clock_enable(SYSCTL_CLOCK_UART2); sysctl_clock_enable(SYSCTL_CLOCK_UART2);
sysctl_reset(SYSCTL_RESET_UART2); sysctl_reset(SYSCTL_RESET_UART2);
@ -129,7 +129,7 @@ int k210_bringup(void)
fpioa_set_function(GPIO_EC200T_TXD, FPOA_USART2_TX); fpioa_set_function(GPIO_EC200T_TXD, FPOA_USART2_TX);
#endif #endif
#ifdef CONFIG_K210_16550_UART3 #ifdef CONFIG_K210_UART3
sysctl_clock_enable(SYSCTL_CLOCK_UART3); sysctl_clock_enable(SYSCTL_CLOCK_UART3);
sysctl_reset(SYSCTL_RESET_UART3); sysctl_reset(SYSCTL_RESET_UART3);

View File

@ -36,7 +36,7 @@
#include <assert.h> #include <assert.h>
#include <fcntl.h> #include <fcntl.h>
#include <nuttx/ioexpander/gpio.h> #include <nuttx/ioexpander/gpio.h>
#include "k210_uart_16550.h" #include "k210_uart.h"
#define ERR_USB_UNKNOWN 0xFA #define ERR_USB_UNKNOWN 0xFA

View File

@ -8,8 +8,8 @@ if ARCH_BOARD_XIDATONG_RISCV64
menuconfig BSP_USING_CH376 menuconfig BSP_USING_CH376
bool "Using CH376 device" bool "Using CH376 device"
default n default n
select K210_16550_UART select K210_UART
select K210_16550_UART3 select K210_UART3
if BSP_USING_CH376 if BSP_USING_CH376
@ -40,8 +40,8 @@ menuconfig BSP_USING_TOUCH
default n default n
menuconfig BSP_USING_CAN menuconfig BSP_USING_CAN
select K210_16550_UART select K210_UART
select K210_16550_UART1 select K210_UART1
bool "Using CAN device" bool "Using CAN device"
default n default n

View File

@ -58,17 +58,17 @@ CONFIG_READLINE_TABCOMPLETION=y
CONFIG_SCHED_HPWORK=y CONFIG_SCHED_HPWORK=y
CONFIG_DEV_GPIO=y CONFIG_DEV_GPIO=y
CONFIG_BOARDCTL_RESET=y CONFIG_BOARDCTL_RESET=y
CONFIG_K210_16550_UART=y CONFIG_K210_UART=y
CONFIG_K210_16550_UART2=y CONFIG_K210_UART2=y
CONFIG_K210_16550_UART2_BASE=0x50220000 CONFIG_K210_UART2_BASE=0x50220000
CONFIG_K210_16550_UART2_CLOCK=195000000 CONFIG_K210_UART2_CLOCK=195000000
CONFIG_K210_16550_UART2_IRQ=39 CONFIG_K210_UART2_IRQ=39
CONFIG_K210_16550_UART2_BAUD=115200 CONFIG_K210_UART2_BAUD=115200
CONFIG_K210_16550_UART2_PARITY=0 CONFIG_K210_UART2_PARITY=0
CONFIG_K210_16550_UART2_BITS=8 CONFIG_K210_UART2_BITS=8
CONFIG_K210_16550_UART2_2STOP=0 CONFIG_K210_UART2_2STOP=0
CONFIG_K210_16550_UART2_RXBUFSIZE=128 CONFIG_K210_UART2_RXBUFSIZE=128
CONFIG_K210_16550_UART2_TXBUFSIZE=128 CONFIG_K210_UART2_TXBUFSIZE=128
CONFIG_SUPPORT_CONNECTION_FRAMEWORK=y CONFIG_SUPPORT_CONNECTION_FRAMEWORK=y
CONFIG_CONNECTION_FRAMEWORK_DEBUG=y CONFIG_CONNECTION_FRAMEWORK_DEBUG=y
CONFIG_CONNECTION_ADAPTER_4G=y CONFIG_CONNECTION_ADAPTER_4G=y

View File

@ -58,16 +58,16 @@ CONFIG_READLINE_TABCOMPLETION=y
CONFIG_SCHED_HPWORK=y CONFIG_SCHED_HPWORK=y
CONFIG_DEV_GPIO=y CONFIG_DEV_GPIO=y
CONFIG_BOARDCTL_RESET=y CONFIG_BOARDCTL_RESET=y
CONFIG_K210_16550_UART=y CONFIG_K210_UART=y
CONFIG_K210_16550_UART1=y CONFIG_K210_UART1=y
CONFIG_K210_16550_UART1_BASE=0x50210000 CONFIG_K210_UART1_BASE=0x50210000
CONFIG_K210_16550_UART1_CLOCK=195000000 CONFIG_K210_UART1_CLOCK=195000000
CONFIG_K210_16550_UART1_IRQ=38 CONFIG_K210_UART1_IRQ=38
CONFIG_K210_16550_UART1_BAUD=115200 CONFIG_K210_UART1_BAUD=115200
CONFIG_K210_16550_UART1_PARITY=0 CONFIG_K210_UART1_PARITY=0
CONFIG_K210_16550_UART1_BITS=8 CONFIG_K210_UART1_BITS=8
CONFIG_K210_16550_UART1_2STOP=0 CONFIG_K210_UART1_2STOP=0
CONFIG_K210_16550_UART1_RXBUFSIZE=128 CONFIG_K210_UART1_RXBUFSIZE=128
CONFIG_K210_16550_UART1_TXBUFSIZE=128 CONFIG_K210_UART1_TXBUFSIZE=128
CONFIG_BSP_USING_CAN=y CONFIG_BSP_USING_CAN=y
CONFIG_SERIAL_TERMIOS=y CONFIG_SERIAL_TERMIOS=y

View File

@ -58,6 +58,6 @@ CONFIG_READLINE_TABCOMPLETION=y
CONFIG_SCHED_HPWORK=y CONFIG_SCHED_HPWORK=y
CONFIG_DEV_GPIO=y CONFIG_DEV_GPIO=y
CONFIG_BOARDCTL_RESET=y CONFIG_BOARDCTL_RESET=y
CONFIG_K210_16550_UART=y CONFIG_K210_UART=y
CONFIG_K210_16550_UART3=y CONFIG_K210_UART3=y
CONFIG_BSP_USING_TOUCH=y CONFIG_BSP_USING_TOUCH=y

View File

@ -58,17 +58,17 @@ CONFIG_READLINE_TABCOMPLETION=y
CONFIG_SCHED_HPWORK=y CONFIG_SCHED_HPWORK=y
CONFIG_DEV_GPIO=y CONFIG_DEV_GPIO=y
CONFIG_BOARDCTL_RESET=y CONFIG_BOARDCTL_RESET=y
CONFIG_K210_16550_UART=y CONFIG_K210_UART=y
CONFIG_K210_16550_UART1=y CONFIG_K210_UART1=y
CONFIG_K210_16550_UART1_BASE=0x50210000 CONFIG_K210_UART1_BASE=0x50210000
CONFIG_K210_16550_UART1_CLOCK=195000000 CONFIG_K210_UART1_CLOCK=195000000
CONFIG_K210_16550_UART1_IRQ=38 CONFIG_K210_UART1_IRQ=38
CONFIG_K210_16550_UART1_BAUD=115200 CONFIG_K210_UART1_BAUD=115200
CONFIG_K210_16550_UART1_PARITY=0 CONFIG_K210_UART1_PARITY=0
CONFIG_K210_16550_UART1_BITS=8 CONFIG_K210_UART1_BITS=8
CONFIG_K210_16550_UART1_2STOP=0 CONFIG_K210_UART1_2STOP=0
CONFIG_K210_16550_UART1_RXBUFSIZE=128 CONFIG_K210_UART1_RXBUFSIZE=128
CONFIG_K210_16550_UART1_TXBUFSIZE=128 CONFIG_K210_UART1_TXBUFSIZE=128
CONFIG_SUPPORT_CONNECTION_FRAMEWORK=y CONFIG_SUPPORT_CONNECTION_FRAMEWORK=y
CONFIG_CONNECTION_FRAMEWORK_DEBUG=y CONFIG_CONNECTION_FRAMEWORK_DEBUG=y
CONFIG_CONNECTION_ADAPTER_WIFI=y CONFIG_CONNECTION_ADAPTER_WIFI=y

View File

@ -40,7 +40,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <termios.h> #include <termios.h>
#include <nuttx/ioexpander/gpio.h> #include <nuttx/ioexpander/gpio.h>
#include "k210_uart_16550.h" #include "k210_uart.h"
#include "k210_fpioa.h" #include "k210_fpioa.h"
#include "k210_gpiohs.h" #include "k210_gpiohs.h"
#include "k210_gpio_common.h" #include "k210_gpio_common.h"

View File

@ -95,7 +95,7 @@ int k210_bringup(void)
board_touch_initialize(); board_touch_initialize();
#endif #endif
#ifdef CONFIG_K210_16550_UART1 #ifdef CONFIG_K210_UART1
#ifdef CONFIG_ADAPTER_ESP8285_WIFI #ifdef CONFIG_ADAPTER_ESP8285_WIFI
sysctl_clock_enable(SYSCTL_CLOCK_UART1); sysctl_clock_enable(SYSCTL_CLOCK_UART1);
sysctl_reset(SYSCTL_RESET_UART1); sysctl_reset(SYSCTL_RESET_UART1);
@ -121,7 +121,7 @@ int k210_bringup(void)
#endif #endif
#endif #endif
#ifdef CONFIG_K210_16550_UART2 #ifdef CONFIG_K210_UART2
sysctl_clock_enable(SYSCTL_CLOCK_UART2); sysctl_clock_enable(SYSCTL_CLOCK_UART2);
sysctl_reset(SYSCTL_RESET_UART2); sysctl_reset(SYSCTL_RESET_UART2);
@ -129,7 +129,7 @@ int k210_bringup(void)
fpioa_set_function(GPIO_EC200T_TXD, FPOA_USART2_TX); fpioa_set_function(GPIO_EC200T_TXD, FPOA_USART2_TX);
#endif #endif
#ifdef CONFIG_K210_16550_UART3 #ifdef CONFIG_K210_UART3
sysctl_clock_enable(SYSCTL_CLOCK_UART3); sysctl_clock_enable(SYSCTL_CLOCK_UART3);
sysctl_reset(SYSCTL_RESET_UART3); sysctl_reset(SYSCTL_RESET_UART3);

View File

@ -36,7 +36,7 @@
#include <assert.h> #include <assert.h>
#include <fcntl.h> #include <fcntl.h>
#include <nuttx/ioexpander/gpio.h> #include <nuttx/ioexpander/gpio.h>
#include "k210_uart_16550.h" #include "k210_uart.h"
#define ERR_USB_UNKNOWN 0xFA #define ERR_USB_UNKNOWN 0xFA

View File

@ -40,13 +40,13 @@ config K210_LCD_BACKLIGHT
endmenu endmenu
menuconfig K210_16550_UART menuconfig K210_UART
bool "K210 16550 UART Chip support" bool "K210 UART Chip support"
select ARCH_HAVE_SERIAL_TERMIOS select ARCH_HAVE_SERIAL_TERMIOS
default n default n
if K210_16550_UART if K210_UART
config K210_16550_SERIAL_DISABLE_REORDERING config K210_SERIAL_DISABLE_REORDERING
bool "Disable reordering of ttySx devices." bool "Disable reordering of ttySx devices."
default n default n
---help--- ---help---
@ -54,227 +54,227 @@ if K210_16550_UART
console is always on /dev/ttyS0. If more than one UART is in use this 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 can, however, have the side-effect that all port mappings
(hardware USART1 -> /dev/ttyS0) change if the console is moved to another (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 config K210_UART1
bool "K210 16550 UART1" bool "K210 UART1"
default n default n
if K210_16550_UART1 if K210_UART1
config K210_16550_UART1_BASE config K210_UART1_BASE
hex "K210 16550 UART1 base address" hex "K210 UART1 base address"
default 0x50210000 default 0x50210000
config K210_16550_UART1_CLOCK config K210_UART1_CLOCK
int "K210 16550 UART1 clock" int "K210 UART1 clock"
default 195000000 default 195000000
config K210_16550_UART1_IRQ config K210_UART1_IRQ
int "K210 16550 UART1 IRQ number" int "K210 UART1 IRQ number"
default 38 default 38
config K210_16550_UART1_BAUD config K210_UART1_BAUD
int "K210 16550 UART1 BAUD" int "K210 UART1 BAUD"
default 115200 default 115200
config K210_16550_UART1_PARITY config K210_UART1_PARITY
int "K210 16550 UART1 parity" int "K210 UART1 parity"
default 0 default 0
range 0 2 range 0 2
---help--- ---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 config K210_UART1_BITS
int "K210 16550 UART1 number of bits" int "K210 UART1 number of bits"
default 8 default 8
---help--- ---help---
K210 16550 UART1 number of bits. Default: 8 K210 UART1 number of bits. Default: 8
config K210_16550_UART1_2STOP config K210_UART1_2STOP
int "K210 16550 UART1 two stop bits" int "K210 UART1 two stop bits"
default 0 default 0
---help--- ---help---
0=1 stop bit, 1=Two stop bits. Default: 1 stop bit 0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
config K210_16550_UART1_RXBUFSIZE config K210_UART1_RXBUFSIZE
int "K210 16550 UART1 Rx buffer size" int "K210 UART1 Rx buffer size"
default 256 default 256
---help--- ---help---
K210 16550 UART1 Rx buffer size. Default: 128 K210 UART1 Rx buffer size. Default: 128
config K210_16550_UART1_TXBUFSIZE config K210_UART1_TXBUFSIZE
int "K210 16550 UART1 Tx buffer size" int "K210 UART1 Tx buffer size"
default 256 default 256
---help--- ---help---
K210 16550 UART1 Tx buffer size. Default: 128 K210 UART1 Tx buffer size. Default: 128
config K210_16550_UART1_IFLOWCONTROL config K210_UART1_IFLOWCONTROL
bool "K210 16550 UART1 RTS flow control" bool "K210 UART1 RTS flow control"
default n default n
select SERIAL_IFLOWCONTROL select SERIAL_IFLOWCONTROL
---help--- ---help---
Enable K210 16550 UART1 RTS flow control Enable K210 UART1 RTS flow control
config K210_16550_UART1_OFLOWCONTROL config K210_UART1_OFLOWCONTROL
bool "K210 16550 UART1 CTS flow control" bool "K210 UART1 CTS flow control"
default n default n
select SERIAL_OFLOWCONTROL select SERIAL_OFLOWCONTROL
---help--- ---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 config K210_UART2
bool "K210 16550 UART2" bool "K210 UART2"
default n default n
if K210_16550_UART2 if K210_UART2
config K210_16550_UART2_BASE config K210_UART2_BASE
hex "K210 16550 UART2 base address" hex "K210 UART2 base address"
default 0x50220000 default 0x50220000
config K210_16550_UART2_CLOCK config K210_UART2_CLOCK
int "K210 16550 UART2 clock" int "K210 UART2 clock"
default 195000000 default 195000000
config K210_16550_UART2_IRQ config K210_UART2_IRQ
int "K210 16550 UART2 IRQ number" int "K210 UART2 IRQ number"
default 39 default 39
config K210_16550_UART2_BAUD config K210_UART2_BAUD
int "K210 16550 UART2 BAUD" int "K210 UART2 BAUD"
default 115200 default 115200
config K210_16550_UART2_PARITY config K210_UART2_PARITY
int "K210 16550 UART2 parity" int "K210 UART2 parity"
default 0 default 0
range 0 2 range 0 2
---help--- ---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 config K210_UART2_BITS
int "K210 16550 UART2 number of bits" int "K210 UART2 number of bits"
default 8 default 8
---help--- ---help---
K210 16550 UART2 number of bits. Default: 8 K210 UART2 number of bits. Default: 8
config K210_16550_UART2_2STOP config K210_UART2_2STOP
int "K210 16550 UART2 two stop bits" int "K210 UART2 two stop bits"
default 0 default 0
---help--- ---help---
0=1 stop bit, 1=Two stop bits. Default: 1 stop bit 0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
config K210_16550_UART2_RXBUFSIZE config K210_UART2_RXBUFSIZE
int "K210 16550 UART2 Rx buffer size" int "K210 UART2 Rx buffer size"
default 256 default 256
---help--- ---help---
K210 16550 UART2 Rx buffer size. Default: 128 K210 UART2 Rx buffer size. Default: 128
config K210_16550_UART2_TXBUFSIZE config K210_UART2_TXBUFSIZE
int "K210 16550 UART2 Tx buffer size" int "K210 UART2 Tx buffer size"
default 256 default 256
---help--- ---help---
K210 16550 UART2 Tx buffer size. Default: 128 K210 UART2 Tx buffer size. Default: 128
config K210_16550_UART2_IFLOWCONTROL config K210_UART2_IFLOWCONTROL
bool "K210 16550 UART2 RTS flow control" bool "K210 UART2 RTS flow control"
default n default n
select SERIAL_IFLOWCONTROL select SERIAL_IFLOWCONTROL
---help--- ---help---
Enable K210 16550 UART2 RTS flow control Enable K210 UART2 RTS flow control
config K210_16550_UART2_OFLOWCONTROL config K210_UART2_OFLOWCONTROL
bool "K210 16550 UART2 CTS flow control" bool "K210 UART2 CTS flow control"
default n default n
select SERIAL_OFLOWCONTROL select SERIAL_OFLOWCONTROL
---help--- ---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 config K210_UART3
bool "K210 16550 UART3" bool "K210 UART3"
default n default n
if K210_16550_UART3 if K210_UART3
config K210_16550_UART3_BASE config K210_UART3_BASE
hex "K210 16550 UART3 base address" hex "K210 UART3 base address"
default 0x50230000 default 0x50230000
config K210_16550_UART3_CLOCK config K210_UART3_CLOCK
int "K210 16550 UART3 clock" int "K210 UART3 clock"
default 195000000 default 195000000
config K210_16550_UART3_IRQ config K210_UART3_IRQ
int "K210 16550 UART3 IRQ number" int "K210 UART3 IRQ number"
default 40 default 40
config K210_16550_UART3_BAUD config K210_UART3_BAUD
int "K210 16550 UART3 BAUD" int "K210 UART3 BAUD"
default 115200 default 115200
config K210_16550_UART3_PARITY config K210_UART3_PARITY
int "K210 16550 UART3 parity" int "K210 UART3 parity"
default 0 default 0
range 0 2 range 0 2
---help--- ---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 config K210_UART3_BITS
int "K210 16550 UART3 number of bits" int "K210 UART3 number of bits"
default 8 default 8
---help--- ---help---
K210 16550 UART3 number of bits. Default: 8 K210 UART3 number of bits. Default: 8
config K210_16550_UART3_2STOP config K210_UART3_2STOP
int "K210 16550 UART3 two stop bits" int "K210 UART3 two stop bits"
default 0 default 0
---help--- ---help---
0=1 stop bit, 1=Two stop bits. Default: 1 stop bit 0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
config K210_16550_UART3_RXBUFSIZE config K210_UART3_RXBUFSIZE
int "K210 16550 UART3 Rx buffer size" int "K210 UART3 Rx buffer size"
default 256 default 256
---help--- ---help---
K210 16550 UART3 Rx buffer size. Default: 128 K210 UART3 Rx buffer size. Default: 128
config K210_16550_UART3_TXBUFSIZE config K210_UART3_TXBUFSIZE
int "K210 16550 UART3 Tx buffer size" int "K210 UART3 Tx buffer size"
default 256 default 256
---help--- ---help---
K210 16550 UART3 Tx buffer size. Default: 128 K210 UART3 Tx buffer size. Default: 128
config K210_16550_UART3_IFLOWCONTROL config K210_UART3_IFLOWCONTROL
bool "K210 16550 UART3 RTS flow control" bool "K210 UART3 RTS flow control"
default n default n
select SERIAL_IFLOWCONTROL select SERIAL_IFLOWCONTROL
---help--- ---help---
Enable K210 16550 UART3 RTS flow control Enable K210 UART3 RTS flow control
config K210_16550_UART3_OFLOWCONTROL config K210_UART3_OFLOWCONTROL
bool "K210 16550 UART3 CTS flow control" bool "K210 UART3 CTS flow control"
default n default n
select SERIAL_OFLOWCONTROL select SERIAL_OFLOWCONTROL
---help--- ---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 config K210_UART_SUPRESS_CONFIG
bool "Suppress K210 16550 configuration" bool "Suppress K210 configuration"
default n default n
config K210_16550_SUPRESS_INITIAL_CONFIG config K210_UART_SUPRESS_INITIAL_CONFIG
bool "Suppress initial K210 16550 configuration" bool "Suppress initial K210 configuration"
depends on !K210_16550_SUPRESS_CONFIG depends on !K210_UART_SUPRESS_CONFIG
default y default y
---help--- ---help---
This option is useful, for example, if you are using a bootloader 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 just leave the existing console configuration in place. Default: n
config SERIAL_UART_ARCH_MMIO config SERIAL_UART_ARCH_MMIO
@ -285,21 +285,21 @@ if K210_16550_UART
bool "Platform has own custom IOCTL" bool "Platform has own custom IOCTL"
default n default n
config K210_16550_REGINCR config K210_UART_REGINCR
int "Address increment between K210 16550 registers" int "Address increment between K210 registers"
default 4 default 4
---help--- ---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 Default: 1
config K210_16550_REGWIDTH config K210_UART_REGWIDTH
int "Bit width of K210 16550 registers" int "Bit width of K210 registers"
default 32 default 32
---help--- ---help---
The bit width of registers. Options are 8, 16, or 32. Default: 32 The bit width of registers. Options are 8, 16, or 32. Default: 32
config K210_16550_ADDRWIDTH config K210_UART_ADDRWIDTH
int "Address width of K210 16550 registers" int "Address width of K210 registers"
default 32 default 32
---help--- ---help---
The bit width of registers. Options are 0, 8, 16, or 32. The bit width of registers. Options are 0, 8, 16, or 32.

View File

@ -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_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_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_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) ifeq ($(CONFIG_BUILD_PROTECTED),y)
CMN_CSRCS += riscv_task_start.c riscv_pthread_start.c CMN_CSRCS += riscv_task_start.c riscv_pthread_start.c

View File

@ -52,7 +52,7 @@
#include "k210_config.h" #include "k210_config.h"
#include "chip.h" #include "chip.h"
#include "k210.h" #include "k210.h"
#include "k210_uart_16550.h" #include "k210_uart.h"
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@ -649,9 +649,9 @@ void riscv_serialinit(void)
/* Register all UARTs */ /* Register all UARTs */
uart_register("/dev/ttyS0", &TTYS0_DEV); uart_register("/dev/ttyS0", &TTYS0_DEV);
#ifdef CONFIG_K210_16550_UART #ifdef CONFIG_K210_UART
/* Register UART1-UART3 */ /* Register UART1-UART3 */
k210_uart_16550_register(); k210_uart_register();
#endif #endif
} }

View File

@ -11,7 +11,7 @@
*/ */
/** /**
* @file k210_uart_16550.c * @file k210_uart.c
* @brief k210 uart1-uart3 support * @brief k210 uart1-uart3 support
* @version 1.0 * @version 1.0
* @author AIIT XUOS Lab * @author AIIT XUOS Lab
@ -37,13 +37,13 @@
#include <nuttx/arch.h> #include <nuttx/arch.h>
#include <nuttx/serial/serial.h> #include <nuttx/serial/serial.h>
#include <nuttx/fs/ioctl.h> #include <nuttx/fs/ioctl.h>
#include "k210_uart_16550.h" #include "k210_uart.h"
#ifdef CONFIG_SERIAL_TERMIOS #ifdef CONFIG_SERIAL_TERMIOS
# include <termios.h> # include <termios.h>
#endif #endif
#ifdef CONFIG_K210_16550_UART #ifdef CONFIG_K210_UART
/**************************************************************************** /****************************************************************************
@ -58,31 +58,31 @@
* Private Function Prototypes * Private Function Prototypes
****************************************************************************/ ****************************************************************************/
static int k210_16550_setup(FAR struct uart_dev_s *dev); static int k210_uart_setup(FAR struct uart_dev_s *dev);
static void k210_16550_shutdown(FAR struct uart_dev_s *dev); static void k210_uart_shutdown(FAR struct uart_dev_s *dev);
static int k210_16550_attach(FAR struct uart_dev_s *dev); static int k210_uart_attach(FAR 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);
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);
static int k210_16550_ioctl(FAR struct file *filep, int cmd, unsigned long arg); static int k210_uart_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 int k210_uart_receive(FAR struct uart_dev_s *dev, unsigned int *status);
static void k210_16550_rxint(FAR struct uart_dev_s *dev, bool enable); static void k210_uart_rxint(FAR struct uart_dev_s *dev, bool enable);
static bool k210_16550_rxavailable(FAR struct uart_dev_s *dev); static bool k210_uart_rxavailable(FAR struct uart_dev_s *dev);
#ifdef CONFIG_SERIAL_IFLOWCONTROL #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); unsigned int nbuffered, bool upper);
#endif #endif
#ifdef CONFIG_SERIAL_TXDMA #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);
static void k210_16550_dmatxavail(FAR struct uart_dev_s *dev); static void k210_uart_dmatxavail(FAR struct uart_dev_s *dev);
#endif #endif
#ifdef CONFIG_SERIAL_RXDMA #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 #endif
static void k210_16550_send(FAR struct uart_dev_s *dev, int ch); static void k210_uart_send(FAR struct uart_dev_s *dev, int ch);
static void k210_16550_txint(FAR struct uart_dev_s *dev, bool enable); static void k210_uart_txint(FAR struct uart_dev_s *dev, bool enable);
static bool k210_16550_txready(FAR struct uart_dev_s *dev); static bool k210_uart_txready(FAR struct uart_dev_s *dev);
static bool k210_16550_txempty(FAR struct uart_dev_s *dev); static bool k210_uart_txempty(FAR struct uart_dev_s *dev);
/**************************************************************************** /****************************************************************************
* Private Data * 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 = static const struct uart_ops_s g_uart_ops =
{ {
.setup = k210_16550_setup, .setup = k210_uart_setup,
.shutdown = k210_16550_shutdown, .shutdown = k210_uart_shutdown,
.attach = k210_16550_attach, .attach = k210_uart_attach,
.detach = k210_16550_detach, .detach = k210_uart_detach,
.ioctl = k210_16550_ioctl, .ioctl = k210_uart_ioctl,
.receive = k210_16550_receive, .receive = k210_uart_receive,
.rxint = k210_16550_rxint, .rxint = k210_uart_rxint,
.rxavailable = k210_16550_rxavailable, .rxavailable = k210_uart_rxavailable,
#ifdef CONFIG_SERIAL_IFLOWCONTROL #ifdef CONFIG_SERIAL_IFLOWCONTROL
.rxflowcontrol = k210_16550_rxflowcontrol, .rxflowcontrol = k210_uart_rxflowcontrol,
#endif #endif
#ifdef CONFIG_SERIAL_TXDMA #ifdef CONFIG_SERIAL_TXDMA
.dmasend = k210_16550_dmasend, .dmasend = k210_uart_dmasend,
#endif #endif
#ifdef CONFIG_SERIAL_RXDMA #ifdef CONFIG_SERIAL_RXDMA
.dmareceive = k210_16550_dmareceive, .dmareceive = k210_uart_dmareceive,
.dmarxfree = k210_16550_dmarxfree, .dmarxfree = k210_uart_dmarxfree,
#endif #endif
#ifdef CONFIG_SERIAL_TXDMA #ifdef CONFIG_SERIAL_TXDMA
.dmatxavail = k210_16550_dmatxavail, .dmatxavail = k210_uart_dmatxavail,
#endif #endif
.send = k210_16550_send, .send = k210_uart_send,
.txint = k210_16550_txint, .txint = k210_uart_txint,
.txready = k210_16550_txready, .txready = k210_uart_txready,
.txempty = k210_16550_txempty, .txempty = k210_uart_txempty,
}; };
/* I/O buffers */ /* I/O buffers */
#ifdef CONFIG_K210_16550_UART1 #ifdef CONFIG_K210_UART1
static char g_uart1rxbuffer[CONFIG_K210_16550_UART1_RXBUFSIZE]; static char g_uart1rxbuffer[CONFIG_K210_UART1_RXBUFSIZE];
static char g_uart1txbuffer[CONFIG_K210_16550_UART1_TXBUFSIZE]; static char g_uart1txbuffer[CONFIG_K210_UART1_TXBUFSIZE];
#endif #endif
#ifdef CONFIG_K210_16550_UART2 #ifdef CONFIG_K210_UART2
static char g_uart2rxbuffer[CONFIG_K210_16550_UART2_RXBUFSIZE]; static char g_uart2rxbuffer[CONFIG_K210_UART2_RXBUFSIZE];
static char g_uart2txbuffer[CONFIG_K210_16550_UART2_TXBUFSIZE]; static char g_uart2txbuffer[CONFIG_K210_UART2_TXBUFSIZE];
#endif #endif
#ifdef CONFIG_K210_16550_UART3 #ifdef CONFIG_K210_UART3
static char g_uart3rxbuffer[CONFIG_K210_16550_UART3_RXBUFSIZE]; static char g_uart3rxbuffer[CONFIG_K210_UART3_RXBUFSIZE];
static char g_uart3txbuffer[CONFIG_K210_16550_UART3_TXBUFSIZE]; static char g_uart3txbuffer[CONFIG_K210_UART3_TXBUFSIZE];
#endif #endif
/* This describes the state of the 16550 uart1 port. */ /* This describes the state of the uart1 port. */
#ifdef CONFIG_K210_16550_UART1 #ifdef CONFIG_K210_UART1
static struct k210_16550_s g_uart1priv = static struct k210_uart_s g_uart1priv =
{ {
.uartbase = CONFIG_K210_16550_UART1_BASE, .uartbase = CONFIG_K210_UART1_BASE,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG #ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.baud = CONFIG_K210_16550_UART1_BAUD, .baud = CONFIG_K210_UART1_BAUD,
.uartclk = CONFIG_K210_16550_UART1_CLOCK, .uartclk = CONFIG_K210_UART1_CLOCK,
#endif #endif
.irq = CONFIG_K210_16550_UART1_IRQ, .irq = CONFIG_K210_UART1_IRQ,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG #ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.parity = CONFIG_K210_16550_UART1_PARITY, .parity = CONFIG_K210_UART1_PARITY,
.bits = CONFIG_K210_16550_UART1_BITS, .bits = CONFIG_K210_UART1_BITS,
.stopbits2 = CONFIG_K210_16550_UART1_2STOP, .stopbits2 = CONFIG_K210_UART1_2STOP,
#if defined(CONFIG_K210_16550_UART1_IFLOWCONTROL) || defined(CONFIG_K210_16550_UART1_OFLOWCONTROL) #if defined(CONFIG_K210_UART1_IFLOWCONTROL) || defined(CONFIG_K210_UART1_OFLOWCONTROL)
.flow = true, .flow = true,
#endif #endif
#endif #endif
@ -157,12 +157,12 @@ static uart_dev_t g_uart1port =
{ {
.recv = .recv =
{ {
.size = CONFIG_K210_16550_UART1_RXBUFSIZE, .size = CONFIG_K210_UART1_RXBUFSIZE,
.buffer = g_uart1rxbuffer, .buffer = g_uart1rxbuffer,
}, },
.xmit = .xmit =
{ {
.size = CONFIG_K210_16550_UART1_TXBUFSIZE, .size = CONFIG_K210_UART1_TXBUFSIZE,
.buffer = g_uart1txbuffer, .buffer = g_uart1txbuffer,
}, },
.ops = &g_uart_ops, .ops = &g_uart_ops,
@ -170,22 +170,22 @@ static uart_dev_t g_uart1port =
}; };
#endif #endif
/* This describes the state of the 16550 uart2 port. */ /* This describes the state of the uart2 port. */
#ifdef CONFIG_K210_16550_UART2 #ifdef CONFIG_K210_UART2
static struct k210_16550_s g_uart2priv = static struct k210_uart_s g_uart2priv =
{ {
.uartbase = CONFIG_K210_16550_UART2_BASE, .uartbase = CONFIG_K210_UART2_BASE,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG #ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.baud = CONFIG_K210_16550_UART2_BAUD, .baud = CONFIG_K210_UART2_BAUD,
.uartclk = CONFIG_K210_16550_UART2_CLOCK, .uartclk = CONFIG_K210_UART2_CLOCK,
#endif #endif
.irq = CONFIG_K210_16550_UART2_IRQ, .irq = CONFIG_K210_UART2_IRQ,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG #ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.parity = CONFIG_K210_16550_UART2_PARITY, .parity = CONFIG_K210_UART2_PARITY,
.bits = CONFIG_K210_16550_UART2_BITS, .bits = CONFIG_K210_UART2_BITS,
.stopbits2 = CONFIG_K210_16550_UART2_2STOP, .stopbits2 = CONFIG_K210_UART2_2STOP,
#if defined(CONFIG_K210_16550_UART2_IFLOWCONTROL) || defined(CONFIG_K210_16550_UART2_OFLOWCONTROL) #if defined(CONFIG_K210_UART2_IFLOWCONTROL) || defined(CONFIG_K210_UART2_OFLOWCONTROL)
.flow = true, .flow = true,
#endif #endif
#endif #endif
@ -195,12 +195,12 @@ static uart_dev_t g_uart2port =
{ {
.recv = .recv =
{ {
.size = CONFIG_K210_16550_UART2_RXBUFSIZE, .size = CONFIG_K210_UART2_RXBUFSIZE,
.buffer = g_uart2rxbuffer, .buffer = g_uart2rxbuffer,
}, },
.xmit = .xmit =
{ {
.size = CONFIG_K210_16550_UART2_TXBUFSIZE, .size = CONFIG_K210_UART2_TXBUFSIZE,
.buffer = g_uart2txbuffer, .buffer = g_uart2txbuffer,
}, },
.ops = &g_uart_ops, .ops = &g_uart_ops,
@ -209,22 +209,22 @@ static uart_dev_t g_uart2port =
#endif #endif
/* This describes the state of the 16550 uart1 port. */ /* This describes the state of the uart1 port. */
#ifdef CONFIG_K210_16550_UART3 #ifdef CONFIG_K210_UART3
static struct k210_16550_s g_uart3priv = static struct k210_uart_s g_uart3priv =
{ {
.uartbase = CONFIG_K210_16550_UART3_BASE, .uartbase = CONFIG_K210_UART3_BASE,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG #ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.baud = CONFIG_K210_16550_UART3_BAUD, .baud = CONFIG_K210_UART3_BAUD,
.uartclk = CONFIG_K210_16550_UART3_CLOCK, .uartclk = CONFIG_K210_UART3_CLOCK,
#endif #endif
.irq = CONFIG_K210_16550_UART3_IRQ, .irq = CONFIG_K210_UART3_IRQ,
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG #ifndef CONFIG_K210_UART_SUPRESS_CONFIG
.parity = CONFIG_K210_16550_UART3_PARITY, .parity = CONFIG_K210_UART3_PARITY,
.bits = CONFIG_K210_16550_UART3_BITS, .bits = CONFIG_K210_UART3_BITS,
.stopbits2 = CONFIG_K210_16550_UART3_2STOP, .stopbits2 = CONFIG_K210_UART3_2STOP,
#if defined(CONFIG_K210_16550_UART3_IFLOWCONTROL) || defined(CONFIG_K210_16550_UART3_OFLOWCONTROL) #if defined(CONFIG_K210_UART3_IFLOWCONTROL) || defined(CONFIG_K210_UART3_OFLOWCONTROL)
.flow = true, .flow = true,
#endif #endif
#endif #endif
@ -234,12 +234,12 @@ static uart_dev_t g_uart3port =
{ {
.recv = .recv =
{ {
.size = CONFIG_K210_16550_UART3_RXBUFSIZE, .size = CONFIG_K210_UART3_RXBUFSIZE,
.buffer = g_uart3rxbuffer, .buffer = g_uart3rxbuffer,
}, },
.xmit = .xmit =
{ {
.size = CONFIG_K210_16550_UART3_TXBUFSIZE, .size = CONFIG_K210_UART3_TXBUFSIZE,
.buffer = g_uart3txbuffer, .buffer = g_uart3txbuffer,
}, },
.ops = &g_uart_ops, .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) int offset)
{ {
#ifdef CONFIG_SERIAL_UART_ARCH_MMIO #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) uart_datawidth_t value)
{ {
#ifdef CONFIG_SERIAL_UART_ARCH_MMIO #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) FAR uart_datawidth_t *ier)
{ {
if (ier) if (ier)
@ -293,28 +293,28 @@ static inline void k210_16550_disableuartint(FAR struct k210_16550_s *priv,
} }
priv->ier &= ~UART_IER_ALLIE; 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) uint32_t ier)
{ {
priv->ier |= ier & UART_IER_ALLIE; 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) bool enable)
{ {
uint32_t lcr = k210_16550_serialin(priv, UART_LCR_OFFSET); uint32_t lcr = k210_uart_serialin(priv, UART_LCR_OFFSET);
if (enable) if (enable)
{ {
@ -325,11 +325,11 @@ static inline void k210_16550_enablebreaks(FAR struct k210_16550_s *priv,
lcr &= ~UART_LCR_BRK; 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: * Description:
* Select a divider to produce the BAUD from the UART_CLK. * 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 #ifndef CONFIG_K210_UART_SUPRESS_CONFIG
static inline uint32_t k210_16550_divisor(FAR struct k210_16550_s *priv) static inline uint32_t k210_uart_divisor(FAR struct k210_uart_s *priv)
{ {
return (priv->uartclk / (uint32_t)priv->baud); return (priv->uartclk / (uint32_t)priv->baud);
// return (priv->uartclk + (priv->baud << 3)) / (priv->baud << 4); // 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 #endif
/**************************************************************************** /****************************************************************************
* Name: k210_16550_setup * Name: k210_uart_setup
* *
* Description: * Description:
* Configure the UART baud, bits, parity, fifos, etc. This * 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 #ifndef CONFIG_K210_UART_SUPRESS_CONFIG
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;
uint16_t div; uint16_t div;
uint8_t dlh, dll, dlf; uint8_t dlh, dll, dlf;
uint32_t lcr; uint32_t lcr;
@ -372,17 +372,17 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
/* Clear fifos */ /* Clear fifos */
k210_16550_serialout(priv, UART_FCR_OFFSET, k210_uart_serialout(priv, UART_FCR_OFFSET,
(UART_FCR_RXRST | UART_FCR_TXRST)); (UART_FCR_RXRST | UART_FCR_TXRST));
/* Set trigger */ /* Set trigger */
k210_16550_serialout(priv, UART_FCR_OFFSET, k210_uart_serialout(priv, UART_FCR_OFFSET,
(UART_FCR_FIFOEN | UART_FCR_RXTRIGGER_8)); (UART_FCR_FIFOEN | UART_FCR_RXTRIGGER_8));
/* Set up the IER */ /* 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 */ /* Set up the LCR */
@ -423,33 +423,33 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
/* Enter DLAB=1 */ /* 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 */ /* Set the BAUD divisor */
div = k210_16550_divisor(priv); div = k210_uart_divisor(priv);
dlh = div >> 12; dlh = div >> 12;
dll = (div - (dlh << 12)) / 16; dll = (div - (dlh << 12)) / 16;
dlf = div - (dlh << 12) - dll * 16; dlf = div - (dlh << 12) - dll * 16;
k210_16550_serialout(priv, UART_DLM_OFFSET, dlh); k210_uart_serialout(priv, UART_DLM_OFFSET, dlh);
k210_16550_serialout(priv, UART_DLL_OFFSET, dll); k210_uart_serialout(priv, UART_DLL_OFFSET, dll);
k210_16550_serialout(priv, UART_DLF_OFFSET, dlf); k210_uart_serialout(priv, UART_DLF_OFFSET, dlf);
/* Clear DLAB */ /* Clear DLAB */
k210_16550_serialout(priv, UART_LCR_OFFSET, lcr); k210_uart_serialout(priv, UART_LCR_OFFSET, lcr);
/* Configure the FIFOs */ /* 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_RXTRIGGER_8 | UART_FCR_TXRST | UART_FCR_RXRST |
UART_FCR_FIFOEN)); UART_FCR_FIFOEN));
/* Set up the auto flow control */ /* Set up the auto flow control */
#if defined(CONFIG_SERIAL_IFLOWCONTROL) || defined(CONFIG_SERIAL_OFLOWCONTROL) #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) if (priv->flow)
{ {
mcr |= UART_MCR_AFCE; mcr |= UART_MCR_AFCE;
@ -461,9 +461,9 @@ static int k210_16550_setup(FAR struct uart_dev_s *dev)
mcr |= UART_MCR_RTS; 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) */ #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: * Description:
* Disable the UART. This method is called when the serial * 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; FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
k210_16550_disableuartint(priv, NULL); k210_uart_disableuartint(priv, NULL);
} }
/**************************************************************************** /****************************************************************************
* Name: k210_16550_attach * Name: k210_uart_attach
* *
* Description: * Description:
* Configure the UART to operation in interrupt driven mode. This method * 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; int ret;
/* Attach and enable the IRQ */ /* 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 #ifndef CONFIG_ARCH_NOINTC
if (ret == OK) 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: * Description:
* Detach UART interrupts. This method is called when the serial port is * 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); up_disable_irq(priv->irq);
irq_detach(priv->irq); irq_detach(priv->irq);
} }
/**************************************************************************** /****************************************************************************
* Name: k210_16550_interrupt * Name: k210_uart_interrupt
* *
* Description: * Description:
* This is the UART interrupt handler. It will be invoked when an * This is the UART interrupt handler. It will be invoked when an
* interrupt received on the 'irq' It should call uart_transmitchars or * interrupt received on the 'irq' It should call uart_transmitchars or
* uart_receivechar to perform the appropriate data transfers. The * uart_receivechar to perform the appropriate data transfers. The
* interrupt handling logic must be able to map the 'irq' number into 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 uart_dev_s *dev = (struct uart_dev_s *)arg;
FAR struct k210_16550_s *priv; FAR struct k210_uart_s *priv;
uint32_t status; uint32_t status;
int passes; int passes;
uint8_t v_int_status; uint8_t v_int_status;
DEBUGASSERT(dev != NULL && dev->priv != NULL); 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, /* Loop until there are no characters to be transferred or,
* until we have been looping for a long time. * 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 * termination conditions
*/ */
status = k210_16550_serialin(priv, UART_IIR_OFFSET); status = k210_uart_serialin(priv, UART_IIR_OFFSET);
if (status == 0) 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: * Description:
* All ioctl calls will be routed through this method * 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 inode *inode = filep->f_inode;
FAR struct uart_dev_s *dev = inode->i_private; 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; int ret;
#ifdef CONFIG_SERIAL_UART_ARCH_IOCTL #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 #ifdef CONFIG_SERIAL_TIOCSERGSTRUCT
case 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) if (!user)
{ {
ret = -EINVAL; ret = -EINVAL;
} }
else else
{ {
memcpy(user, dev, sizeof(struct k210_16550_s)); memcpy(user, dev, sizeof(struct k210_uart_s));
} }
} }
break; 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 */ case TIOCSBRK: /* BSD compatibility: Turn break on, unconditionally */
{ {
irqstate_t flags = enter_critical_section(); irqstate_t flags = enter_critical_section();
k210_16550_enablebreaks(priv, true); k210_uart_enablebreaks(priv, true);
leave_critical_section(flags); leave_critical_section(flags);
} }
break; break;
@ -659,12 +659,12 @@ static int k210_16550_ioctl(struct file *filep, int cmd, unsigned long arg)
{ {
irqstate_t flags; irqstate_t flags;
flags = enter_critical_section(); flags = enter_critical_section();
k210_16550_enablebreaks(priv, false); k210_uart_enablebreaks(priv, false);
leave_critical_section(flags); leave_critical_section(flags);
} }
break; 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: case TCGETS:
{ {
FAR struct termios *termiosp = (FAR struct termios *)arg; 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; priv->flow = (termiosp->c_cflag & CRTSCTS) != 0;
#endif #endif
k210_16550_setup(dev); k210_uart_setup(dev);
leave_critical_section(flags); leave_critical_section(flags);
} }
break; 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: * Description:
* Called (usually) from the interrupt level to receive one * 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; uint32_t rbr = 0;
*status = k210_16550_serialin(priv, UART_LSR_OFFSET); *status = k210_uart_serialin(priv, UART_LSR_OFFSET);
rbr = k210_16550_serialin(priv, UART_RBR_OFFSET); rbr = k210_uart_serialin(priv, UART_RBR_OFFSET);
return rbr; return rbr;
} }
/**************************************************************************** /****************************************************************************
* Name: k210_16550_rxint * Name: k210_uart_rxint
* *
* Description: * Description:
* Call to enable or disable RX interrupts * 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) if (enable)
{ {
@ -812,25 +812,25 @@ static void k210_16550_rxint(struct uart_dev_s *dev, bool enable)
priv->ier &= ~UART_IER_ERBFI; 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: * Description:
* Return true if the receive fifo is not empty * 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; FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
return ((k210_16550_serialin(priv, UART_LSR_OFFSET) & UART_LSR_DR) != 0); return ((k210_uart_serialin(priv, UART_LSR_OFFSET) & UART_LSR_DR) != 0);
} }
/**************************************************************************** /****************************************************************************
* Name: k210_16550_dma* * Name: k210_uart_dma*
* *
* Description: * Description:
* Stubbed out DMA-related methods * Stubbed out DMA-related methods
@ -838,11 +838,11 @@ static bool k210_16550_rxavailable(struct uart_dev_s *dev)
****************************************************************************/ ****************************************************************************/
#ifdef CONFIG_SERIAL_IFLOWCONTROL #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) unsigned int nbuffered, bool upper)
{ {
#ifndef CONFIG_K210_16550_SUPRESS_CONFIG #ifndef CONFIG_K210_UART_SUPRESS_CONFIG
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 (priv->flow) if (priv->flow)
{ {
@ -853,7 +853,7 @@ static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
* input is received. * input is received.
*/ */
k210_16550_rxint(dev, !upper); k210_uart_rxint(dev, !upper);
return true; return true;
} }
#endif #endif
@ -863,7 +863,7 @@ static bool k210_16550_rxflowcontrol(struct uart_dev_s *dev,
#endif #endif
/**************************************************************************** /****************************************************************************
* Name: k210_16550_dma* * Name: k210_uart_dma*
* *
* Description: * Description:
* Stub functions used when serial DMA is enabled. * 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 #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 #endif
#ifdef CONFIG_SERIAL_RXDMA #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 #endif
#ifdef CONFIG_SERIAL_TXDMA #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 #endif
/**************************************************************************** /****************************************************************************
* Name: k210_16550_send * Name: k210_uart_send
* *
* Description: * Description:
* This method will send one byte on the UART * 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; FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
k210_16550_serialout(priv, UART_THR_OFFSET, (uart_datawidth_t)ch); k210_uart_serialout(priv, UART_THR_OFFSET, (uart_datawidth_t)ch);
} }
/**************************************************************************** /****************************************************************************
* Name: k210_16550_txint * Name: k210_uart_txint
* *
* Description: * Description:
* Call to enable or disable TX interrupts * 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; irqstate_t flags;
flags = enter_critical_section(); flags = enter_critical_section();
if (enable) if (enable)
{ {
priv->ier |= UART_IER_ETBEI; 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 /* Fake a TX interrupt here by just calling uart_xmitchars() with
* interrupts disabled (note this may recurse). * interrupts disabled (note this may recurse).
@ -934,38 +934,38 @@ static void k210_16550_txint(struct uart_dev_s *dev, bool enable)
else else
{ {
priv->ier &= ~UART_IER_ETBEI; 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); leave_critical_section(flags);
} }
/**************************************************************************** /****************************************************************************
* Name: k210_16550_txready * Name: k210_uart_txready
* *
* Description: * Description:
* Return true if the tranmsit fifo is not full * 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; FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
return (((k210_16550_serialin(priv, UART_LSR_OFFSET) & UART_LSR_THRE) != 0)); return (((k210_uart_serialin(priv, UART_LSR_OFFSET) & UART_LSR_THRE) != 0));
} }
/**************************************************************************** /****************************************************************************
* Name: k210_16550_txempty * Name: k210_uart_txempty
* *
* Description: * Description:
* Return true if the transmit fifo is empty * 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; FAR struct k210_uart_s *priv = (FAR struct k210_uart_s *)dev->priv;
return ((k210_16550_serialin(priv, UART_LSR_OFFSET) & UART_LSR_TEMT) != 0); 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: * Description:
* Register serial console and serial ports. This assumes that * 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) #if defined(CONFIG_K210_UART1)
k210_16550_setup(&g_uart1port); k210_uart_setup(&g_uart1port);
uart_register("/dev/ttyS1", &g_uart1port); uart_register("/dev/ttyS1", &g_uart1port);
#endif #endif
#if defined(CONFIG_K210_16550_UART2) #if defined(CONFIG_K210_UART2)
k210_16550_setup(&g_uart2port); k210_uart_setup(&g_uart2port);
uart_register("/dev/ttyS2", &g_uart2port); uart_register("/dev/ttyS2", &g_uart2port);
#endif #endif
#if defined(CONFIG_K210_16550_UART3) #if defined(CONFIG_K210_UART3)
k210_16550_setup(&g_uart3port); k210_uart_setup(&g_uart3port);
uart_register("/dev/ttyS3", &g_uart3port); uart_register("/dev/ttyS3", &g_uart3port);
#endif #endif
} }
#endif /* CONFIG_K210_16550_UART */ #endif /* CONFIG_K210_UART */

View File

@ -18,8 +18,8 @@
* @date 2022.09.28 * @date 2022.09.28
*/ */
#ifndef __INCLUDE_NUTTX_SERIAL_UART_K210_16550_H #ifndef __INCLUDE_NUTTX_SERIAL_UART_K210_H
#define __INCLUDE_NUTTX_SERIAL_UART_K210_16550_H #define __INCLUDE_NUTTX_SERIAL_UART_K210_H
/**************************************************************************** /****************************************************************************
* Included Files * Included Files
@ -27,7 +27,7 @@
#include <nuttx/config.h> #include <nuttx/config.h>
#ifdef CONFIG_K210_16550_UART #ifdef CONFIG_K210_UART
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@ -38,7 +38,7 @@
/* Are any UARTs enabled? */ /* Are any UARTs enabled? */
#undef HAVE_UART #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 # define HAVE_UART 1
#endif #endif
@ -46,78 +46,78 @@
* register bit width. * register bit width.
*/ */
#ifndef CONFIG_K210_16550_REGINCR #ifndef CONFIG_K210_UART_REGINCR
# error "CONFIG_K210_16550_REGINCR not defined" # error "CONFIG_K210_UART_REGINCR not defined"
#endif #endif
#if CONFIG_K210_16550_REGINCR != 1 && CONFIG_K210_16550_REGINCR != 2 && CONFIG_K210_16550_REGINCR != 4 #if CONFIG_K210_UART_REGINCR != 1 && CONFIG_K210_UART_REGINCR != 2 && CONFIG_K210_UART_REGINCR != 4
# error "CONFIG_K210_16550_REGINCR not supported" # error "CONFIG_K210_UART_REGINCR not supported"
#endif #endif
#ifndef CONFIG_K210_16550_REGWIDTH #ifndef CONFIG_K210_UART_REGWIDTH
# error "CONFIG_K210_16550_REGWIDTH not defined" # error "CONFIG_K210_UART_REGWIDTH not defined"
#endif #endif
#if CONFIG_K210_16550_REGWIDTH != 8 && CONFIG_K210_16550_REGWIDTH != 16 && CONFIG_K210_16550_REGWIDTH != 32 #if CONFIG_K210_UART_REGWIDTH != 8 && CONFIG_K210_UART_REGWIDTH != 16 && CONFIG_K210_UART_REGWIDTH != 32
# error "CONFIG_K210_16550_REGWIDTH not supported" # error "CONFIG_K210_UART_REGWIDTH not supported"
#endif #endif
#ifndef CONFIG_K210_16550_ADDRWIDTH #ifndef CONFIG_K210_UART_ADDRWIDTH
# error "CONFIG_K210_16550_ADDRWIDTH not defined" # error "CONFIG_K210_UART_ADDRWIDTH not defined"
#endif #endif
#if CONFIG_K210_16550_ADDRWIDTH != 0 && CONFIG_K210_16550_ADDRWIDTH != 8 && \ #if CONFIG_K210_UART_ADDRWIDTH != 0 && CONFIG_K210_UART_ADDRWIDTH != 8 && \
CONFIG_K210_16550_ADDRWIDTH != 16 && CONFIG_K210_16550_ADDRWIDTH != 32 && \ CONFIG_K210_UART_ADDRWIDTH != 16 && CONFIG_K210_UART_ADDRWIDTH != 32 && \
CONFIG_K210_16550_ADDRWIDTH != 64 CONFIG_K210_UART_ADDRWIDTH != 64
# error "CONFIG_K210_16550_ADDRWIDTH not supported" # error "CONFIG_K210_UART_ADDRWIDTH not supported"
#endif #endif
/* If a UART is enabled, then its base address, clock, and IRQ /* If a UART is enabled, then its base address, clock, and IRQ
* must also be provided * must also be provided
*/ */
#ifdef CONFIG_K210_16550_UART1 #ifdef CONFIG_K210_UART1
# ifndef CONFIG_K210_16550_UART1_BASE # ifndef CONFIG_K210_UART1_BASE
# error "CONFIG_K210_16550_UART1_BASE not provided" # error "CONFIG_K210_UART1_BASE not provided"
# undef CONFIG_K210_16550_UART1 # undef CONFIG_K210_UART1
# endif # endif
# ifndef CONFIG_K210_16550_UART1_CLOCK # ifndef CONFIG_K210_UART1_CLOCK
# error "CONFIG_K210_16550_UART1_CLOCK not provided" # error "CONFIG_K210_UART1_CLOCK not provided"
# undef CONFIG_K210_16550_UART1 # undef CONFIG_K210_UART1
# endif # endif
# ifndef CONFIG_K210_16550_UART1_IRQ # ifndef CONFIG_K210_UART1_IRQ
# error "CONFIG_K210_16550_UART1_IRQ not provided" # error "CONFIG_K210_UART1_IRQ not provided"
# undef CONFIG_K210_16550_UART1 # undef CONFIG_K210_UART1
# endif # endif
#endif #endif
#ifdef CONFIG_K210_16550_UART2 #ifdef CONFIG_K210_UART2
# ifndef CONFIG_K210_16550_UART2_BASE # ifndef CONFIG_K210_UART2_BASE
# error "CONFIG_K210_16550_UART2_BASE not provided" # error "CONFIG_K210_UART2_BASE not provided"
# undef CONFIG_K210_16550_UART2 # undef CONFIG_K210_UART2
# endif # endif
# ifndef CONFIG_K210_16550_UART2_CLOCK # ifndef CONFIG_K210_UART2_CLOCK
# error "CONFIG_K210_16550_UART2_CLOCK not provided" # error "CONFIG_K210_UART2_CLOCK not provided"
# undef CONFIG_K210_16550_UART2 # undef CONFIG_K210_UART2
# endif # endif
# ifndef CONFIG_K210_16550_UART2_IRQ # ifndef CONFIG_K210_UART2_IRQ
# error "CONFIG_K210_16550_UART2_IRQ not provided" # error "CONFIG_K210_UART2_IRQ not provided"
# undef CONFIG_K210_16550_UART2 # undef CONFIG_K210_UART2
# endif # endif
#endif #endif
#ifdef CONFIG_K210_16550_UART3 #ifdef CONFIG_K210_UART3
# ifndef CONFIG_K210_16550_UART3_BASE # ifndef CONFIG_K210_UART3_BASE
# error "CONFIG_K210_16550_UART3_BASE not provided" # error "CONFIG_K210_UART3_BASE not provided"
# undef CONFIG_K210_16550_UART3 # undef CONFIG_K210_UART3
# endif # endif
# ifndef CONFIG_K210_16550_UART3_CLOCK # ifndef CONFIG_K210_UART3_CLOCK
# error "CONFIG_K210_16550_UART3_CLOCK not provided" # error "CONFIG_K210_UART3_CLOCK not provided"
# undef CONFIG_K210_16550_UART3 # undef CONFIG_K210_UART3
# endif # endif
# ifndef CONFIG_K210_16550_UART3_IRQ # ifndef CONFIG_K210_UART3_IRQ
# error "CONFIG_K210_16550_UART3_IRQ not provided" # error "CONFIG_K210_UART3_IRQ not provided"
# undef CONFIG_K210_16550_UART3 # undef CONFIG_K210_UART3
# endif # endif
#endif #endif
@ -143,21 +143,21 @@
#define UART_DLF_INCR 48 /* Divisor factor Register*/ #define UART_DLF_INCR 48 /* Divisor factor Register*/
#define UART_CPR_INCR 61 /* Component Register */ #define UART_CPR_INCR 61 /* Component Register */
#define UART_RBR_OFFSET (CONFIG_K210_16550_REGINCR*UART_RBR_INCR) #define UART_RBR_OFFSET (CONFIG_K210_UART_REGINCR*UART_RBR_INCR)
#define UART_THR_OFFSET (CONFIG_K210_16550_REGINCR*UART_THR_INCR) #define UART_THR_OFFSET (CONFIG_K210_UART_REGINCR*UART_THR_INCR)
#define UART_DLL_OFFSET (CONFIG_K210_16550_REGINCR*UART_DLL_INCR) #define UART_DLL_OFFSET (CONFIG_K210_UART_REGINCR*UART_DLL_INCR)
#define UART_DLM_OFFSET (CONFIG_K210_16550_REGINCR*UART_DLM_INCR) #define UART_DLM_OFFSET (CONFIG_K210_UART_REGINCR*UART_DLM_INCR)
#define UART_IER_OFFSET (CONFIG_K210_16550_REGINCR*UART_IER_INCR) #define UART_IER_OFFSET (CONFIG_K210_UART_REGINCR*UART_IER_INCR)
#define UART_IIR_OFFSET (CONFIG_K210_16550_REGINCR*UART_IIR_INCR) #define UART_IIR_OFFSET (CONFIG_K210_UART_REGINCR*UART_IIR_INCR)
#define UART_FCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_FCR_INCR) #define UART_FCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_FCR_INCR)
#define UART_LCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_LCR_INCR) #define UART_LCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_LCR_INCR)
#define UART_MCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_MCR_INCR) #define UART_MCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_MCR_INCR)
#define UART_LSR_OFFSET (CONFIG_K210_16550_REGINCR*UART_LSR_INCR) #define UART_LSR_OFFSET (CONFIG_K210_UART_REGINCR*UART_LSR_INCR)
#define UART_MSR_OFFSET (CONFIG_K210_16550_REGINCR*UART_MSR_INCR) #define UART_MSR_OFFSET (CONFIG_K210_UART_REGINCR*UART_MSR_INCR)
#define UART_SCR_OFFSET (CONFIG_K210_16550_REGINCR*UART_SCR_INCR) #define UART_SCR_OFFSET (CONFIG_K210_UART_REGINCR*UART_SCR_INCR)
#define UART_SRT_OFFSET (CONFIG_K210_16550_REGINCR*UART_SRT_INCR) #define UART_SRT_OFFSET (CONFIG_K210_UART_REGINCR*UART_SRT_INCR)
#define UART_DLF_OFFSET (CONFIG_K210_16550_REGINCR*UART_DLF_INCR) #define UART_DLF_OFFSET (CONFIG_K210_UART_REGINCR*UART_DLF_INCR)
#define UART_CPR_OFFSET (CONFIG_K210_16550_REGINCR*UART_CPR_INCR) #define UART_CPR_OFFSET (CONFIG_K210_UART_REGINCR*UART_CPR_INCR)
/* Register bit definitions *************************************************/ /* Register bit definitions *************************************************/
@ -267,36 +267,36 @@
* Public Types * Public Types
****************************************************************************/ ****************************************************************************/
#if CONFIG_K210_16550_REGWIDTH == 8 #if CONFIG_K210_UART_REGWIDTH == 8
typedef uint8_t uart_datawidth_t; typedef uint8_t uart_datawidth_t;
#elif CONFIG_K210_16550_REGWIDTH == 16 #elif CONFIG_K210_UART_REGWIDTH == 16
typedef uint16_t uart_datawidth_t; typedef uint16_t uart_datawidth_t;
#elif CONFIG_K210_16550_REGWIDTH == 32 #elif CONFIG_K210_UART_REGWIDTH == 32
typedef uint32_t uart_datawidth_t; typedef uint32_t uart_datawidth_t;
#endif #endif
#if CONFIG_K210_16550_ADDRWIDTH == 0 #if CONFIG_K210_UART_ADDRWIDTH == 0
typedef uintptr_t uart_addrwidth_t; typedef uintptr_t uart_addrwidth_t;
#elif CONFIG_K210_16550_ADDRWIDTH == 8 #elif CONFIG_K210_UART_ADDRWIDTH == 8
typedef uint8_t uart_addrwidth_t; typedef uint8_t uart_addrwidth_t;
#elif CONFIG_K210_16550_ADDRWIDTH == 16 #elif CONFIG_K210_UART_ADDRWIDTH == 16
typedef uint16_t uart_addrwidth_t; typedef uint16_t uart_addrwidth_t;
#elif CONFIG_K210_16550_ADDRWIDTH == 32 #elif CONFIG_K210_UART_ADDRWIDTH == 32
typedef uint32_t uart_addrwidth_t; typedef uint32_t uart_addrwidth_t;
#elif CONFIG_K210_16550_ADDRWIDTH == 64 #elif CONFIG_K210_UART_ADDRWIDTH == 64
typedef uint64_t uart_addrwidth_t; typedef uint64_t uart_addrwidth_t;
#endif #endif
struct k210_16550_s struct k210_uart_s
{ {
uart_addrwidth_t uartbase; /* Base address of UART registers */ 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 baud; /* Configured baud */
uint32_t uartclk; /* UART clock frequency */ uint32_t uartclk; /* UART clock frequency */
#endif #endif
uart_datawidth_t ier; /* Saved IER value */ uart_datawidth_t ier; /* Saved IER value */
uint8_t irq; /* IRQ associated with this UART */ 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 parity; /* 0=none, 1=odd, 2=even */
uint8_t bits; /* Number of bits (7 or 8) */ uint8_t bits; /* Number of bits (7 or 8) */
int stopbits2; /* true: Configure with 2 stop bits instead of 1 */ int stopbits2; /* true: Configure with 2 stop bits instead of 1 */
@ -319,7 +319,7 @@ struct k210_16550_s
* *
* Description: * Description:
* These functions must be provided by the processor-specific code in order * 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 * uart_ioctl() is optional to provide custom IOCTLs
* *
****************************************************************************/ ****************************************************************************/
@ -334,6 +334,6 @@ void uart_putreg(uart_addrwidth_t base,
struct file; /* Forward reference */ struct file; /* Forward reference */
int uart_ioctl(struct file *filep, int cmd, unsigned long arg); int uart_ioctl(struct file *filep, int cmd, unsigned long arg);
void k210_uart_16550_register(void); void k210_uart_register(void);
#endif /* CONFIG_K210_16550_UART */ #endif /* CONFIG_K210_UART */
#endif /* __INCLUDE_NUTTX_SERIAL_UART_16550_H */ #endif /* __INCLUDE_NUTTX_SERIAL_UART_16550_H */