您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第六章 ARM9_串口UART及编程
第六章S3C2410的串口UART及编程6.1S3C2410的串口UART概述6.1.1S3C2410异步串行通信(UART)单元S3C2410UART单元提供3个独立的异步串行通信接口,皆可工作于查询、中断和DMA模式。使用系统时钟最高波特率达230.4kb/s,如果使用外部设备提供的时钟,可以达到更高的速率。每一个UART单元包含一个16字节的FIFO(FirstInputFirstOutput,先进先出移位寄存器),用于数据的接收和发送。S3C2410UART支持可编程波特率、红外发送/接收(UART2)、1个或2个停止位、5位/6位/7位/8位数据宽度和奇偶校验。6.1.2波特率的产生波特率由一个专用的UART波特率分频寄存器(UBRDIVn)控制,UBRDIVn值计算公如下:UBRDIVn=(int)[ULK/(波特率×16)]-1或者UBRDIVn=(int)[PLK/(波特率×16)]-1式中:时钟选用ULK还是PLK由UART控制寄存器UCONn[10]的状态决定。如果UCONn[10]=0,则用PLK作为波特率发生器的时钟源频率;否则选用ULK作为波特率发生器的时钟源频率。UBRDIVn的值必须在1~(216-1)之间。例如:若ULK或者PLK等于40MHz,当波特率为115200b/s时,则UBRDIVn=(int)[40000000/(115200×16)]一1=int(21.7)-1=21-1=206.1.3UART通信操作下面简略介绍UART操作,关于数据发送、数据接收、中断产生、波特率产生、查询检测模式、红外模式的详细介绍,参见下面6.3节。发送数据帧是可编程的。一个数据帧包含1个起始位、5~8个数据位、1个可选的奇偶校验位和1~2位停止位,停止位通过行控制寄存器ULCONn配置。与发送数据帧类似,接收数据帧也是可编程的。接收帧由1个起始位、5~8个数据位、l个可选的奇偶校验位以及1~2位行控制寄存器ULCONn中设定的停止位组成。接收器还可以检测溢出错、奇偶校验错、帧错误和传输中断,每一个错误均可以设置一个错误标志。•溢出错误(overrunerror):指已接收到的数据在读取之前被新接收的数据覆盖;•奇偶校验错:指接收器检测到的校验和与设置的不符;•帧错误:指没有接收到有效的停止位;•传输中断:表示接收数据RxDn保持逻辑0超过一帧的传输时间。在FIFO模式下,如果RxFIFO非空,而在3个字的传输时间内没有接受到数据,则产生超时。6.2UART的控制寄存器6.2.1UART行控制寄存器ULCONn该寄存器的位6决定是否使用红外模式,位5、位4和位3决定校验方式,位2决定停止位长度,位1和位0决定每帧的数据位数。具体如下:ULCONn[7]保留;ULCONn[6]红外线模式,0:正常模式;1:红外线模式;ULCONn[5:3]校验模式,0xx:无校验;100:奇校验;101:偶校验;ULCONn[2]停止位,0:一个停止位;1:二个停止位;ULCONn[1:0]数据位,00:5位;01:6位;10:7位;11:8位。6.2.2UART控制寄存器UCONn该寄存器决定UART的各种模式。UCONn[10]1:ULK做波特率发生器;0:PLK做波特率发生器。UCONn[9]1:Tx中断电平触发;0:Tx中断脉冲触发。UCONn[8]1:Rx中断电平触发;0:Rx中断脉冲触发。UCONn[7]1:接收超时中断允许;0:接收超时中断禁止。UCONn[6}1:产生接收错误中断;0:不产生接收错误中断。UCONn[5]l:发送直接传给接收方式(loopback);0:正常模式。UCONn[4]1:发送间断信号;0:正常模式发送。UCONn[3:2]发送模式选择:00:禁止发送;01:中断或查询模式;10:DMA0请求(UART0),DMA3请求(UART2);11:DMAl请求(UART1)。UCONn[1:0]接收模式选择。00:禁止接收;01:中断或查询模式;10:DMA0请求UART0,DMA2请求UART2;11:DMAl请求UART1。6.2.3UARTFIFO控制寄存器UFCONnUFCONn[7:6]00:TxFIFO寄存器中有0字节就触发中断;01:TxFIFO寄存器中有4字节就触发中断;10:TxFIFO寄存器中有8字节就触发中断;11:TxFIFO寄存器中有12字节就触发中断。UFCONn[5:4]00:RxFIFO寄存器中有4字节就触发中断;01:RxFIFO寄存器中有8字节就触发中断;10:RxFIFO寄存器中有12字节就触发中断;11:RxFIFO寄存器中有16字节就触发中断。UFCONn[3]保留。UFCONn[2]1:FIFO复位清零TxFIFO;0:FIFO复位不清零TxFIFO。UFCONn[1]1:FIFO复位清零RxFIFO;0:F1FO复位不清零RxFIFO。UFCONn[0]1:允许FIFO功能;0:禁止FIFO功能。6.2.4UARTMODEM控制寄存器UMCONnUMCONn[7:5]保留,必须全为0。UMCONn[4]1:允许使用AFC模式;0:禁止使用AFC模式。UMCONn[3]保留,必须全为0。UMCONn[0]1:激活rRTS;0:不激活rRTS。6.2.5发送寄存器UTXH和接收寄存器URXH这两个寄存器存放发送和接收的数据,当然只有1字节(8位数据)。需要注意的是,在发生溢出错误时,接收的数据必须被读出来,否则会引发下次溢出错误。6.2.6发送和接收状态寄存器UTRSTATnUTRSTATn发送和接收状态寄存器包括UTRSTAT0,UTRSTAT1andUTRSTAT2UTRSTATn寄存器各位定义:UTRSTATn[1]发送缓冲器空标志0=不空;1=空。UTRSTATn[0]接收缓冲器有接收数据标志0=空;1=接收缓冲器有数据。6.2.7波特率分频寄存器UBRDIV波特率分频寄存器UBRDIV的定义和使用在6.1.2中已叙述,不再重复。6.2.8UART单元各寄存器的定义在随书提供的软件包2410test中,在2410addr.h文件中有关于UART单元各寄存器的定义。//UART#definerULCON0(*(volatileunsigned*)0x50000000)//UART0Linecontrol#definerUCON0(*(volatileunsigned*)0x50000004)//UART0control#definerUFCON0(*(volatileunsigned*)0x50000008)//UART0FIFOcontrol#definerUMCON0(*(volatileunsigned*)0x5000000c)//UART0Modemcontrol#definerUTRSTAT0(*(volatileunsigned*)0x50000010)//UART0Tx/Rxstatus#definerUERSTAT0(*(volatileunsigned*)0x50000014)//UART0Rxerrorstatus#definerUFSTAT0(*(volatileunsigned*)0x50000018)//UART0FIFOstatus#definerUMSTAT0(*(volatileunsigned*)0x5000001c)//UART0Modemstatus#definerUBRDIV0(*(volatileunsigned*)0x50000028)//UART0Baudratediviaor#definerULCON1(*(volatileunsigned*)0x50004000)//UART1Linecontrol#definerUCON1(*(volatileunsigned*)0x50004004)//UART1Control#definerUFCON1(*(volatileunsigned*)0x50004008)//UART1FIFOcontrol#definerUMCON1(*(volatileunsigned*)0x5000400c)//UART1Modemcontrol#definerUTRSTAT1(*(volatileunsigned*)0x50004010)//UART1Tx/Rxstatus#definerUERSTAT1(*(volatileunsigned*)0x50004014)//UART1Rxerrorstatus#definerUFSTAT1(*(volatileunsigned*)0x50004018)//UART1FIFOstatus#definerUMSTAT1(*(volatileunsigned*)0x5000401c)//UART1Modemstatus#definerUBRDIV1(*(volatileunsigned*)0x50004028)//UART1Baudratedivisor#definerULCON2(*(volatileunsigned*)0x50008000)//UART2Linecontrol#definerUCON2(*(volatileunsigned*)0x50008004)//UART2Control#definerUFCON2(*(volatileunsigned*)0x50008008)//UART2FIFOcontrol#definerUMCON2(*(volatileunsigned*)0x5000800c)//UART2Modemcontrol#definerUTRSTAT2(*(volatileunsigned*)0x50008010)//UART2Tx/Rxstatus#definerUERSTAT2(*(volatileunsigned*)0x50008014)//UART2Rxerrorstatus#definerUFSTAT2(*(volatileunsigned*)0x50008018)//UART2FIFOstatus#definerUMSTAT2(*(volatileunsigned*)0x5000801c)//UART2Modemstatus#definerUBRDIV2(*(volatileunsigned*)0x50008028)//UART2Baudratedivisor#ifdef_BIG_ENDIAN#definerUTXH0(*(volatileunsignedchar*)0x50000023)//UART0TransmissionHold#definerURXH0(*(volatileunsignedchar*)0x50000027)//UART0Receivebuffer#definerUTXH1(*(volatileunsignedchar*)0x50004023)//UART1TransmissionHold#definerURXH1(*(volatileunsignedchar*)0x50004027)//UART1Receivebuffer#definerUTXH2(*(volatileunsignedchar*)0x50008023)//UART2TransmissionHold#definerURXH2(*(volatileunsignedchar*)0x50008027)//UART2Receivebuffer#defineWrUTXH0(ch)(*(volatileunsignedchar*)0x50000023)=(unsignedchar)(ch)#defineRdURXH0()(*(volatileunsignedchar*)0x50
本文标题:第六章 ARM9_串口UART及编程
链接地址:https://www.777doc.com/doc-29918 .html