blob: 7ee43d0e873e87add686075c8719247b4b979d97 [file] [log] [blame]
/****************************************************************************
* arch/risc-v/src/bl602/hardware/bl602_uart.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __ARCH_RISCV_SRC_BL602_HARDWARE_BL602_UART_H
#define __ARCH_RISCV_SRC_BL602_HARDWARE_BL602_UART_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include "bl602_memorymap.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* UART0 and 1 are the same so create this helper for register offsets */
#define BL602_UART_BASE(n) (BL602_UART0_BASE + (n * (BL602_UART1_BASE - BL602_UART0_BASE)))
/* Register offsets *********************************************************/
#define BL602_UART_UTX_CONFIG_OFFSET 0x000000 /* utx_config */
#define BL602_UART_URX_CONFIG_OFFSET 0x000004 /* urx_config */
#define BL602_UART_BIT_PRD_OFFSET 0x000008 /* uart_bit_prd */
#define BL602_UART_DATA_CONFIG_OFFSET 0x00000c /* data_config */
#define BL602_UART_UTX_IR_POSITION_OFFSET 0x000010 /* utx_ir_position */
#define BL602_UART_URX_IR_POSITION_OFFSET 0x000014 /* urx_ir_position */
#define BL602_UART_URX_RTO_TIMER_OFFSET 0x000018 /* urx_rto_timer */
#define BL602_UART_INT_STS_OFFSET 0x000020 /* UART interrupt status */
#define BL602_UART_INT_MASK_OFFSET 0x000024 /* UART interrupt mask */
#define BL602_UART_INT_CLEAR_OFFSET 0x000028 /* UART interrupt clear */
#define BL602_UART_INT_EN_OFFSET 0x00002c /* UART interrupt enable */
#define BL602_UART_STATUS_OFFSET 0x000030 /* uart_status */
#define BL602_UART_STS_URX_ABR_PRD_OFFSET 0x000034 /* sts_urx_abr_prd */
#define BL602_UART_FIFO_CONFIG_0_OFFSET 0x000080 /* uart_fifo_config_0 */
#define BL602_UART_FIFO_CONFIG_1_OFFSET 0x000084 /* uart_fifo_config_1 */
#define BL602_UART_FIFO_WDATA_OFFSET 0x000088 /* uart_fifo_wdata */
#define BL602_UART_FIFO_RDATA_OFFSET 0x00008c /* uart_fifo_rdata */
/* Register definitions *****************************************************/
#define BL602_UART_UTX_CONFIG(n) (BL602_UART_BASE(n) + BL602_UART_UTX_CONFIG_OFFSET)
#define BL602_UART_URX_CONFIG(n) (BL602_UART_BASE(n) + BL602_UART_URX_CONFIG_OFFSET)
#define BL602_UART_BIT_PRD(n) (BL602_UART_BASE(n) + BL602_UART_BIT_PRD_OFFSET)
#define BL602_UART_DATA_CONFIG(n) (BL602_UART_BASE(n) + BL602_UART_DATA_CONFIG_OFFSET)
#define BL602_UART_UTX_IR_POSITION(n) (BL602_UART_BASE(n) + BL602_UART_UTX_IR_POSITION_OFFSET)
#define BL602_UART_URX_IR_POSITION(n) (BL602_UART_BASE(n) + BL602_UART_URX_IR_POSITION_OFFSET)
#define BL602_UART_URX_RTO_TIMER(n) (BL602_UART_BASE(n) + BL602_UART_URX_RTO_TIMER_OFFSET)
#define BL602_UART_INT_STS(n) (BL602_UART_BASE(n) + BL602_UART_INT_STS_OFFSET)
#define BL602_UART_INT_MASK(n) (BL602_UART_BASE(n) + BL602_UART_INT_MASK_OFFSET)
#define BL602_UART_INT_CLEAR(n) (BL602_UART_BASE(n) + BL602_UART_INT_CLEAR_OFFSET)
#define BL602_UART_INT_EN(n) (BL602_UART_BASE(n) + BL602_UART_INT_EN_OFFSET)
#define BL602_UART_STATUS(n) (BL602_UART_BASE(n) + BL602_UART_STATUS_OFFSET)
#define BL602_UART_STS_URX_ABR_PRD(n) (BL602_UART_BASE(n) + BL602_UART_STS_URX_ABR_PRD_OFFSET)
#define BL602_UART_FIFO_CONFIG_0(n) (BL602_UART_BASE(n) + BL602_UART_FIFO_CONFIG_0_OFFSET)
#define BL602_UART_FIFO_CONFIG_1(n) (BL602_UART_BASE(n) + BL602_UART_FIFO_CONFIG_1_OFFSET)
#define BL602_UART_FIFO_WDATA(n) (BL602_UART_BASE(n) + BL602_UART_FIFO_WDATA_OFFSET)
#define BL602_UART_FIFO_RDATA(n) (BL602_UART_BASE(n) + BL602_UART_FIFO_RDATA_OFFSET)
#define BL602_UART0_UTX_CONFIG (BL602_UART_UTX_CONFIG(0))
#define BL602_UART0_URX_CONFIG (BL602_UART_URX_CONFIG(0))
#define BL602_UART0_UART_BIT_PRD (BL602_UART_BIT_PRD(0))
#define BL602_UART0_DATA_CONFIG (BL602_UART_DATA_CONFIG(0))
#define BL602_UART0_UTX_IR_POSITION (BL602_UART_UTX_IR_POSITION(0))
#define BL602_UART0_URX_IR_POSITION (BL602_UART_URX_IR_POSITION(0))
#define BL602_UART0_URX_RTO_TIMER (BL602_UART_URX_RTO_TIMER(0))
#define BL602_UART0_UART_INT_STS (BL602_UART_INT_STS(0))
#define BL602_UART0_UART_INT_MASK (BL602_UART_INT_MASK(0))
#define BL602_UART0_UART_INT_CLEAR (BL602_UART_INT_CLEAR(0))
#define BL602_UART0_UART_INT_EN (BL602_UART_INT_EN(0))
#define BL602_UART0_UART_STATUS (BL602_UART_STATUS(0))
#define BL602_UART0_STS_URX_ABR_PRD (BL602_UART_STS_URX_ABR_PRD(0))
#define BL602_UART0_UART_FIFO_CONFIG_0 (BL602_UART_FIFO_CONFIG_0(0))
#define BL602_UART0_UART_FIFO_CONFIG_1 (BL602_UART_FIFO_CONFIG_1(0))
#define BL602_UART0_UART_FIFO_WDATA (BL602_UART_FIFO_WDATA(0))
#define BL602_UART0_UART_FIFO_RDATA (BL602_UART_FIFO_RDATA(0))
#define BL602_UART1_UTX_CONFIG (BL602_UART_UTX_CONFIG(1))
#define BL602_UART1_URX_CONFIG (BL602_UART_URX_CONFIG(1))
#define BL602_UART1_UART_BIT_PRD (BL602_UART_BIT_PRD(1))
#define BL602_UART1_DATA_CONFIG (BL602_UART_DATA_CONFIG(1))
#define BL602_UART1_UTX_IR_POSITION (BL602_UART_UTX_IR_POSITION(1))
#define BL602_UART1_URX_IR_POSITION (BL602_UART_URX_IR_POSITION(1))
#define BL602_UART1_URX_RTO_TIMER (BL602_UART_URX_RTO_TIMER(1))
#define BL602_UART1_UART_INT_STS (BL602_UART_INT_STS(1))
#define BL602_UART1_UART_INT_MASK (BL602_UART_INT_MASK(1))
#define BL602_UART1_UART_INT_CLEAR (BL602_UART_INT_CLEAR(1))
#define BL602_UART1_UART_INT_EN (BL602_UART_INT_EN(1))
#define BL602_UART1_UART_STATUS (BL602_UART_STATUS(1))
#define BL602_UART1_STS_URX_ABR_PRD (BL602_UART_STS_URX_ABR_PRD(1))
#define BL602_UART1_UART_FIFO_CONFIG_0 (BL602_UART_FIFO_CONFIG_0(1))
#define BL602_UART1_UART_FIFO_CONFIG_1 (BL602_UART_FIFO_CONFIG_1(1))
#define BL602_UART1_UART_FIFO_WDATA (BL602_UART_FIFO_WDATA(1))
#define BL602_UART1_UART_FIFO_RDATA (BL602_UART_FIFO_RDATA(1))
/* Register bit definitions *************************************************/
#define UART_UTX_CONFIG_CR_LEN_SHIFT (16)
#define UART_UTX_CONFIG_CR_LEN_MASK (0xffff << UART_UTX_CONFIG_CR_LEN_SHIFT)
#define UART_UTX_CONFIG_CR_BIT_CNT_P_SHIFT (12)
#define UART_UTX_CONFIG_CR_BIT_CNT_P_MASK (0x03 << UART_UTX_CONFIG_CR_BIT_CNT_P_SHIFT)
#define UART_UTX_CONFIG_CR_BIT_CNT_D_SHIFT (8)
#define UART_UTX_CONFIG_CR_BIT_CNT_D_MASK (0x07 << UART_UTX_CONFIG_CR_BIT_CNT_D_SHIFT)
#define UART_UTX_CONFIG_CR_IR_INV (1 << 7)
#define UART_UTX_CONFIG_CR_IR_EN (1 << 6)
#define UART_UTX_CONFIG_CR_PRT_SEL (1 << 5)
#define UART_UTX_CONFIG_CR_PRT_EN (1 << 4)
#define UART_UTX_CONFIG_CR_FRM_EN (1 << 2)
#define UART_UTX_CONFIG_CR_CTS_EN (1 << 1)
#define UART_UTX_CONFIG_CR_EN (1 << 0)
#define UART_URX_CONFIG_CR_LEN_SHIFT (16)
#define UART_URX_CONFIG_CR_LEN_MASK (0xffff << UART_URX_CONFIG_CR_LEN_SHIFT)
#define UART_URX_CONFIG_CR_DEG_CNT_SHIFT (12)
#define UART_URX_CONFIG_CR_DEG_CNT_MASK (0x0f << UART_URX_CONFIG_CR_DEG_CNT_SHIFT)
#define UART_URX_CONFIG_CR_DEG_EN (1 << 11)
#define UART_URX_CONFIG_CR_BIT_CNT_D_SHIFT (8)
#define UART_URX_CONFIG_CR_BIT_CNT_D_MASK (0x07 << UART_URX_CONFIG_CR_BIT_CNT_D_SHIFT)
#define UART_URX_CONFIG_CR_IR_INV (1 << 7)
#define UART_URX_CONFIG_CR_IR_EN (1 << 6)
#define UART_URX_CONFIG_CR_PRT_SEL (1 << 5)
#define UART_URX_CONFIG_CR_PRT_EN (1 << 4)
#define UART_URX_CONFIG_CR_ABR_EN (1 << 3)
#define UART_URX_CONFIG_CR_RTS_SW_VAL (1 << 2)
#define UART_URX_CONFIG_CR_RTS_SW_MODE (1 << 1)
#define UART_URX_CONFIG_CR_EN (1 << 0)
#define UART_BIT_PRD_CR_URX_BIT_SHIFT (16)
#define UART_BIT_PRD_CR_URX_BIT_MASK (0xffff << UART_BIT_PRD_CR_URX_BIT_SHIFT)
#define UART_BIT_PRD_CR_UTX_BIT_MASK (0xffff)
#define UART_DATA_CONFIG_CR_UART_BIT_INV (1 << 0)
#define UART_UTX_IR_POSITION_CR_IR_POS_P_SHIFT (16)
#define UART_UTX_IR_POSITION_CR_IR_POS_P_MASK (0xffff << UART_UTX_IR_POSITION_CR_IR_POS_P_SHIFT)
#define UART_UTX_IR_POSITION_CR_IR_POS_S_MASK (0xffff)
#define UART_URX_IR_POSITION_CR_IR_POS_S_MASK (0xffff)
#define UART_URX_RTO_TIMER_CR_RTO_VALUE_MASK (0xff)
#define UART_INT_STS_URX_FER_INT (1 << 7)
#define UART_INT_STS_UTX_FER_INT (1 << 6)
#define UART_INT_STS_URX_PCE_INT (1 << 5)
#define UART_INT_STS_URX_RTO_INT (1 << 4)
#define UART_INT_STS_URX_FIFO_INT (1 << 3)
#define UART_INT_STS_UTX_FIFO_INT (1 << 2)
#define UART_INT_STS_URX_END_INT (1 << 1)
#define UART_INT_STS_UTX_END_INT (1 << 0)
#define UART_INT_MASK_CR_URX_FER_MASK (1 << 7)
#define UART_INT_MASK_CR_UTX_FER_MASK (1 << 6)
#define UART_INT_MASK_CR_URX_PCE_MASK (1 << 5)
#define UART_INT_MASK_CR_URX_RTO_MASK (1 << 4)
#define UART_INT_MASK_CR_URX_FIFO_MASK (1 << 3)
#define UART_INT_MASK_CR_UTX_FIFO_MASK (1 << 2)
#define UART_INT_MASK_CR_URX_END_MASK (1 << 1)
#define UART_INT_MASK_CR_UTX_END_MASK (1 << 0)
#define UART_INT_CLEAR_RSVD_7 (1 << 7)
#define UART_INT_CLEAR_RSVD_6 (1 << 6)
#define UART_INT_CLEAR_CR_URX_PCE_CLR (1 << 5)
#define UART_INT_CLEAR_CR_URX_RTO_CLR (1 << 4)
#define UART_INT_CLEAR_RSVD_3 (1 << 3)
#define UART_INT_CLEAR_RSVD_2 (1 << 2)
#define UART_INT_CLEAR_CR_URX_END_CLR (1 << 1)
#define UART_INT_CLEAR_CR_UTX_END_CLR (1 << 0)
#define UART_INT_EN_CR_URX_FER_EN (1 << 7)
#define UART_INT_EN_CR_UTX_FER_EN (1 << 6)
#define UART_INT_EN_CR_URX_PCE_EN (1 << 5)
#define UART_INT_EN_CR_URX_RTO_EN (1 << 4)
#define UART_INT_EN_CR_URX_FIFO_EN (1 << 3)
#define UART_INT_EN_CR_UTX_FIFO_EN (1 << 2)
#define UART_INT_EN_CR_URX_END_EN (1 << 1)
#define UART_INT_EN_CR_UTX_END_EN (1 << 0)
#define UART_STATUS_STS_URX_BUS_BUSY (1 << 1)
#define UART_STATUS_STS_UTX_BUS_BUSY (1 << 0)
#define UART_STS_URX_ABR_PRD_0X55_SHIFT (16)
#define UART_STS_URX_ABR_PRD_0X55_MASK (0xffff << UART_STS_URX_ABR_PRD_0X55_SHIFT)
#define UART_STS_URX_ABR_PRD_START_MASK (0xffff)
#define UART_FIFO_CONFIG_0_RX_UNDERFLOW (1 << 7)
#define UART_FIFO_CONFIG_0_RX_OVERFLOW (1 << 6)
#define UART_FIFO_CONFIG_0_TX_UNDERFLOW (1 << 5)
#define UART_FIFO_CONFIG_0_TX_OVERFLOW (1 << 4)
#define UART_FIFO_CONFIG_0_RX_CLR (1 << 3)
#define UART_FIFO_CONFIG_0_TX_CLR (1 << 2)
#define UART_FIFO_CONFIG_0_DMA_RX_EN (1 << 1)
#define UART_FIFO_CONFIG_0_DMA_TX_EN (1 << 0)
#define UART_FIFO_CONFIG_1_RX_TH_SHIFT (24)
#define UART_FIFO_CONFIG_1_RX_TH_MASK (0x1f << UART_FIFO_CONFIG_1_RX_TH_SHIFT)
#define UART_FIFO_CONFIG_1_TX_TH_SHIFT (16)
#define UART_FIFO_CONFIG_1_TX_TH_MASK (0x1f << UART_FIFO_CONFIG_1_TX_TH_SHIFT)
#define UART_FIFO_CONFIG_1_RX_CNT_SHIFT (8)
#define UART_FIFO_CONFIG_1_RX_CNT_MASK (0x3f << UART_FIFO_CONFIG_1_RX_CNT_SHIFT)
#define UART_FIFO_CONFIG_1_TX_CNT_MASK (0x3f)
#define UART_FIFO_WDATA_MASK (0xff)
#define UART_FIFO_RDATA_MASK (0xff)
#endif /* __ARCH_RISCV_SRC_BL602_HARDWARE_BL602_UART_H */