/****************************************************************************** 文 件 名:SCI0_UART.c 功能描述:UART模式SCI0驱动库文件 作 者:张暄 版 本:V1.0 日 期:2016.11.17 ******************************************************************************/ #include "SCI0_UART.h" SCI0TxBufferStruct SCI0TxBuffer; /****************************************************************************** 函数名:SCI0_UART_Byte_Rx 功 能:UART字节接收函数 在该函数中引用上层的接收函数,用于向上层指示已接收到数据,并传递数据Data 参 数:Data:接收到的数据 返回值:无 ******************************************************************************/ void SCI0_UART_Byte_Rx(uint8_t Data) { uint8_t Parity; Parity = SCI0SR1_PF; } /****************************************************************************** 函数名:SCI0_UART_Byte_Tx 功 能:UART字节发送函数 立即发送一字节数据,调用此函数之前,必须确定发送Buffer是空的,否则可能造成 发送数据的丢失 参 数:Data:将要发送的数据 返回值:无 ******************************************************************************/ void SCI0_UART_Byte_Tx(uint8_t Data) { SCI0DRL = Data; } /****************************************************************************** 函数名:SCI0_UART_Block_Tx 功 能:UART块发送函数 立即发送N字节数据,调用此函数之前,必须确定发送Buffer是空的,否则可能造成 发送数据的丢失 参 数:Data:将要发送的数据 Len :将要发送的数据长度 返回值:无 ******************************************************************************/ void SCI0_UART_Block_Tx(uint8_t *Data, uint8_t Len) { uint8_t i; SCI0TxBuffer.Len = Len - 1; for (i = 0; i < Len; i++) SCI0TxBuffer.Data[Len - i - 1] = Data[i]; SCI0DRL = SCI0TxBuffer.Data[SCI0TxBuffer.Len]; //发送第一个字节 SCI0CR2_TIE = 1; //使能发送Buffer空中断 } /****************************************************************************** 函数名:SCI0_UART_Get_Tx_Buffer_Status 功 能:获取发送Buffer的当前状态 参 数:无 返回值:0 - 目前没有数据在发送 1 - 目前有数据在发送 ******************************************************************************/ uint8_t SCI0_UART_Get_Tx_Buffer_Status(void) { if ((SCI0SR1_TDRE != 0) && (SCI0TxBuffer.Len == 0)) return 0; return 1; } /****************************************************************************** 函数名:SCI0_UART_Init 功 能:初始化SCI0为UART模式,并配置于SCI0_UART.h中设置的UART参数 参 数:无 返回值:无 ******************************************************************************/ void SCI0_UART_Init(void) ////////////调试表针 { uint8_t m16; m16 = 104; SCI0BDH = (INT8U)((m16 >> 8)); SCI0BDL = (INT8U)(m16); SCI0CR1 = 0x00; // 8 Data Bits, 1 Start Bit, 1 Stop Bit, No Parity SCI0CR2 = 0x0C; // Enable Tx and Rx } #pragma CODE_SEG __NEAR_SEG NON_BANKED //置所有中断函数放在FLASH的非分页区 /****************************************************************************** 函数名:SCI0_ISR 功 能:SCI0中断服务函数,用于接收数据 参 数:无 返回值:无 ******************************************************************************/ void interrupt SCI0_ISR(void) { } #pragma CODE_SEG DEFAULT