📄 serial.h
字号:
#ifndef _SERIAL_H
#define _SERIAL_H
#define UART_CNT 5 //串口设备的个数
typedef struct
{
INT8U len; //数据位 5,6,7,8
INT8U parity; //校验位 0-e,1-o,4-n
INT8U stop; //停止位 1,2,15-1.5
int baud; //波特率
int timeout; //超时时间
}DATA_ATRIB;
#define RECV_BUF_LEN 10 //接收缓冲区长度
#define SEND_BUF_LEN 300 //发送缓冲区长度
#define RECV_ERR_LEN 0 //接收错误
//接收缓冲环行结构
typedef struct Circle_Buf
{
int len; //该结构缓冲区的长度
INT8U buf[RECV_BUF_LEN]; //该结构缓冲区
struct Circle_Buf *pNext; //环行指针
}Circle_Buf;
typedef struct at91_chan
{
int Id; //串口外设ID,目前用该外设的中断号
BOOLEAN flag; //设备是否可用标志
DATA_ATRIB data; //串口通讯属性
AT91PS_USART pUart; //设备的基地址
void (*GetChar)(struct at91_chan *,int);//接收数据处理函数
void (*PutChar)(struct at91_chan *,int);//发送数据处理函数
Circle_Buf Cbuf[2]; //接收数据环行缓冲,用于PDC环行指针
INT8U Buf_bake[RECV_BUF_LEN]; //接收的有效数据保存区
Circle_Buf *pHead; //环行缓冲的头指针,该指针指向目前
//正在使用的缓冲(既PDC_RPR指向的缓冲)
OS_EVENT *pMutexSem; //发送缓冲区的竞争信号量
INT8S Sbuf[SEND_BUF_LEN]; //发送缓冲区
//OS_EVENT *pQMsg; //串口发送的消息
//void *QMsgTbl[MSG_QUEUE_SIZE]; //串口数据发送消息队列
//TMessage Msg; //消息体
}AT91_CHAN;
extern AT91_CHAN UART_CHAN[UART_CNT];
#define INIT_UART \
/*ID*/ { 0,\
/*flag*/ FALSE,\
/*data*/ {8,4,1,115200,100},\
/*pUart*/ NULL,\
/*GetChar*/ NULL,\
/*PutChar*/ NULL,\
/*Cbuf*/ {{0,},},\
/*Buf_bake*/{0,},\
/*pHead*/ NULL,\
/*MutexSem*/NULL,\
/*Sbuf*/ {0,}\
}
#define FRAME_FULL 0
#define FRAME_TIMEOUT 1
#define FRAME_ERROR 2
void SetUartIO(AT91_CHAN *pUart);
void SetUartMode(AT91_CHAN *pUart);
void SetUartPDC(AT91_CHAN *pUart);
void SetUartMutexSem(AT91_CHAN *pUart);
void SerialInit(AT91_CHAN pUart);
void SerialIntHandling(int uart_base,int uart_vector);
void UartPrintf(int id,const char *format, ...);
void UartGetChar(AT91_CHAN *pUart,int len);
void UartPutChar(AT91_CHAN *pUart,int len);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -