微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LPC17XX 串口接收发送中断(含RS485)最全面驱动程序

LPC17XX 串口接收发送中断(含RS485)最全面驱动程序

时间:11-09 来源:互联网 点击:

默认触发深度为8字节! 49#define FCR_VAL ((RX_FIFO_SIZE==4)?0x47:((RX_FIFO_SIZE==8)?0x87:((RX_FIFO_SIZE==14)?0xC7:0x87))) 50 51//把UART1也转成和别的UART一样的结构,以便函数入参用!但程序中会对UART1的结构还原为正确的再使用! 52#define LPC_UART(x) ((x==0)?(LPC_UART_TypeDef *)LPC_UART0_BASE: 53 ((x==1)?(LPC_UART_TypeDef *)LPC_UART1_BASE: 54 ((x==2)?(LPC_UART_TypeDef *)LPC_UART2_BASE: 55 (LPC_UART_TypeDef *)LPC_UART3_BASE))) 56 57//串口收发线状态位控制(LSR寄存器). 58#define LSR_RDR ((uint8)(1<0)) 59#define LSR_OE ((uint8)(1<1)) 60#define LSR_PE ((uint8)(1<2)) 61#define LSR_FE ((uint8)(1<3)) 62#define LSR_BI ((uint8)(1<4)) 63#define LSR_THRE ((uint8)(1<5)) 64#define LSR_TEMT ((uint8)(1<6)) 65#define LSR_RXFE ((uint8)(1<7)) 66#define LSR_BITMASK ((uint8)(0xFF)) 67 68//串口中断标识位控制(IIR寄存器). 69#define IIR_INTSTAT ((uint32)(1<0)) 70#define IIR_RLS ((uint32)(3<1)) 71#define IIR_RDA ((uint32)(2<1)) 72#define IIR_CTI ((uint32)(6<1)) 73#define IIR_THRE ((uint32)(1<1)) 74#define IIR_MASK ((uint32)(7<1)) 75#define IIR_BITMASK ((uint32)(0x3CF)) 76 77//串口收发中断位控制(IER寄存器). 78#define IER_RBR ((uint32)(1<0)) //接收数据可用中断. 79#define IER_THRE ((uint32)(1<1)) //发送数据缓冲区为空. 80#define IER_BITMASK ((uint32)(0x307)) 81#define IER1_BITMASK ((uint32)(0x38F)) 82 83//中断类型. 84 typedef enum 85 { 86 IRQ_RBR = 0, 87 IRQ_THRE = 1 88 }IRQ_TYPE; 89 90//使能状况. 91 typedef enum 92 { 93 DISABLE = 0, 94 ENABLE = !DISABLE 95 }State; 96 97//状态标志. 98 typedef enum 99 { 100 RESET = 0, //复位. 101 SET = !RESET //置位.102 }BitFlag; 103104//串口相关标志及数据缓冲区结构.105 typedef struct106 { 107 uint8 RX_OK; //串口接收完成标志. 0:未接收完成 1:接收完成 108 uint8 TX_OK; //串口发送完成标志. 0:未发送完成 1:发送完成109 uint16 RX_cnt; //收到字节计数器.110 uint16 TX_cnt; //发送字节计数器.111 uint16 RX_len; //已接收的字节长度.112 uint16 TX_len; //待发送的字节长度.113 uint8 RX_Buffer[BUFFER_SIZE]; //串口接收缓冲区.114 uint8 TX_Buffer[BUFFER_SIZE]; //串口发送缓冲区. 115116 }uart_info; 117118//结构实体定义119 UART_EXT uart_info UART[4]; //4个结构对应4个串口.120121122/*123****************************************************************************************************** 124**函数名称: UART_IO_INIT(uint8 COM) ** 125**函数描述:所有串口IO初始化---RTS根据自己的实际情况修改! ** 126**参 数: COM--------串口: 0,1,2,3 ** 127**返 回: 无 ** 128****************************************************************************************************** 129*/130 UART_EXT void UART_IO_INIT(uint8 COM); 131132/*133****************************************************************************************************** 134**函数名称: void UART_INIT(uint8 COM, uint32 BaudRate) ** 135**函数描述:串口UART初始化 ** 136**参 数: COM--------串口: 0,1,2,3 ** 137** BaudRate---波特率 ** 138**返 回: 无 ** 139****************************************************************************************************** 140*/141 UART_EXT void UART_INIT(uint8 COM, uint32 BaudRate); 142143/*144****************************************************************************************************** 145**函数名称: uint16 UART_SendBytes(uint8 COM, uint8 *txbuf, uint16 len, State USE_RS485) ** 146**函数描述:串口UART发送多个字节(供外部文件调用) ** 147**参 数: COM---------串口: 0,1,2,3 ** 148** txbuf-------数据指针,指向发送缓冲区 ** 149** len---------待发送字节数 ** 150** USE_RS485---DISABLE:不使能RS485_EN ENABLE:使能RS485_EN ** 151**返 回: bSent---成功发送字节数 ** 152****************************************************************************************************** 153*/154 UART_EXT uint16 UART_SendBytes(uint8 COM, uint8 *txbuf, uint16 len, State USE_RS485); 155156/*157****************************************************************************************************** 158**函数名称: uint16 UART_SendStrings(uint8 COM, char *txbuf, State USE_RS485) ** 159**函数描述:串口UART发送字符串(供外部文件调用) ** 160**参 数: COM---------串口: 0,1,2,3 ** 161** txbuf-------数据指针,指向发送缓冲区 ** 162** USE_RS485---DISABLE:不使能RS485_EN ENABLE:使能RS485_EN ** 163**返 回: bSent---成功发送字节数 ** 164****************************************************************************************************** 165*/166 UART_EXT uint16 UART_SendStrings(uint8 COM, char *txbuf, State USE_RS485); 167168/*169****************************************************************************************************** 170**函数名称: void UART_IRQ_SendBytes(uint8 COM, uint8 *txbuf, uint16 len, State USE_RS485) ** 171**函数描述:串口UART中断发送多个字节(供外部文件调用) ** 172**参 数: COM---------串口: 0,1,2,3

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top