123 lines
3.7 KiB
C
123 lines
3.7 KiB
C
/*Copyright 2020-2021 T-Head Semiconductor Co., Ltd.
|
|
|
|
Licensed 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 __UART_H__
|
|
#define __UART_H__
|
|
|
|
#include "datatype.h"
|
|
#include "stdio.h"
|
|
|
|
//#define FAPB 10000000L
|
|
#define BAUD 19200L
|
|
#define UART0_BASE_ADDR 0x40015000
|
|
/* UART registers addr definition */
|
|
#define CK_UART_RBR 0x00 /* Receive Buffer Register (32 bits, R) */
|
|
#define CK_UART_THR 0x00 /* Transmit Holding Register (32 bits, W) */
|
|
#define CK_UART_DLL 0x00 /* Divisor Latch(Low) (32 bits, R/W) */
|
|
#define CK_UART_IER 0x01 /* Interrupt Enable Register (32 bits, R/W) */
|
|
#define CK_UART_DLH 0x01 /* Divisor Latch(High) (32 bits, R/W) */
|
|
#define CK_UART_IIR 0x02 /* Interrupt Identity Register (32 bits, R) */
|
|
#define CK_UART_FCR 0x02 /* fifo Countrol Register (32 bits, W) */
|
|
#define CK_UART_LCR 0x03 /* Line Control Register (32 bits, R/W) */
|
|
#define CK_UART_MCR 0x04 /* Modem Control Register (32 bits, W) */
|
|
#define CK_UART_LSR 0x05 /* Line Status Register (32 bits, R) */
|
|
#define CK_UART_MSR 0x06 /* Modem Status Register (32 bits, R/W) */
|
|
#define CK_UART_USR 0x1f /* UART Status Register (32 bits, R/W) */
|
|
|
|
typedef enum {
|
|
STOPBIT_1,
|
|
STOPBIT_2
|
|
} t_ck_uart_stopbit;
|
|
|
|
typedef enum {
|
|
PARITY_NONE,
|
|
PARITY_ODD,
|
|
PARITY_EVEN
|
|
} t_ck_uart_parity;
|
|
|
|
typedef enum {
|
|
WORDSIZE_5,
|
|
WORDSIZE_6,
|
|
WORDSIZE_7,
|
|
WORDSIZE_8,
|
|
WORDSIZE_9
|
|
} t_ck_uart_wordsize;
|
|
|
|
typedef enum {
|
|
DISABLE,
|
|
ENABLE
|
|
} t_ck_uart_mode;
|
|
|
|
typedef struct {
|
|
uint32_t baudrate;
|
|
t_ck_uart_stopbit stopbit;
|
|
t_ck_uart_parity parity;
|
|
t_ck_uart_wordsize wordsize;
|
|
t_ck_uart_mode rxmode;
|
|
t_ck_uart_mode txmode;
|
|
} t_ck_uart_cfig, *p_ck_uart_cfig;
|
|
|
|
typedef struct {
|
|
uint32_t uart_id;
|
|
uint32_t* register_map;
|
|
uint32_t baudrate;
|
|
t_ck_uart_parity parity;
|
|
t_ck_uart_stopbit stopbit;
|
|
t_ck_uart_wordsize wordsize;
|
|
t_ck_uart_mode rxmode;
|
|
t_ck_uart_mode txmode;
|
|
} t_ck_uart_device, *p_ck_uart_device;
|
|
|
|
/*
|
|
* @brief open a UART device, use id to select
|
|
* if more than one UART devices exist in SOC
|
|
* @param uart_device: uart device handler
|
|
* @param id: UART device ID
|
|
* @retval 0 if success, 1 if fail
|
|
*/
|
|
uint32_t ck_uart_open(p_ck_uart_device uart_device, uint32_t id);
|
|
|
|
/*
|
|
* @brief close UART device handler
|
|
* @param uart_device: uart device handler
|
|
* @retval 0 if success, 1 if fail
|
|
*/
|
|
uint32_t ck_uart_close(p_ck_uart_device uart_device);
|
|
|
|
/*
|
|
* @brief Initialize UART configurations from uart_cfig data structure
|
|
* @param uart_device: uart device handler
|
|
* @param uart_cfig: uart configurations collection, a structure datatype
|
|
* @retval 0 if success, 1 if fail
|
|
*/
|
|
uint32_t ck_uart_init(p_ck_uart_device uart_device, p_ck_uart_cfig uart_cfig);
|
|
|
|
/*
|
|
* @brief transmit a character through UART
|
|
* @param uart_device: uart device handler
|
|
* @param c: character needs to transmit
|
|
* @retval 0 if success, 1 if fail
|
|
*/
|
|
uint32_t ck_uart_putc(p_ck_uart_device uart_device, uint8_t c);
|
|
|
|
/*
|
|
* @brief check uart device's status, busy or idle
|
|
* @param uart_device: uart device handler
|
|
* @retval 0 if uart is in idle, 1 if busy
|
|
*/
|
|
uint32_t ck_uart_status(p_ck_uart_device uart_device);
|
|
|
|
#endif
|
|
|