
uart硬件结构(需要修改).ppt
44页Ø1.LPC2000系列简介Ø2.引脚描述Ø3.存储器寻址Ø4.系统控制模块Ø5.存储器加速模块 (MAM)Ø6.外部存储器控制器(EMC)Ø7.引脚连接模块Ø8. GPIOLPC2000系列ARM硬件结构Ø9. 向量中断控制器Ø10.外部中断输入Ø11.定时器0和定时器1Ø12. SPI接口Ø13. I2C接口Ø14. UART(0、1)Ø15. A/D转换器Ø16. 看门狗Ø17. 脉宽调制器(PWM)Ø18. 实时时钟4.14 UART(0、1)•特性 LPC2000系列微控制器具有两个功能强大的UART,其特性如下:§ 16字节接收FIFO和16字节发送FIFO;§ 寄存器位置符合16C550工业标准;§ 接收FIFO触发点可设置为1、4、8或14字节;§ 内置波特率发生器;§ UART1含有标准调制解调器接口信号 •应用示例LPC2000的I/O电压为3.3V,连接时须注意电平的匹配LPC2000其它通信设备TxD0RxD0TxD0RxD0与PC机相连时,由于PC机串口是RS232电平,所以连接时需要使用RS232转换器LPC2000PC机串口232电平转换TxD0RxD0TxD0RxD0RxD1RTSCTSDSR1DTR1TxD1LPC2000ModemTxDRxDDCDRI1RTSCTSDSR1DTR1DCD1RI1RS232电平转换当使用Modem接口时,需要一个RS232转换器将信号转换为RS232电平后,才能与Modem连接 。
移位寄存器UnRSR接收缓冲寄存器UnRBRUARTn接收单元RxDn除数锁存寄存器UnDLL、UnDLMUARTn波特率发生器UARTn控制寄存器(UnLCR)FIFO控制寄存器(UnFCR)UARTn状态寄存器(UnLSR)中断中断使能寄存器UnIER中断标志寄存器UnIIRUARTn高速缓存寄存器UnSCR发送缓冲寄存器UnTHRUARTn发送单元TxDn移位寄存器UnTSRMODEMModem控制寄存器U1MCRModem状态寄存器U1MSRCTSDSRDCDDTRRIRTSVPB总总线线只有UART1才有Modem接口•UART结构图VPB总总线线AHB-VPB桥ARM7UARTn发送单元TxDn移位寄存器UnTSR发送缓冲寄存器UnTHRAHB总线ARM7AHB总线UARTn发送单元TxDn移位寄存器UnTSR发送缓冲寄存器UnTHRVPB总总线线AHB-VPB桥CPUUnTSRTXDUnTHRUnTHR描述复位值7 : 0发送器保持寄存器写入该寄存器的值保存到发送FIFO中,当该字节到达FIFO底部时,它将被送入发送移位寄存器(UnTSR)进行发送未定义•UART发送单元 •UART0、UART1各含有1个16字节的发送FIFO缓冲区。
•UnTHR是UARTn发送FIFO的最高字节 •UART的发送FIFO是一直使能的发送FIFOUnTHRUnTSR•UART发送FIFO缓冲区VPB总总线线AHB-VPB桥ARM7AHB总线移位寄存器UnRSR接收缓冲寄存器UnRBRUARTn接收单元RxDnVPB总总线线AHB-VPB桥移位寄存器UnRSR接收缓冲寄存器UnRBRUARTn接收单元RxDnARM7AHB总线RXDUnRBRCPUUnRSRUnRBR描述复位值7 : 0接收缓存寄存器,它包含了接收FIFO中最早接收到的字节未定义•UART接收模块 •UART0、UART1各含有1个16字节的接收FIFO缓冲区 •软件设置接收FIFO缓冲区的触发字节 UART FIFO控制寄存器控制寄存器位76[5 : 3]210功能Rx触发点设置—复位TxFIFO复位RxFIFO使能FIFO接收FIFOUnRSRUnRBRUnFCR•UART接收FIFO缓冲区UARTUART线状态寄存器线状态寄存器位76543210功能RXFETEMTTHREBIFEPEOERDR•UART线状态寄存器——UnLSR 线状态寄存器(UnLSR)为只读寄存器,它提供UARTn发送和接收模块的状态信息 。
4.14 UART(0、1)•UART波特率发生器 UART0和UART1各含有一个单独的波特率发生器,两者的功能相同,且相互独立 4.14 UART(0、1)名称描述复位值UnDLL[7:0]除数锁存寄存器低字节两个寄存器一起构成一个16位的除数,决定UARTn的波特率未定义UnDLM[7:0]除数锁存寄存器高字节 这两个寄存器决定波特率时钟的频率,而波特率时钟必须是波特率的16倍波特率计算公式如下:BaudRate = FPCLK / ([U0DLM,U0DLL]×16)•Modem控制寄存器——U1MCR位功能功能描述0DTR控制选择Modem输出引脚DTR该位在回写模式激活时读出为01RTS控制选择Modem输出引脚RTS该位在回写模式激活时读出为03 : 2保留用户软件不要向该位写入14回写模式0:禁止modem回写模式1:使能modem回写模式modem回写模式提供了一个执行回写测试的诊断机制7 : 5保留用户软件不要向该位写入1 该寄存器使能Modem的回写模式,并控制Modem的输出信号4.14 UART(0、1)4.14 UART(0、1)•回写模式 在Modem回写模式下,发送器输出的串行数据在内部连接到接收器的串行输入端。
输入脚RxD1对回写模式无影响,输出脚TxD1保持总为1的状态4个Modem输入(CTS, DSR, RI和DCD)与外部断开此时,U1MSR的高4位分别由U1MCR的低4位驱动DSRCTSRIDCDDTRRTSTXDRXDModem接口芯片引脚DSRCTSRIDCDDTRRTSTXDRXDU1MCRBit0Bit1Bit2Bit3位功能功能描述0Delta CTS检测到CTS状态发生变化时,该位置位读取U1MSR时清零1Delta DSR检测到DSR状态发生变化时,该位置位读取U1MSR时清零2后沿 RI检测到RI状态发生变化时,该位置位读取U1MSR时清零3Delta DCD检测到DCD状态发生变化时,该位置位读取U1MSR时清零4CTS反映输入信号CTS的补码回写模式下该位连接U1MCR的bit15DSR反映输入信号DSR的补码回写模式下该位连接U1MCR的bit06RI反映输入信号RI的补码回写模式下该位连接U1MCR的bit27DCD反映输入信号DCD的补码回写模式下该位连接U1MCR的bit1•Modem状态寄存器 该寄存器为只读,它反映Modem输入信号的状态信息。
需要注意的是,Mdoem信号对UART1的操作没有直接影响,Modem信号的操作是通过软件来实现的4.14 UART(0、1)4.14 UART(0、1) 中断中断使能寄存器UnIER中断标志寄存器UnIIRUART0中断源UART0发送单元UART0接收单元UART1中断源UART1发送单元UART1接收单元Modem模块•中断接口 UART0和UART1的中断接口包含中断使能寄存器(UnIER)和中断标识寄存器(UnIIR)4.14 UART(0、1) •中断使能寄存器UnIER描述复位值0RBR中断使能1:使能RDA中断;0:禁止RDA中断01THRE中断使能1:使能THRE中断;0:禁止THRE中断02Rx线状态中断使能1:使能Rx线状态中断;0:禁止Rx线状态中断;该中断状态可从UnLSR[4:1]读出03Modem中断使能 1:禁止Modem中断;0:禁止Rx线状态中断;该中断状态可从U1MSR[3:0]读取注:只有UART1具有07 : 4保留,用户软件不要向这些位写入1未定义 UnIER可以控制UARTn的4个中断源其中RBR中断使能包括两个中断,一个是接收数据可用(RDA)中断,一个是接收超时中断(CTI)。
稍后将对各中断源作详细介绍4.14 UART(0、1) •中断标识寄存器UnIIR描述复位值0中断挂起1:没有挂起的中断;0:至少有一个中断被挂起03 : 1中断标识这3位表示了对应于UARTn Rx FIFO的中断未列出的其它组合作为保留值011:1. 接收线状态中断(RLS)0010:2a. 接收数据可用中断(RDA)0110:2b. 字符超时指示(CTI)001:3. 发送中断(THRE)000:4. Modem中断 注:只有UART1具有7 : 3保留,用户软件不要向这些位写入1未定义 UnIIR提供状态代码用于指示一个挂起中断的中断源和优先级在访问UnIIR过程中,中断被冻结如果在访问UnIIR时产生了中断,该中断将被记录,在下次访问UnIIR时可以读出,避免了中断的丢失VIC中断控制器ARM7TDMI内核Modem中断(UnIIR[3:1]=001)UnIERbit2bit1bit0bit3RLS中断(UnIIR[3:1]=011)RDA中断(UnIIR[3:1]=010)CTI中断(UnIIR[3:1]=110)THRE中断(UnIIR[3:1]=001)注意:只有UART1才有Modem中断。
4.14 UART(0、1) •UART中断示意图优先级最高第二第二第三RLS中断RDA中断CTI中断THRE中断VIC中断控制器ARM7TDMI内核Modem中断第四UnIERbit2bit1bit0bit3注意:只有UART1才有Modem中断4.14 UART(0、1) •UART中断优先级l RLS中断:该中断为最高优先级它在UARTn发生下面的错误时产生中断:1、溢出错误(OE)2、奇偶错误(PE)3、帧错误(FE)4、间隔中断(BI)通过查看UnLSR[4:1]可以了解到产生该中断的错误条件读取UnLSR时清除该中断;4.14 UART(0、1) •中断源说明 l RDA中断:该中断与CTI中断并列为第二优先级当接收的有效数据到达接收FIFO设置寄存器(UnFCR)中设置的触发点时,RDA被激活当接收FIFO中的有效数据少于触发点时,RDA复位;1.移位寄存器(UnRSR)从RxDn引脚接收串行数据后,送入接收FIFO中;2.当接收FIFO中的有效数据数量到达预定的触发点时,置位RDA中断;3.从UnRBR寄存器中读取FIFO中最早到达的数据,当FIFO中的有效数据小于预定触发点时,清零RDA中断;接收FIFO12345679101112131415168触发点设置=8UnRBRUnRSRRxDnUnIIR[3:1]xxxUnIIR[0]10100xxx1DATA•中断源说明 l CTI中断:当接收FIFO中的有效数据少于预定的触发点数量(至少有一个字节)时,如果在一定时间内仍然没有接收到新的数据,那将触发该中断。
这个时间为:3.5~4.5个字节所需要的时间注:对接收FIFO的任何操作都会清零该中断标志 接收FIFO12345679101112131415168触发点设置=8UnRBR1.移位寄存器(UnRSR)从RxDn引脚接收串行数据后,送入接收FIFO中;2.当接收FIFO中的有效数据少于触发个数,但至少有一个时,如果长时间没有数据到达,将触发CTI中断;3.从UnRBR中读取接收FIFO中的数据,或者有新的数据送入接收FIFO,都将清零CTI中断;UnRSRDATARxDnUnIIR[3:1]xxxUnIIR[0]11100xxx1•中断源说明 接收FIFO12345679101112131415168触发点设置=8UnRBR说明:“3.5~4.5个字节的时间”,其意思是在串口当前的波特率下,发送3.5~4.5个字节所需要的时间;UnRSRDATARxDnUnIIR[3:1]xxxUnIIR[0]11100xxx1注意:当接收FIFO中存在多个数据,从UnRBR读取数据,但是没有读完所有数据,那么在经过3.5~4.5个字节的时间后将触发CTI中断;l CTI中断:当接收FIFO中的有效数据少于预定的触发点数量(至少有一个字节)时,如果在一定时间内仍然没有接收到新的数据,那将触发该中断。
这个时间为:3.5~4.5个字节所需要的时间注:对接收FIFO的任何操作都会清零该中断标志 •中断源说明 12345679101112131415168UnRBRU0TSRTxDnUnIIR[3:1]xxxUnIIR[0]1l THRE中断:该中断为第三优先级当发送FIFO为空并且满足一定的条件时,该中断将被触发这些条件是:发送FIFO1.系统启动时,虽然发送FIFO为空,但不会产生THRE中断DATA1100UnTSR2.在上一次发生THRE中断后,向发送FIFO中写入1个字节数据,将在延时一个字节加上一个停止位后发生THRE中断 这是因为:如果发送移位寄存器为空,那么写入发送FIFO的数据将直接进入发送移位寄存器; 此时发送FIFO仍然为空,如果立即产生THRE中断,就会影响紧接着要写入发送FIFO的数据; 所以在发送完该字节以及一个停止位后,才产生THRE中断;3.如果在发送FIFO中有过两个字节以上的数据,但是现在发送FIFO为空时,将立即触发THRE中断当THRE中断为当前有效的最高优先级中断时,往UnTHR写数据,或者对UnIIR的读操作,将使THRE中断复位。
•中断源说明 除数锁存寄存器UnDLL、UnDLMUARTn波特率发生器UARTn控制寄存器(UnLCR)FIFO控制寄存器(UnFCR)中断中断使能寄存器UnIERMODEMModem控制寄存器U1MCRVPB总总线线4.14 UART(0、1) •UART设置使用UART前需要设置的寄存器4.14 UART(0、1) •UART设置使用UART前需要设置的寄存器寄存器名称功能UnLCR设置UARTn的通信格式UnFCR设置UARTn的接收FIFO缓冲区UnDLL、 UnDLM设置UARTn的通信波特率UnIER设置UARTn的中断U1MCRModem接口设置(只有UART1具有)4.14 UART(0、1) •UART设置 使用UART前需要设置的寄存器——UnLCR,设置UART通信字符长度、停止位个数、奇偶校验位等参数UART控制寄存器位76[5 : 4]62[1 :0]功能除数锁存间隔奇偶选择奇偶设置停止位字长UART寄存器地址访问方式UART0U0RBR0xE000 C000DLAB=0,对地址:0xE000 C000进行读读访问U0THRDLAB=0,对地址:0xE000 C000进行写写访问U0DLLDLAB=1,对地址:0xE000 C000进行访问U0IER0xE000 C004DLAB=0,对地址:0xE000 C004进行访问U0DLMDLAB=1,对地址:0xE000 C004进行访问UART1U1RBR0xE001 0000DLAB=0,对地址:0xE001 0000进行读读访问U1THRDLAB=0,对地址:0xE001 0000进行写写访问U1DLLDLAB=1,对地址:0xE001 0000进行访问U1IER0xE001 0004DLAB=0,对地址:0xE001 0004进行访问U1DLMDLAB=1,对地址:0xE001 0004进行访问•UART——特殊寄存器地址相同的寄存器•UART应用示例——操作流程设置引脚连接模块将对应IO连接到UARTn设置串口波特率设置串口工作模式发送或接收数据检查串口状态字或等待串口中断•UART应用示例——初始化代码UART0初始化代码:#define UART_BPS 115200Void UART0_Ini(void){ uint16 Fdiv; PINSEL0 = 0x00000005; U0LCR = 0x83; Fdiv = (Fpclk / 16) / UART_BPS; U0DLM = Fdiv / 256; U0DLL = Fdiv % 256; U0LCR = 0x03;}定义表示波特率的宏,方便修改设置引脚连接模块置位除数锁存位根据波特率计算分频值设置除数寄存器(除数锁存访问位必须置位)清除除数锁存位,并设置工作模式•UART应用示例——初始化代码UART0初始化代码:#define UART_BPS 115200Void UART0_Ini(void){ uint16 Fdiv; PINSEL0 = 0x00000005; U0LCR = 0x83; Fdiv = (Fpclk / 16) / UART_BPS; U0DLM = Fdiv / 256; U0DLL = Fdiv % 256; U0LCR = 0x03;}设置引脚连接模块将对应IO连接到UART0设置串口波特率设置串口工作模式发送或接收数据检查串口状态字或等待串口中断•UART应用示例——收发数据void UART0_SendByte(uint8 data){ U0THR = data; while((U0LSR & 0x40) == 0);}uint8 UART0_RcvByte(void){ uint8 rcv_data; while((U0LSR & 0x01) == 0); rcv_data = U0RBR; return(rcv_data);}查询方式发送一字节数据:查询方式接收一字节数据:将要发送的一字节数据写入U0THR等待数据发送完毕等待数据到达从U0RBR中读出接收的数据返回接收的数据UART中断•UART与VIC的关系 UART0、UART1分别位于VIC的通道6和通道7。
中断使能寄存器VICIntEnable的Bit6和Bit7分别用来控制通道6和通道7的使能 通道6UART0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[6]VICIntEnable[6]IRQFIQ通道7UART1VICIntSelect[7]VICIntEnable[7]IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配UART中断•UART0与VIC的关系Ø当VICIntEnable[6] = 0时,通道6中断禁止;通道6UART0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[6]VICIntEnable[6] = 0IRQFIQ通道7UART1VICIntSelect[7]VICIntEnable[7] = 0IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配UART中断•UART0与VIC的关系Ø当VICIntEnable[6] = 0时,通道6中断禁止;通道6UART0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[6]VICIntEnable[6] = 1IRQFIQ通道7UART1VICIntSelect[7]VICIntEnable[7] = 0IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配Ø当VICIntEnable[6] = 1时,通道6中断使能。
UART中断•UART1与VIC的关系Ø当VICIntEnable[7] = 0时,通道7中断禁止;通道6UART0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[6]VICIntEnable[6] = 0IRQFIQ通道7UART1VICIntSelect[7]VICIntEnable[7] = 0IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配UART中断•UART1与VIC的关系Ø当VICIntEnable[7] = 0时,通道7中断禁止;通道6UART0向量IRQ通道0向量IRQ通道15非向量IRQ通道VICIntSelect[6]VICIntEnable[6] = 0IRQFIQ通道7UART1VICIntSelect[7]VICIntEnable[7] = 1IRQFIQVICVectAddr0VICVectCntl0VICVectAddr15VICVectCntl15VICDefVectAddrIRQ通道分配Ø当VICIntEnable[7] = 1时,通道7中断使能。
UART中断•UART中断LPC2000系列ARM UART中断分为 四类:Ø 接收中断Ø 发送中断(THRE)Ø 接收状态中断(RLS)Ø Modem中断 (Modem)ü 接收超时中断(CTI)ü 接收数据可用中断(RDA)UART中断•UART中断示意图UART中断使能寄存器UnIERUART中断标志寄存器UnIIR[3:1]Bit0:RBR中断使能 接收中断 010 :RDA110 :CTIBit1:THRE中断使能 发送中断 001 :THRE Bit2:接收状态中断使能 接收状态中断 011 :RLSBit3:Modem状态中断使能 Modem中断 000 :Modem 注意:只有UART1具有Modem中断UART中断•UART中断示意图注意:只有UART1具有Modem中断UART中断使能寄存器UnIERUART中断标志寄存器UnIIR[3:1]Bit0:RBR中断使能 接收中断 010 :RDA110 :CTIBit1:THRE中断使能 001 :THRE Bit2:接收状态中断使能 011 :RLSBit3:Modem状态中断使能 000 :Modem 1111发送中断 接收状态中断 Modem中断 中断使能位为1时,对应的中断使能UART中断总结•接收中断——数据可用中断(RDA) LPC2000系列ARM UART接口具有16字节的接收FIFO,接收触发点可以设置为1、4、8、14字节,当接收到的字节数达到接收触发点时,便会触发中断。
UnRBR接收移位寄存器触发点设置=8……接收FIFO128916触发触发RDA中断中断UART中断总结•接收中断——接收超时中断(CTI) 当接收FIFO中的有效数据个数少于触发个数时(注:接收FIFO中至少有一个字节),如果在3.5到4.5个字符的时间内,没有收到其它数据,将触发CTI中断UnRBR接收移位寄存器触发点设置=8……接收FIFO128916触发触发CTI中断中断UART中断总结•发送中断 LPC2000系列ARM UART接口具有16字节的发送FIFO,当发送FIFO由非空变为空时,便会触发“发送中断” 发送移位寄存器UnTHR……接收FIFO128916触发发送中断触发发送中断注意:前面对“发送中断”做了详细的描述,在这里,为了描述方便,将发送中断简单表示成“发送FIFO由非空变为空”UART中断总结•接收状态中断 在UART接收数据时,如果出现:溢出错误(OE)、奇偶错误(PE)、帧错误(FE)和间隔中断(BI)中的任意一个错误时,都会触发接收状态中断 +触发接收状态中断触发接收状态中断溢出错误(OE)奇偶错误(PE)帧错误(FE)间隔中断(BI)UART中断总结•Modem中断 UART1接口具有Modem中断,当引脚DCD、DSR或CTS上发生状态变化时,都会触发Modem中断。
此外,Modem输入引脚RI上低到高电平的跳变也会产生一个Modem中断 +触发触发Modem中断中断DCD引脚状态发生变化DSR引脚状态发生变化CTS引脚状态发生变化RI引脚上升沿。












