SCI0_UART.c 3.13 KB
Newer Older
崔立宝's avatar
崔立宝 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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
/******************************************************************************
文 件 名: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