141 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/****************************************************************************
 | 
						|
 *
 | 
						|
 Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
 | 
						|
 *
 | 
						|
 * This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
 | 
						|
 * be copied by any method or incorporated into another program without
 | 
						|
 * the express written consent of Aerospace C.Power. This Information or any portion
 | 
						|
 * thereof remains the property of Aerospace C.Power. The Information contained herein
 | 
						|
 * is believed to be accurate and Aerospace C.Power assumes no responsibility or
 | 
						|
 * liability for its use in any way and conveys no license or title under
 | 
						|
 * any patent or copyright and makes no representation or warranty that this
 | 
						|
 * Information is free from patent or copyright infringement.
 | 
						|
 *
 | 
						|
 * ****************************************************************************/
 | 
						|
 
 | 
						|
#ifndef _S_UART_H_
 | 
						|
#define _S_UART_H_
 | 
						|
 | 
						|
char sUartGetChar();
 | 
						|
void sUartClearFifo(void);
 | 
						|
/* For config */
 | 
						|
#define UART0	0x44001000
 | 
						|
 | 
						|
#define UART_FULL_THRESH	120
 | 
						|
 | 
						|
#define UART_CLOCK		DEFAULT_PLL_FRQ
 | 
						|
#define UART_CLOCK_SYSTICK  1000000 /* 1M */
 | 
						|
#define REG_UARTDR		(0x00 + UART0)
 | 
						|
#define REG_STATUS		(0x24 + UART0)
 | 
						|
#define REG_CLKDIV		(0x1C + UART0)
 | 
						|
#define REG_CONFIG0		(0x14 + UART0)
 | 
						|
#define REG_INT_ENA		(0x04 + UART0)
 | 
						|
#define REG_INT_CLR		(0x08 + UART0)
 | 
						|
#define REG_BAUD_CFG     (0x20 + UART0)
 | 
						|
#define REG_LOW_PULSE   (0x34 + UART0)
 | 
						|
#define REG_HIGH_PULSE  (0x38 + UART0)
 | 
						|
#define REG_EDGE_CNT      (0x3C + UART0)
 | 
						|
#define REG_INT_STATUS   (0x10 + UART0)
 | 
						|
#define UART_TXFIFO_CNT	((REG32(REG_STATUS)>>16)&0xFF)
 | 
						|
#define UART_RXFIFO_CNT	(REG32(REG_STATUS)&0xFF)
 | 
						|
 | 
						|
#define uGET_CHAR()		sUartGetChar()
 | 
						|
#define uPUT_CHAR(c)		(REG32(REG_UARTDR) = (0xFF)&((UINT32)(c)))
 | 
						|
 | 
						|
#define uRX_RAEDY()		(UART_RXFIFO_CNT > 0 ? 1 : 0)
 | 
						|
#define uTX_BUSY()		(UART_TXFIFO_CNT > UART_FULL_THRESH ? 1 : 0)
 | 
						|
 | 
						|
#define CLEAR_FIFO()		sUartClearFifo()
 | 
						|
 | 
						|
 | 
						|
/* ----------------------- Uart ----------------------- */
 | 
						|
 | 
						|
#define ASC_CTRL_T	0x14
 | 
						|
 | 
						|
#define aDELAY(m) do{\
 | 
						|
		int T = m;\
 | 
						|
		while(T--) __asm volatile("nop\n");\
 | 
						|
		}while(0)
 | 
						|
 | 
						|
enum
 | 
						|
{
 | 
						|
	xmSOH = 0x01,
 | 
						|
	xmSTX = 0x02,
 | 
						|
	xmEOT = 0x04,
 | 
						|
	xmACK = 0x06,
 | 
						|
	xmNAK = 0x15,
 | 
						|
	xmCAN = 0x18,
 | 
						|
	xmCRC = 0x43, /* ASCII of 'C' */
 | 
						|
};
 | 
						|
 | 
						|
enum
 | 
						|
{
 | 
						|
	xmRT_Finish = 0,
 | 
						|
	xmRT_Error 	= -1,
 | 
						|
};
 | 
						|
 | 
						|
/* --------------------- XMODEM --------------------------- */
 | 
						|
 | 
						|
#define xmSTOP_NOW()		uPUT_CHAR(xmCAN)
 | 
						|
 | 
						|
#define xmERROR_HANDER()	do{xmSTOP_NOW(); return xmRT_Error;}while(0)
 | 
						|
		
 | 
						|
 | 
						|
#define xm1ST_RETRY_TIME 	200
 | 
						|
 | 
						|
#define xmFRMTYPE_128		128
 | 
						|
#define xmFRMTYPE_1K		1024
 | 
						|
 | 
						|
#define xmRCV_BUF_SIZE	xmFRMTYPE_1K
 | 
						|
 | 
						|
#define xmCHECK_CHKSUM	0x01
 | 
						|
#define xmCHECK_CRC16	0x02
 | 
						|
 | 
						|
 | 
						|
		
 | 
						|
#define xmTRY_CHECKSUM_MODE(t, l, m, c)	do\
 | 
						|
		{\
 | 
						|
			l = 0x400000;\
 | 
						|
			CLEAR_FIFO();\
 | 
						|
			uPUT_CHAR(m);\
 | 
						|
			while((--l)&&(!uRX_RAEDY()));\
 | 
						|
			if(l)\
 | 
						|
			{\
 | 
						|
				c = uGET_CHAR();\
 | 
						|
				if((c ==xmSOH) || (c ==xmSTX))\
 | 
						|
				{\
 | 
						|
					break;\
 | 
						|
				}\
 | 
						|
			}\
 | 
						|
		}while(--t)
 | 
						|
 | 
						|
#define xmTRY_CHECK_FRAME_START(t, l, m, c)	do\
 | 
						|
		{\
 | 
						|
			l = 0x400000;\
 | 
						|
			while((--l)&&(!uRX_RAEDY()));\
 | 
						|
			if(l)\
 | 
						|
			{\
 | 
						|
				c = uGET_CHAR();\
 | 
						|
				if((c ==xmSOH) || (c ==xmSTX) || (c ==xmEOT))\
 | 
						|
				{\
 | 
						|
					break;\
 | 
						|
				}\
 | 
						|
			}\
 | 
						|
		}while(--t)
 | 
						|
		
 | 
						|
#define RECIVE_CHAR(b, l)	do{\
 | 
						|
				l = 0x4000;\
 | 
						|
				while((--l)&&(!uRX_RAEDY())) __asm volatile("nop\n");\
 | 
						|
				if(l) (b) = uGET_CHAR();\
 | 
						|
		}while(0)
 | 
						|
 | 
						|
 | 
						|
uint32_t    sUartTxFifoCnt();
 | 
						|
uint32_t    sUartRxFifoCnt();
 | 
						|
uint32_t    sUartCheckAutoBaud(int baud_rate);
 | 
						|
void sUartPortInit(int bRate, int UseRefTick, int AutoBaud);
 | 
						|
void	    sUartPutString(char *pStr);
 | 
						|
UINT32	    xModemReciveframe(char *const pBuf, char frNO, int newFile);
 | 
						|
 | 
						|
#endif
 |