/*Copyright (C), 2024-2030
*文件名:	Uart.c
*版  本:	Ver1.00
*日  期:	2025/04/30
*描  述:	Uart0、Uart1配置
*备  注:     
**********************************************************/
#include "Uart.h"
#include "BL51F003T.h"	
#include "stdio.h"
#include "string.h"

/**********************************************************/
xdata INT8S rx_flag = 0;
xdata INT8S recv_buff[RECV_LEN];


/**
	* @brief  uart1 初始化
  * @param  None
  * @retval None
	*/
void Uart1_sp_DO()//该函数
{	
	INT8S div;		//div最大为31
	INT16S cnt;  	//cnt最大为1023
	//波特率 = 27M/div/(1024-cnt)

	div = BPS_115200_DIV;
	cnt = BPS_115200_CNT;
	
	S1CFG &= 0xE0;
	S1CFG |= (div&0x1F);	
	
	/* 模式选择: UART1模式0，9位 */
//	UART1_MODE0;	
	
	/* 模式选择: UART1模式1，8位 */
	UART1_MODE1;
	
	/* 串行接收使能位 */
	S1RELL = cnt;
	S1RELH = cnt>>8;			 //波特率为32M/div/(1024-UART_CNT115200)	
	S1CON |= 0x10;				 //串行接收使能
	S1CFG |= 0xE0;				 //UART1接收和发送使能，波特率为S0DIV配置	
}
/**
	* @brief  uart1发送一个字节的数据
  * @param  dat: 发送的数据
  * @retval None
	*/
void UART1_write(signed char dat)
{
	S1BUF = dat;            //Send data to UART buffer
	while(!(S1CON & 0x02));
	S1CON &= 0xFD;				
}
/**
	* @brief  putchar重定向
  * @param  dat: 发送的数据
  * @retval None
	*/
char putchar(char ch)
{
    UART1_write((signed char) ch);
        
    return ch;
}
/**
	* @brief  uart1 中断服务
  * @param  dat: 发送的数据
  * @retval None
	*/
//void Uart1_Isr() interrupt 4
//{
//	INT8S dat0;
//	if(S1CON & 0x01)     
//	{
//		S1CON &= 0xFE;    
//		dat0 = S1BUF;  	
//		//UART1_write(dat0);//发送接收到的数据		
//	}
//}
/**
	* @brief  uart1 初始化
  * @param  None
  * @retval None
	*/
#define		CS_UART_TX		P14F_O // 串口调试TX口
//#define		CS_UART_RX		P15F_O // 串口调试RX口
void UART1_INIT(void)
{
	(*(unsigned char volatile xdata *)(0x8000 + CS_UART_TX)) = 0x05;
	//(*(unsigned char volatile xdata *)(0x8000 + CS_UART_RX)) = 0x05;
	S1TPS = CS_UART_TX;						//TK IO使能
	//S1RPS = CS_UART_RX;						//RX IO使能
	Uart1_sp_DO();								//UART1配置 
//	INT_UART;										  //UART1中断使能
}
/**
	* @brief  清除接收buffer
  * @param  None
  * @retval None
	*/
void uart_clear_buff()
{
	INT8S i;
	
	for(i=0; i<RECV_LEN; i++)
	{
		recv_buff[i] = 0;
	}
}