serial.h 2.6 KB
Newer Older
P
Peng Fan 已提交
1
/*
P
Peng Fan 已提交
2
 * File      : serial.h
P
Peng Fan 已提交
3
 * This file is part of RT-Thread RTOS
P
Peng Fan 已提交
4
 * COPYRIGHT (C) 2006 - 2013, RT-Thread Development Team
P
Peng Fan 已提交
5
 *
P
Peng Fan 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 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
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
P
Peng Fan 已提交
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
 *
 * Change Logs:
 * Date           Author       Notes
 * 2006-03-13     Bernard      first version
 * 2009-04-20     yi.qiu       modified according bernard's stm32 version
 * 2010-10-6      wangmeng     added sep4020 surpport
 * 2013-7-15      Peng Fan     Modified from sep4020
 */

#ifndef __SERIAL_H__
#define __SERIAL_H__

#include <sep6200.h>

#define	USTAT_RCV_READY		0x01   	/* receive data ready */
#define USTAT_OVERRUN		0x02	/* overrun */
#define USTAT_PARITY_ERR	0x04	/* parity error */
#define USTAT_FRAME_ERROR	0x08	/* frame error */
#define USTAT_BREAK		0x10	/* break */
#define	USTAT_TXB_EMPTY		0x40   	/* tx buffer empty */
#define USTAT_RCV_ERR		0x80	/* receive error */

#define BPS					115200	/* serial baudrate */

#define UART_RX_BUFFER_SIZE		64
#define UART_TX_BUFFER_SIZE		64

/*For sep6200's uart have several secondary function*/
/*we use union to decribe it*/

union dlbl_fifo
{
	rt_uint32_t dlbl;
	rt_uint32_t rxfifo;
	rt_uint32_t txfifo;
};

union dlbh_ier
{
	rt_uint32_t dlbh;
	rt_uint32_t ier;
};

union iir_fcr
{
	rt_uint32_t iir;
	rt_uint32_t fcr;
};

struct serial_int_rx
{
	rt_uint8_t  rx_buffer[UART_RX_BUFFER_SIZE];
	rt_uint32_t read_index, save_index;
};

struct serial_int_tx
{
	rt_uint8_t  tx_buffer[UART_TX_BUFFER_SIZE];
	rt_uint32_t write_index, save_index;
};

typedef struct uartport
{
	union dlbl_fifo dlbl_fifo;
	union dlbh_ier	dlbh_ier;
	union iir_fcr	iir_fcr;
	rt_uint32_t lcr;
	rt_uint32_t mcr;
	rt_uint32_t lsr;
	rt_uint32_t msr;
}uartport;

struct serial_device
{
	uartport* uart_device;

	/* rx structure */
	struct serial_int_rx* int_rx;

	/* tx structure */
	struct serial_int_tx* int_tx;
};

rt_err_t rt_hw_serial_register(rt_device_t device, const char* name, rt_uint32_t flag, struct serial_device *serial);

void rt_hw_serial_isr(rt_device_t device);

#endif