rt-thread/bsp/phytium/libraries/standalone/drivers/serial/fpl011/fpl011_hw.h

261 lines
12 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright : (C) 2022 Phytium Information Technology, Inc.
* All Rights Reserved.
*
* This program is OPEN SOURCE software: you can redistribute it and/or modify it
* under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
* either version 1.0 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the Phytium Public License for more details.
*
*
* FilePath: fpl011_hw.h
* Date: 2021-11-02 14:53:42
* LastEditTime: 2022-02-18 09:06:10
* Description:  This file is for definition of uart register
*
* Modify History:
* Ver   Who        Date         Changes
* ----- ------     --------    --------------------------------------
* 1.0 huanghe 2021/11/2 first commit
* 1.1 liushengming 2022/02/18 modified some defines
*/
#ifndef FPL011_HW_H
#define FPL011_HW_H
#include "ftypes.h"
#include "fassert.h"
#include "fio.h"
#ifdef __cplusplus
extern "C"
{
#endif
/************************** Constant Definitions *****************************/
/**************************** Type Definitions *******************************/
/************************** Variable Definitions *****************************/
/***************** Macros (Inline Functions) Definitions *********************/
/** @name Register Map
*
* Register offsets for the UART.
*/
#define FPL011DR_OFFSET 0U /* Data */
#define FPL011RSR_OFFSET 4U /* Receive Status Register/Error Clear */
#define FPL011ECR_OFFSET FPL011RSR_OFFSET
#define FPL011FTR_OFFSET 0x18U /* Flag Register */
#define FPL011ILPR_OFFSET 0x020U /* IrDA Low-Power Counter */
#define FPL011IBRD_OFFSET 0x024U /* Integer Baud Rate */
#define FPL011FBRD_OFFSET 0x028U /* Fractional Baud Rate */
#define FPL011LCR_H_OFFSET 0x02cU /* Line Control */
#define FPL011CR_OFFSET 0x030U /* Control */
#define FPL011IFLS_OFFSET 0x034U /* Interrupt FIFO Level Select */
#define FPL011IMSC_OFFSET 0x038U /* Interrupt Mask Set/Clear */
#define FPL011RIS_OFFSET 0x03cU /* Raw interrupt Status */
#define FPL011MIS_OFFSET 0x040U /* Mask interrupt Status */
#define FPL011ICR_OFFSET 0x044U /* Interrupt Clear */
#define FPL011DMACR_OFFSET 0x048U /* DMA Control */
/* Data RW */
#define FPL011DR_OE 0x800U /* This bit is set to 1 if data is received and the received FIFO is full */
#define FPL011DR_BE 0x400U /* Break error */
#define FPL011DR_PE 0x200U /* Parity error */
#define FPL011DR_FE 0x100U /* Frame error */
#define FPL011DR_ALLE (FPL011DR_OE | FPL011DR_BE | FPL011DR_PE | FPL011DR_FE)
#define FPL011DR_DATA 0xffU
/* Receive Status Register/Error Clear RW */
#define FPL011RSR_OE 0x8U /* overflow error */
#define FPL011RSR_BE 0x4U /* Break error */
#define FPL011RSR_PE 0x2U /* Parity error */
#define FPL011RSR_FE 0x1U /* Frame error */
#define FPL011ECR_CLE 0xffU /* Clear */
/* Flag Register RO */
#define FPL011FTR_RI 0x100U /* Ring indicator */
#define FPL011FTR_TXFE 0x80U /* Transmit FIFO empty */
#define FPL011FTR_RXFF 0x40U /* Receive FIFO full */
#define FPL011FTR_TXFF 0x20U /* Transmit FIFO full. */
#define FPL011FTR_RXFE 0x10U /* Receive FIFO empty */
#define FPL011FTR_BUSY 0x08U /* UART busy */
#define FPL011FTR_DCD 0x04U /* Data carrier detect. */
#define FPL011FTR_DSR 0x02U /* Data set ready. */
#define FPL011FTR_CTS 0x1U /* Clear to send */
/* IrDA Low-Power Counter RW */
#define FPL011ILPR_ILPDVSR 0xffU /* 8-bit low-power divisor value. These bits are cleared to 0 at reset */
/* Integer Baud Rate RW */
#define FPL011IBRD_BAUD_DIVFRAC 0xffffU /* The fractional baud rate divisor. */
/* Fractional Baud Rate RW */
#define FPL011FBRD_BAUD_DIVFRAC 0x3fU /* The fractional baud rate divisor. */
/* Line Control RW */
#define FPL011LCR_H_SPS 0x80U /* Stick parity select. */
#define FPL011LCR_H_WLEN 0x60U /* Word length. */
#define FPL011LCR_H_FEN 0x10U /* Enable FIFOs. */
#define FPL011LCR_H_STP2 0x08U /* Two stop bits select. */
#define FPL011LCR_H_EPS 0x04U /* Even parity select. */
#define FPL011LCR_H_PEN 0x02U /* Parity enable. */
#define FPL011LCR_H_BRK 0x01U /* send break */
#define FPL011LCR_H_WLEN_SHIFT 0x00000005U /* Word length shift */
#define FPL011LCR_H_WLEN_5_BIT 0x00000000U /* 5 bits data */
#define FPL011LCR_H_WLEN_6_BIT 0x00000020U /* 6 bits data */
#define FPL011LCR_H_WLEN_7_BIT 0x00000040U /* 7 bits data */
#define FPL011LCR_H_WLEN_8_BIT 0x00000060U /* 8 bits data */
#define FPL011LCR_H_STP_1_BIT 0x00000000U
#define FPL011LCR_H_STP_MASK 0x00000008U /* Stop bits mask */
#define FPL011LCR_H_STP_SHIFT 0x00000003U /* Stop bits shift */
#define FPL011LCR_H_PARITY_EVEN 0x00000004U /* Even parity mode */
#define FPL011LCR_H_PARITY_MASK 0x00000002U /* Parity mask */
#define FPL011LCR_H_PARITY_SHIFT 0x00000001U /* Parity shift */
#define FPL011LCR_H_PARITY_NONE 0x00000000U /* No parity mode */
#define FPL011LCR_H_PARITY_ODD 0x00000000U /* Odd parity mode */
/* Control RW */
#define FPL011CR_CTSEN 0x8000U /* CTS hardware flow control enable. */
#define FPL011CR_RTSEN 0x4000U /* RTS hardware flow control enable. */
#define FPL011CR_OUT2 0x2000U /* This bit is the complement of the UART Out2 (nUARTOut2) modem status output. */
#define FPL011CR_OUT1 0x1000U /* This bit is the complement of the UART Out1 (nUARTOut1) modem status output. */
#define FPL011CR_RTS 0x0800U /* Request to send. */
#define FPL011CR_DTR 0x0400U /* Data transmit ready */
#define FPL011CR_RXE 0x0200U /* Receive enable. */
#define FPL011CR_TXE 0x0100U /* Transmit enable. */
#define FPL011CR_LBE 0x0080U /* Loop back enable.*/
#define FPL011CR_SIRLP 0x4U /* IrDA SIR low power mode. */
#define FPL011CR_SIREN 0x2U /* SIR enable. */
#define FPL011CR_UARTEN 0x1U /* UART enable. */
#define FPL011CR_MODE_NORMAL 0x00000000U /* Normal Mode */
/* Interrupt FIFO Level Select RW */
#define FPL011IFLS_RXIFLSEL_MASK 0x00000038U /* Receive interrupt FIFO level select mask */
#define FPL011IFLS_TXIFLSEL_MASK 0x00000007U /* Receive interrupt FIFO level select mask */
#define FPL011IFLS_RXIFLSEL_1_8 0x00000000U /* Receive FIFO becomes . 1/8 full */
#define FPL011IFLS_RXIFLSEL_1_4 0x00000008U /* Receive FIFO becomes . 1/4 full */
#define FPL011IFLS_RXIFLSEL_1_2 0x00000010U /* Receive FIFO becomes * . 1/2 full */
#define FPL011IFLS_RXIFLSEL_3_4 0x00000018U /* Receive FIFO becomes * . 3/4 full */
#define FPL011IFLS_RXIFLSEL_7_8 0x00000020U /* Receive FIFO becomes * . 7/8 full */
#define FPL011IFLS_TXIFLSEL_1_8 0x00000000U /* Transmit FIFO becomes * . 1/8 full */
#define FPL011IFLS_TXIFLSEL_1_4 0x00000001U /* Transmit FIFO becomes * . 1/4 full */
#define FPL011IFLS_TXIFLSEL_1_2 0x00000002U /* Transmit FIFO becomes * . 1/2 full */
#define FPL011IFLS_TXIFLSEL_3_4 0x00000003U /* Transmit FIFO becomes * . 3/4 full */
#define FPL011IFLS_TXIFLSEL_7_8 0x00000004U /* Transmit FIFO becomes * . 7/8 full */
/* Interrupt Mask Set/Clear RW */
#define FPL011IMSC_OEIM 0x400U /* Overrun error interrupt mask. */
#define FPL011IMSC_BEIM 0x200U /* Break error interrupt mask */
#define FPL011IMSC_PEIM 0x100U /* Parity error interrupt mask. */
#define FPL011IMSC_FEIM 0x80U /* Framing error interrupt mask. */
#define FPL011IMSC_RTIM 0x40U /* Receive timeout interrupt mask. */
#define FPL011IMSC_TXIM 0x20U /* Transmit interrupt mask. */
#define FPL011IMSC_RXIM 0x10U /* Receive interrupt mask. */
#define FPL011IMSC_DSRMIM 0x8U /* nUARTDSR modem interrupt mask. */
#define FPL011IMSC_DCDMIM 0x4U /* nUARTDCD modem interrupt mask. */
#define FPL011IMSC_CTSMIM 0x2U /* nUARTCTS modem interrupt mask. */
#define FPL011IMSC_RIMIM 0x1U /* nUARTRI modem interrupt mask. */
#define FPL011IMSC_ALLM 0x7ffU /* all interrupt mask */
/* Raw interrupt Status RO */
#define FPL011RIS_OEIS 0x400U /* Overrun error interrupt mask. */
#define FPL011RIS_BEIS 0x200U /* Break error interrupt mask */
#define FPL011RIS_PEIS 0x100U /* Parity error interrupt mask. */
#define FPL011RIS_FEIS 0x80U /* Framing error interrupt mask. */
#define FPL011RIS_RTIS 0x40U /* Receive timeout interrupt mask. */
#define FPL011RIS_TXIS 0x20U /* Transmit interrupt mask. */
#define FPL011RIS_RXIS 0x10U /* Receive interrupt mask. */
#define FPL011RIS_DSRMIS 0x8U /* nUARTDSR modem interrupt mask. */
#define FPL011RIS_DCDMIS 0x4U /* nUARTDCD modem interrupt mask. */
#define FPL011RIS_CTSMIS 0x2U /* nUARTCTS modem interrupt mask. */
#define FPL011RIS_RIMIS 0x1U /* nUARTRI modem interrupt mask. */
/* Mask interrupt Status R0 */
#define FPL011MIS_OEMIS 0x400U /* Overrun error interrupt mask. */
#define FPL011MIS_BEMIS 0x200U /* Break error interrupt mask */
#define FPL011MIS_PEMIS 0x100U /* Parity error interrupt mask. */
#define FPL011MIS_FEMIS 0x80U /* Framing error interrupt mask. */
#define FPL011MIS_RTMIS 0x40U /* Receive timeout interrupt mask. */
#define FPL011MIS_TXMIS 0x20U /* Transmit interrupt mask. */
#define FPL011MIS_RXMIS 0x10U /* Receive interrupt mask. */
#define FPL011MIS_DSRMMIS 0x8U /* nUARTDSR modem interrupt mask. */
#define FPL011MIS_DCDMMIS 0x4U /* nUARTDCD modem interrupt mask. */
#define FPL011MIS_CTSMMIS 0x2U /* nUARTCTS modem interrupt mask. */
#define FPL011MIS_RIMMIS 0x1U /* nUARTRI modem interrupt mask. */
/* Interrupt Clear WO */
#define FPL011ICR_OEIC 0x400U /* Overrun error interrupt mask. */
#define FPL011ICR_BEIC 0x200U /* Break error interrupt mask */
#define FPL011ICR_PEIC 0x100U /* Parity error interrupt mask. */
#define FPL011ICR_FEIC 0x80U /* Framing error interrupt mask. */
#define FPL011ICR_RTIC 0x40U /* Receive timeout interrupt mask. */
#define FPL011ICR_TXIC 0x20U /* Transmit interrupt mask. */
#define FPL011ICR_RXIC 0x10U /* Receive interrupt mask. */
#define FPL011ICR_DSRMIC 0x8U /* nUARTDSR modem interrupt mask. */
#define FPL011ICR_DCDMIC 0x4U /* nUARTDCD modem interrupt mask. */
#define FPL011ICR_CTSMIC 0x2U /* nUARTCTS modem interrupt mask. */
#define FPL011ICR_RIMIC 0x1U /* nUARTRI modem interrupt mask. */
#define FPL011ICR_ALL_CLEAR (FPL011ICR_OEIC |FPL011ICR_BEIC |FPL011ICR_PEIC |FPL011ICR_FEIC |FPL011ICR_RTIC |FPL011ICR_TXIC |FPL011ICR_RXIC |FPL011ICR_DSRMIC |FPL011ICR_DCDMIC |FPL011ICR_CTSMIC |FPL011ICR_RIMIC )
/* DMA Control RW */
#define FPL011DMACR_DMAONERR 0x4U /* DMA on error. */
#define FPL011DMACR_TXDMAE 0x2U /* Transmit DMA enable. */
#define FPL011DMACR_RXDMAE 0x1U /* Receive DMA enable. */
/***************** Macros (Inline Functions) Definitions *********************/
#define FUART_READREG32(addr, reg_offset) FtIn32(addr + (u32)reg_offset)
#define FUART_WRITEREG32(addr, reg_offset, reg_value) FtOut32(addr + (u32)reg_offset, (u32)reg_value)
/**
* @name: FUART_RECEIVEDATAEMPTY
* @msg: Used to confirm whether data has been received
* @param addr contains the base address of the device.
* @return {bool} true 是不存在数据 false 是存在数据
*
*/
#define FUART_RECEIVEDATAEMPTY(addr) (FtIn32(addr + FPL011FTR_OFFSET) & FPL011FTR_RXFE)
/**
* @name: FUART_ISTRANSMITFULL
* @msg: Used to confirm whether data can be sent
* @param addr contains the base address of the device.
* @return {bool} true 是数据已满 false 可以发送数据
*/
#define FUART_ISTRANSMITFULL(addr) ((FtIn32(addr + FPL011FTR_OFFSET) & (u32)FPL011FTR_TXFF) == FPL011FTR_TXFF)
/**
* @name: FUART_ISTRANSMITBUSY
* @msg: Determine if a byte of data can be sent with the transmitter.
* @return TRUE if the TX is busy, FALSE if a byte can be put in the
* FIFO.
*/
#define FUART_ISTRANSMITBUSY(addr) ((FtIn32(addr + FPL011FTR_OFFSET) & (u32)FPL011FTR_BUSY) == FPL011FTR_BUSY)
/************************** Function Prototypes ******************************/
void FPl011SendByte(uintptr addr, u8 byte);
u8 FPl011RecvByte(uintptr addr);
#ifdef __cplusplus
}
#endif
#endif