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