您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 【UART】LPC1700系列Cortex-M3_ZLG
通用异步收发器(UART)LPC1700系列Cortex-M3微控制器目录UART简介1UART功能应用2UART基本操作3UART之IrDA4UART简介通用异步收发器(UART)是实现设备间异步串行通信的关键模块,LPC1700系列ARM具有4个符合16C550工业标准的异步串口。16字节收发FIFO内置小数分频器支持DMA发送接收UART1增加Modem和RS-485/EIA-485模式UART0、UART2、UART3增加IrDA接口目录UART简介1UART功能应用2UART基本操作3UART之IrDA4UART功能应用RS-232是PC机与设备通信里应用最广泛的一种串行接口。它被定义为一种在低速率串行通讯中增加通讯距离的单端标准,由于其最大通信距离的限制,因此它常用于本地设备之间的通信。最高速率约为20kb/s传输最大距离约为15m共模抑制比能力差RS-232特性打印机PCRS-232电平转换UART功能应用与TTL电平兼容传输距离实际达1200m共模抑制比能力强RS-485是一种常用远距离和多机通信的串行接口。RS-485只是定义电压和阻抗,编程方式和普通串口类似,与RS-232主要区别在于其特性。RS-485特性UART功能应用成本低体积小、功耗低数据传输干扰较小LPC1700系列ARM的UART0/2/3可以工作在UART模式,也可以工作在IrDA模式,这两种不同的工作模式不能在各自的应用里互换。IrDA是一种利用红外进行点对点无线通信的技术。IrDA的优点UART功能应用LPC1700系列ARM仅有UART1具有Modem接口,通过该接口可以接入电话线网络实现远距离通信。目录UART简介1UART功能应用2UART基本操作3UART之IrDA4UART基本操作引脚配置波特率设置帧格式设置FIFO设置UnLCR•字符长度•停止位、校验位UART的初始化1UnDLL、UnDLM、UnACR•自动波特率•手动波特率UnFCR•FIFO自动复位•Rx触发点选择UART基本操作波特率设置通过寄存器UnACR模式位可以使用两种自动波特率测量模式:模式0:通过测量UARTRx引脚上两个的下降沿进行测量(起始位的下降沿和第一位的上升沿)得出波特率注:采用模式0,发送的第一个字节数据的低两位为01注:采用模式1,发送的第一个字节数据的最低位为1模式1:通过测量UARTRx引脚上的下降沿和后续上升沿之间的时间(起始位的长度)来得出波特率自动波特率:UARTn自动波特率功能如果使能,那么速率测量计数器将测量接收数据流中的1位所消耗的时间,并根据这个结果来设置除数锁存器UnDLM和UnDLLUART基本操作波特率设置D7D0D6D5startD4D3D1D21模式0假设以9600的波特率发送了第一个字节的低两位为10的数据:模式0的实际测量的波特率为:6400D7D0D6D5startD4D31D2D1模式1模式1的实际测量的波特率为:4800自动波特率的误码操作:当模式0或者模式1收到的第一个字节数据非正确的格式时,情况又当如何UART基本操作自动波特率的操作模式:查询方式中断方式查询方式操作示例:U0ACR=0x03;while((U0ACR&0X01)!=0);等待自动波特率完成自动波特率启动UART基本操作自动波特率的中断方式:自动波特率可产生两种中断:自动波特率中断自动波特率超时中断波特率最小值15216Pclk2=波特率最大值=)2(16Pclk停止位奇偶位数据位如果发送的波特率不在这个范围,则会出现波特率自动超时中断操作流程使能自动波特率相关中断UnIER[8:9]清除自动波特率相关中断标志UnACR[8:9]执行自动波特率中断相关函数UnIIR[8:9]设置自动波特率模式并启动UnACR[0:1]若不清除一直中断UART基本操作波特率设置PCLKUnDLL波特率发生器UnDLMUnFDR目标波特率:Baud=FPCLK/(16xUnDLM:UnDLL)假设APB时钟为24MHz,UART0要得到的目标波特率为9600:U0LCR=0x83;usFdiv=(FPCLK/16)/9600;U0DLM=usFdiv/256;U0DLL=usFdiv%256;U0LCR=0x03;操作示例:允许设置波特率设置波特率锁存波特率手动波特率配置模式:UART波特率发生器的时钟源是APB时钟,APB时钟经过16分频后将该值保存在除数锁存寄存器DLM与DLLUART基本操作波特率设置那么我们实际所得的波特率是否是精确的9600在公式usFdiv=(FPCLK/16)/9600中计算结果小数部分被忽略掉实际的波特率为9615UART基本操作波特率设置启用小数分频后,UARTn的波特率计算公式为:DIVADDVAL)(MULVALMULVALUnDLL):(UnDLM16FpclkUARTn波特率注:DIVADDVAL和MULAVL分别是UnFDR的低0~3位和低4~7位0MULVAL=150=DIVADDVAL15DIVADDVALMULVAL升高波特率小数分频小数分频器寄存器(UnFDR)可以控制产生波特率的时钟预分频,大大降低了波特率因时钟整数分频所带来的误差。UART基本操作那么我们如何得到精确的DLL、DLM、MULVAL和DIVADDVAL的值呢UART基本操作开始Dlest=PCLK/(16×BR)FRest=1.5DLest=Int(PCLK/(16×BR×FRest))FRest=PCLK/(16×BR×DLest)1.1FRest1.9?结束选择另一个FRest值域在1.1~1.9DIVDDVAL和MULVAL的值查表DLM=Dlest[15:8]DLL=Dlest[7:0]NOYES注:该流程图仅为无法整数分频的情况表格UART基本操作帧格式设置起始位数据位(5~8位)奇偶校验位停止位Data从低到高ParitybitStopbitStartUART通信时需保证收发两端的帧格式一致,否则会出现通信错误停止位2奇偶设置3奇偶选择[5:4]字长功能[1:0]位UnLCR可有可无1~2位操作示例:要求UART0的工作模式为:8位字符长度,1个停止位,无奇偶校验00U0LCR=0x03;0011UART基本操作FIFO设置位75:3210功能Rx触发选择保留TxFIFO复位RxFIFO复位FIFO使能FIFO的初始化比较简单,主要设置包括Rx的触发深度,TxFIFO与RxFIFO的复位,以及FIFO的使能。UnFCR操作示例:U0FCR=0x83;UART0接收缓冲区触发点为8字节,同时使能并复位发送和接收FIFOUART基本操作UART的数据收发2UART数据收发UnLSRUnIIR查询发送状态查询接收状态UnLSRUnIIR接收数据UnRBR실장이홍재发送数据UnTHR•发送过程•接收过程UART基本操作在数据收发的过程中,通常采用查询和中断两种方式来进行。它们的基本原理如下:中断方式:通过中断实现对数据的收发,然后查询中断标志寄存器(UnIIR)来进行不同处理。查询方式:通过查询线状态寄存器(UnLSR)来获得数据发送和接收的状态,然后进行相应操作。UART数据收发原理UART基本操作UART发送单元UnTHR是发送FIFO的最高字节。它包含了TXFIFO中的最新字符,可以通过总线接口对其操作UnTSRTxFIFO发送单元内部结构THR发送单元发送移位寄存器(UnTSR)发送保持寄存器(UnTHR)发送FIFOUART基本操作UART查询方式发送UnTSR151413121110987654321UnTHR0xAAFIFOCPU向发送保持寄存器(UnTHR)写数据,数据进入发送FIFO,然后通过发送移位寄存器将数据从TXD引脚发送出去UnLSR5UnLSR[5]反映发送FIFO中是否包含数据。FIFO有数据U0THR=ucDat;while((U0LSR&0x20)==0);TXDUART基本操作UART中断方式发送UnTSR151413121110987654321UnTHR0xAAFIFO等待1个字节和1个停止位后产生“THRE”中断发送FIFO为空时,产生“THRE”中断当发送一个字节当发送两个以上字节系统启动时,FIFO为空不产生中断当FIFO为空时,若只向UnTHR写入一个字节的数据,那么该数据会直接传送到发送移位寄存器。UART基本操作UART发送中断的注意点中断状态0中断标志[3:1]功能位UnIIR位0:表示中断是否挂起0:至少1个中断挂起1:没有挂起中断位3~1:表示中断状态001:发送中断010:接收数据中断110:字符超时中断其他:略voiduart0Isr(void){……while((U0IIR&0x01)==0){switch(U0IIR&0x0E){case0x02:处理发送中断程序break;case0x04:处理接收数据中断程序break;case0x0c:处理字符超时中断程序break:default:break;……}当发送中断为当前有效的最高优先级时,向UnTHR寄存器写数据,或者对UnIIR的读操作,都会清除THRE中断标志UART基本操作UART接收单元接收单元接收移位寄存器(UnRSR)接收保持寄存器(UnRBR)接收FIFOUnRSRRxFIFO接收单元内部结构RBRUnRBR是接收FIFO的最高字节,它包含了最高接收到的字符,可以通过总线接口读取它。UART基本操作UART查询方式接收UnRSR151413121110987654321UnRBRFIFOdataUnLSR0UnLSR[0]反映接收FIFO中是否包含数据。移位寄存器(RSR)从RXD引脚接收串行数据后,送入接收FIFO;CPU从接收保持寄存器(UnRBR)将收到的数据读出while((U0LSR&0x01)==0);ucRcvData=U0RBR;FIFO有数据若无数据,则始终查询,浪费CPU的资源UART基本操作UART中断方式接收UnRSR151413121110987654321UnRBRFIFO触发点data当RXFIFO中数据未达8个字节,且在一断时间内未放入数据,会产生接收器超时中断;当RXFIFO中寄存器字节数达到8个时,触发RDA中断。收到8个字符,到达预设值,产生RDA中断产生字符超时中断(CTI)假设此时UnFCR[7:6]为10,则RX的触发点设置为8个字节等待3.5-4.5个字节的时间可以一次读取多个数据,当对UnRBR执行读操作,中断标志被清除。仍然没有接收到数据UART基本操作DMA(DirectMemoryAccess)——直接存储器访问。在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU。存储器存储器外设存储器存储器外设外设外设DMA控制器DMA控制器DMA控制器DMA控制器LPC1700系列Cortex-M3的DMA控制器支持4种传输方式UART的DMA模式3UART基本操作LPC1700系列Cortex-M3为微控制器的UART接口支持DMA操作。可以分别配置DMA方式发送或接收。存储器/其他外设UART发送/接收FIFODMA控制器voiduart0DmaInit(void){PCONP|=PCONP|0x20000000;DMACIntTCClear|=0x03;DMACC1LLI=0;DMACC1Config|=(0x0111)|(0x001)|(0x086);DMACC1Control|=(0x0212)|(0x0215)|(0x0018)|(0x0021);DMACC1Control|=0x80000000;//接下页代码打开GPDMA电源清除中断计数标志初始化DMA传输流设定传输源为存储器,目标为UART设定突发大小:8位设定数据宽度:8位使能中断UART基本操作//接上一页代码DMACC1SrcA
本文标题:【UART】LPC1700系列Cortex-M3_ZLG
链接地址:https://www.777doc.com/doc-2807157 .html