您好,欢迎访问三七文档
LPC2103/2/1系列ARM通用异步收发器(UART)UART功能应用2UART基本操作3UART简介1UART简介异步串口通信线路简单,可胜任长距离的可靠传输,因此被广泛用于工业控制及医疗设备、便携式器件、POS系统等。工业级的异步串口LPC2000系列ARM有多个UART,非常适合需要多个UART的应用场合。UART1带有Modem功能UART接口|LPC2300系列ARMUART接口|LPC2300系列ARMUART功能应用2UART基本操作3UART简介1UART功能应用TxDRxDRxD_PCTxD_PCRS-232电平转换UARTLPC20000xAA0x550xAA0x55与PC机进行通信UART功能应用UART接口|LPC2300系列ARM使用Modem功能电话线RS-232电话线网络服务器RS-232PCRS-232显示器RS-232打印机RS-232LPC2300UART1UART功能应用使用Modem,可实现远距离传输。UART接口|LPC2300系列ARMUART功能应用2UART基本操作3UART简介1如果我们想使用UART基本的数据收发功能,应当如何操作呢?其次,用UART进行数据收发2最后,查询状态信息3首先,初始化UART1UART基本操作UART接口|LPC2300系列ARMUnLCRUnLSRUnFCR控制、状态寄存器UnDLL波特率发生器UnDLMPCLKUnFDRUART初始化波特率发生器接收单元发送单元UART接口|LPC2300系列ARMRxUnRSRRxFIFOreceiverRBRTxtransmitterUnTSRTxFIFOTHR基本结构框图UART0、1对UART的初始化主要包括:引脚、波特率、通信参数、工作模式。UART初始化UART接口|LPC2300系列ARM引脚设置波特率设置通信参数设置工作模式设置UART状态信息初始化1引脚设置波特率设置通信模式设置工作模式设置收发数据2状态信息3中断状态线状态发送单元接收单元UART接口|LPC2300系列ARMUART初始化引脚设置GPIOUART……第一步:设置引脚连接模块,将对应I/O连接到UART。UART接口|LPC2300系列ARMUART状态信息初始化1引脚设置波特率设置通信模式设置工作模式设置收发数据2状态信息3中断状态线状态发送单元接收单元UART接口|LPC2300系列ARMUART初始化发送/接收数据的时候需要时钟,这个时钟是怎么产生的?波特率设置UART接口|LPC2300系列ARM波特率配置基本原则:波特率发生器所产生的时钟必须是目标波特率的16倍。即:16xBaud=FPCLK/(UnDLM:UnDLL)receiverUnDLL波特率发生器UnDLMPCLKUnFDRUART初始化LPC2000系列ARM的每个UART都有一个波特率发生器,它的时钟源是PCLK,通过配置波特率发生器即可为发送/接收单元提供所需的时钟。波特率设置接收单元发送单元UART接口|LPC2300系列ARM自动波特率测量的两种模式:模式0:测量“起始位下降沿和最低有效数据位下降沿的时间间隔”来自动设置波特率。通常可以人工计算和配置所需波特率。但是,LPC2103微控制器具有自动波特率功能,可令这些麻烦被免去。UART初始化自动波特率功能启动后,UART会自动测量特定数据位所用时间,然后自动配置波特率发生器,产生和“发送该特定数据位所用波特率”相同的波特率。模式1:测量起始位的脉宽来自动设置波特率。UART接口|LPC2300系列ARM波特率设置startbit11(LSBof‘A’or’a’)UARTRxD11D0D1D2D3D4D5D6D7Pstart‘A’(0x41)或‘a’(0x61)UARTRxD●模式0:测量起始位下降沿和最低有效数据位的下降沿的时间间隔来得出波特率。速率测量计数器检测到数据位最低有效位下降沿,速率测量计数器停止。当计数完毕之后,速率测量计数器的值装入除数锁存寄存器,波特率自动切换为正常模式。检测到起始位的下降沿,速率测量计数器对PCLK进行计数。UART初始化UART接口|LPC2300系列ARMstartbit11(LSBof‘A’or’a’)UARTRxD11D0D1D2D3D4D5D6D7Pstart‘A’(0x41)或‘a’(0x61)UARTRxD●模式1:测量起始位的脉宽来得出波特率。速率测量计数器检测到起始位的下降沿,速率测量计数器对PCLK进行计数。检测到起始位的上升沿,速率测量计数器停止。UART初始化UART接口|LPC2300系列ARM当计数完毕之后,速率测量计数器的值装入除数锁存寄存器,波特率自动切换为正常模式。UART初始化波特率设置在实际工作中,有时候可能受到晶振本身频率的限制而不能得到精确的串口波特率。在这种情况下,可以考虑提高分频精度,以抵消晶振频率的偏差,从而获得精确的波特率——LPC2103微控制器的小数分频器便是为了满足该需求而设计。因此,波特率设置还包括小数分频器的使用。UART接口|LPC2300系列ARMUART状态信息初始化1引脚设置波特率设置通信模式设置工作模式设置收发数据2状态信息3中断状态线状态发送单元接收单元UART接口|LPC2300系列ARMUART初始化同一通信系统中收发双方的帧格式必须一致,否则将会造成通信出错。下面介绍异步串行通信协议及帧格式的设置。UART接口|LPC2300系列ARM通信模式设置UART初始化通信模式设置StartbitLSBDatabitDatabitDatabitDatabitDatabitDatabitMSBParitybitStopbitStopbit起始位数据位(5~8位)奇偶校验位停止位可有可无可设置为1、1.5、2位停止位起始位为低电平先发送起始位,然后是最低有效数据位,最后是停止位。UART接口|LPC2300系列ARM串行通信协议UART初始化起始位数据位(5~8位)奇偶校验位停止位0111D0D1D2D3D4D5D6D7P帧格式是通过线控制寄存器(UnLCR)来设置:停止位2奇偶设置3奇偶选择[5:4]字长功能[1:0]位UnLCRUART接口|LPC2300系列ARM通信模式设置UART状态信息初始化1引脚设置波特率设置通信模式设置工作模式设置收发数据2状态信息3中断状态线状态发送单元接收单元UART接口|LPC2300系列ARM用户在使用时可通过FIFO控制寄存器(UnFCR)的位0来使能/禁能RxFIFO。UnLCRUnLSRUnFCR控制、状态寄存器RxFIFORBRTxFIFOTHRUART初始化LPC2000系列ARM的UART拥有16字节的接收FIFO和16字节的发送FIFO。工作模式设置16字节注:发送FIFO是一直使能的。UART接口|LPC2300系列ARMUART初始化设置引脚连接模块设置波特率设置通信帧格式设置工作模式操作示例(初始化)UART接口|LPC2300系列ARMvoidUART0_Ini(void){uint32Fdiv=0;PINSEL0=(0x014)|(0x016);U0LCR=0x80;Fdiv=(Fpclk/16)/UARTBAUD;U0DLM=Fdiv/256;U0DLL=Fdiv%256;U0LCR=0x03;U0FCR|=0x81;}UART收发数据数据通过串口发送引脚输出,外部数据通过接收引脚输入。其次,用UART进行数据收发2接收单元波特率发生器APB总线RxD现在看一个简单的模型:LPC2000系列ARM通过UART与其它控制器进行数据交换。发送单元波特率发生器APB总线TxDUART接口|LPC2300系列ARMUART状态信息初始化1引脚设置波特率设置通信模式设置工作模式设置收发数据2状态信息3中断状态线状态发送单元接收单元UART接口|LPC2300系列ARM接收单元波特率发生器APB总线RxD发送单元波特率发生器APB总线TxD发送单元主要包括:发送移位寄存器(UnTSR)、发送保持寄存器(UnTHR)和发送FIFO。UART收发数据UART发送数据下面介绍发送单元的内部结构及数据发送的流向。UART接口|LPC2300系列ARMUnTSRTxFIFOtransmitterTHR发送单元结构框图UART收发数据UnTSR1514131211109876543210UnTHR0TxD发送单元UnTHR是发送FIFO地址最高的部分,装载最近一次进入发送FIFO的数据。发送过程:CPU向发送保持寄存器(UnTHR)写数据,数据进入发送FIFO,再通过发送移位寄存器从TxD引脚发送出去。0x550x55UART接口|LPC2300系列ARMUART收发数据UnTSR1514131211109876543210TxD查询方式发送的原理介绍完毕。下面介绍在查询方式是如何了解数据发送的进度的。在LPC2000系列ARM中,可以通过查询发送FIFO是否为空或查询发送移位寄存器是否为空来判断数据发送的进度。但是,这两类查询是有些许区别的:查询到FIFO为空,这说明发送数据已经全部送入UART了,但这些数据是否已发送完毕呢?不一定,请看演示:1:查询FIFO是否为空2:查询移位寄存器是否为空0x55此时,虽然发送FIFO已空但发送移位寄存器内还有数据,发送尚未结束。相反,若查到移位寄存器为空,就可以认为发送已结束或未启动。UART接口|LPC2300系列ARMUART状态信息初始化1引脚设置波特率设置通信模式设置工作模式设置收发数据2状态信息3中断状态线状态发送单元接收单元UART接口|LPC2300系列ARM状态信息3中断状态线状态UART收发数据接收单元UnRSRAPB总线RxD发送单元波特率发生器APB总线TxDUART接收数据现在介绍接收单元的内部结构及数据流向。UART接口|LPC2300系列ARM接收单元包含:接收移位寄存器(UnRSR)和接收缓存寄存器(UnRBR)以及接收FIFO。UnRSRRxFIFOreceiverRBRUART收发数据UART接口|LPC2300系列ARM接收单元结构框图UART收发数据1514131211109876543210UnRBR00x55UnRSR0x550x55RxDRxFIFO禁能当接收FIFO禁能,接收移位寄存器(UnRSR)将接收到的数据直接送入接收缓存寄存器(UnRBR)中。UnRBR是接收FIFO的最高字节UART接口|LPC2300系列ARM0xAAUART收发数据UnRSR1514131211109876543210UnRBR00x550x55RxD0x550x550xAA0xAA0xBB0xBB0xAA0xBBRxFIFO使能每读取一次UnRBR,接收FIFO便丢失一个字节。若接收FIFO使能,可一次接收多个字节0xBB0xAAUnRBR装载了UART最早接收的字符UART接口|LPC2300系列ARMUART收发数据在数据接收过程中,如何得知是否有接收数据和接收了多少个数据呢?查询方式中断方式UART接口|LPC2300系列ARMUART收发数据UnRSR1514131211109876543210UnRBR00x550x55RxD0x550x550xAA0xAA0xBB0xBB0xAA0xBB查询方式接收数据0xBB0xAA查询FIFO中是否含有数据?while((U0LSR&0x01)==0);有数据,搬走它rcv_data=U0RBR;0x550xAA0xBB0xBB这样的方式太烦了每次还要查询。竟然没有数据,等等吧while((U0LSR&0x01)==0);等待中……while((U0LSR&0x01)==0);没有收到数据的话,就要一直等待了。如果可以在数据接收完毕时产生中断,来通知CPU,就省时间了。线状态寄存器(UnLSR)反映了发送和接收模块的状态。UnLSR0通过查询UnLSR[0]来判断FIFO中是否包含数据。UAR
本文标题:第4章-UART
链接地址:https://www.777doc.com/doc-4328489 .html