资源预览内容
第1页 / 共34页
第2页 / 共34页
第3页 / 共34页
第4页 / 共34页
第5页 / 共34页
第6页 / 共34页
第7页 / 共34页
第8页 / 共34页
第9页 / 共34页
第10页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第六章第六章 S3C2410的串口的串口UART及编程及编程 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)主要内容:主要内容:v6.1 S3C2410的串口的串口UART概述概述v6.2 UART的控制寄存器的控制寄存器v6.3 UART通信程序例子通信程序例子6.1 S3C2410的串口的串口UART概述概述6.1.1 S3C2410串行通信(串行通信(UART)单元)单元vS3C2410 UART单元提供单元提供3个独立的个独立的异步异步串行通信串行通信接口,皆可工作于中断和接口,皆可工作于中断和DMA模式。使用系统时钟模式。使用系统时钟最高波特率达最高波特率达230. 4 kb/s,如果使用外部设备提供,如果使用外部设备提供的时钟,可以达到更高的速率。每一个的时钟,可以达到更高的速率。每一个UART单元单元包含一个包含一个16字节的字节的FIFO发送缓冲器和一个发送缓冲器和一个16字节的字节的FIFO接收缓冲器,用于数据的接收和发送。接收缓冲器,用于数据的接收和发送。vS3C2410X UART支持可编程支持可编程波特率波特率、红外发送、红外发送/接接收收(仅仅UART2 )、1个或个或2个停止位、个停止位、5位位/6位位/7位位/8位位数据宽度和奇偶校验。数据宽度和奇偶校验。6.1.2 波特率的产生波特率的产生v波特率由一个专用的波特率由一个专用的UART波特率分频寄存波特率分频寄存器器(UBRDIVn)(n=02)控制,计算公式如)控制,计算公式如下下 UBRDIVn=(int)ULK/(波特率波特率 16)1 或者或者 UBRDIVn=(int) PLK/(波特率波特率 16)1波特率表示每秒钟传送的二进制位数,是衡量数据传送速率的指标,它用单位时间内载波调制状态改变的次数来表示。6.1.3 UART通信操作通信操作v下面简略介绍下面简略介绍UART操作,关于数据发送、操作,关于数据发送、数据接收、中断产生、波特率产生、查询检数据接收、中断产生、波特率产生、查询检测模式、红外模式和自动流控制的详细介绍,测模式、红外模式和自动流控制的详细介绍,请参照相关教材和数据手册。请参照相关教材和数据手册。v发送数据帧是可编程的。一个数据帧包含发送数据帧是可编程的。一个数据帧包含1个个起始位、起始位、58个数据位、个数据位、1个可选的奇偶校验个可选的奇偶校验位和位和12位停止位,停止位位数通过行控制寄位停止位,停止位位数通过行控制寄存器存器ULCONn配置。配置。6.2 UART的控制寄存器的控制寄存器6.2.1 UART线路控制寄存器线路控制寄存器ULCONnv该寄存器的位该寄存器的位6决定是否使用红外模式,决定是否使用红外模式,位位5、位、位4和位和位3决定校验方式,位决定校验方式,位2决定决定停止位长度,位停止位长度,位1和位和位0决定每帧的数据决定每帧的数据位数。具体如表位数。具体如表6-1所示所示:v6.2.2 UART控制寄存器控制寄存器UCONnv该寄存器决定UART的各种模式,见表6-2所示:6.2.3 UART FIFO控制寄存器控制寄存器UFCONnvS3C2410 UART每通道有每通道有16个字节的先入先个字节的先入先出(出(FIFO)接收缓冲器和)接收缓冲器和16个字节的先入先个字节的先入先出(出(FIFO)发送缓冲器,如果在程序中使用)发送缓冲器,如果在程序中使用它们,必须要对它们,必须要对UART FIFO控制寄存器控制寄存器UFCONn进行定义,进行定义,UFCONn的配置如表的配置如表6-3所示:所示:6.2.4 UART 调制解调器控制寄存器调制解调器控制寄存器UMCONn(n=0或或1)6.2.5发送寄存器发送寄存器UTXH和接收寄存器和接收寄存器URXHv这两个寄存器存放发送和接收的数这两个寄存器存放发送和接收的数据,当然只有据,当然只有1字节字节(8位数据位数据)。需要。需要注意的是,在发生溢出错误时,接注意的是,在发生溢出错误时,接收的数据必须被读出来,否则会引收的数据必须被读出来,否则会引发下次溢出错误。发下次溢出错误。6.2.6 UART TX/RX 状态寄存器状态寄存器UTRSTATvUART TX/RX状态寄存器UTRSTAT配置见表6-5:6.3 UART通信程序例子通信程序例子vUART通信电平可有三种形式,通信电平可有三种形式,TTL电平,电平,RS232或或RS485。嵌入式控制系统大多具有小、巧、轻、。嵌入式控制系统大多具有小、巧、轻、灵、薄的特点,许多传感器和灵、薄的特点,许多传感器和S3C2410一体或距离一体或距离很近,没有干扰,例如多参数监护仪等医疗设备,很近,没有干扰,例如多参数监护仪等医疗设备,为简化电路,可采用为简化电路,可采用TTL电平直接与电平直接与S3C2410相连。相连。v如果通信距离在几十米左右并是点对点通信可如果通信距离在几十米左右并是点对点通信可采用采用RS232接口,否则只能采用接口,否则只能采用RS485通信。在工通信。在工程上程上UART通信大多采用三线制(发送连对方接收、通信大多采用三线制(发送连对方接收、接收连对方发送,双方共地)。本节在介绍接收连对方发送,双方共地)。本节在介绍RS232接口电路的同时给出了一个接口电路的同时给出了一个UART通信程序实例。通信程序实例。TTL电平信号规定,+5V等价于逻辑“1”,0V等价于逻辑“0”。RS232采用负逻辑电平,即-15v-3V代表逻辑”1”,+3v+15v代表逻辑”0”。RS485电平,两者均采用差分传输,发送端AB间的电压 +2+6V 代表”1” -2-6V代表”0”接收端AB间的电压差 大于+200mv 1 小于-200mv 06.3.1 RS232接口电路接口电路v本实验平台的电路中,本实验平台的电路中,UART0与与S3C2410连连接电路如图接电路如图6-1所示,所示,UART0只采用两根接只采用两根接线线RXD0和和TXD0 (RS232只能实现点对点通只能实现点对点通信,且两点要共地信,且两点要共地),因此只能进行简单的数,因此只能进行简单的数据传输及接收。据传输及接收。UART0采用美信采用美信232电平转电平转换器换器(MAX232)做电平转换做电平转换 图6-1 UART0X与S3C2410的连接电路图 6.3.2 UART实验程序实验程序v/-v/ 头文件头文件uart0.hv/-v#define TX_INTTYPE 1 /1:发送中断电平触发标志:发送中断电平触发标志v#define RX_INTTYPE 1 /1:接收中断电平触发标志:接收中断电平触发标志vextern void Uart_Port_Set(void); /保存本程序使用的端口原状态保存本程序使用的端口原状态vextern void Uart_Port_Return(void); /恢复本程序使用的端口原状恢复本程序使用的端口原状态态vextern void Uart_Uclk_En(int, int); /串行通信使用串行通信使用UCLKvextern void Uart_Pclk_En(int, int); / 串行通信使用串行通信使用PCLK vvoid Test_Uart0_Int(void); /UART0初始化初始化v/-v/ UART实验程序实验程序v/-v#include v#include v#include 2410addr.hv#include 2410lib.hv#include def.hv#include uart0.hvvoid Uart_Port_Set(void);vvoid Uart_Port_Return(void);vvoid _irq Uart0_TxInt(void) ; /发送中断服务程序发送中断服务程序vvoid _irq Uart0_RxIntOrErr(void); /接收字符和错误代码中断服务接收字符和错误代码中断服务程序程序vvoid _sub_Uart0_RxInt(void); /接收字符子中断服务程序,从上接收字符子中断服务程序,从上面程序分出面程序分出vvolatile U32 save_rGPHCON,save_rGPHDAT,save_rGPHUP;vvolatile U32 save_ULCON0,save_UCON0,save_UFCON0,save_UMCON0;v/* 定义一些变量,做临时保存端口数据和状态的缓冲区,通信结束,端定义一些变量,做临时保存端口数据和状态的缓冲区,通信结束,端口数据和状态要恢复口数据和状态要恢复*/vVolatile U32 isTxint isRxint; /定义二个变量,分别做发送和接收中定义二个变量,分别做发送和接收中断结束与否标志断结束与否标志vvolatile static char *uart0TxStr;/ UART0发送字串地址发送字串地址vvolatile static char *uart0RxStr;/ UART0接收字串地址接收字串地址v/-v/ 保存保存UART实验使用的端口和寄存器实验使用的端口和寄存器v/-vvoid Uart_Port_Set(void)vv /保存保存H口控制寄存器口控制寄存器v save_rGPHCON=rGPHCON; v save_rGPHDAT=rGPHDAT;v save_rGPHUP=rGPHUP;v /配置配置UART口口v rGPHCON&=0 x3c0000;v rGPHCON|=0 x2faaa; /H口控制寄存器口控制寄存器nRTS1,nCTS1功能功能使能使能v rGPHUP|=0 x1ff; /Uart 口上拉禁止口上拉禁止v /rINTSUBMSK=0 x7ff; /屏蔽全部子中断屏蔽全部子中断v save_ULCON0=rULCON0; /保存保存UART控制寄存器控制寄存器 v save_UCON0=rUCON0; v save_UFCON0=rUFCON0; v save_UMCON0=rUMCON0; v /Initialize UART0, portv v/-v/ 恢复恢复UART实验使用的端口和寄存器实验使用的端口和寄存器v/-vvoid Uart_Port_Return(void)v v /Pop UART GPIO port configurationv rGPHCON=save_rGPHCON;v rGPHDAT=save_rGPHDAT;v rGPHUP=save_rGPHUP;v /Pop Uart control registers v rULCON0=save_ULCON0; v rUCON0 =save_UCON0; v rUFCON0=save_UFCON0; v rUMCON0=save_UMCON0; v vv/-v/ UART通信使用通信使用UCLK做波特率发生器做波特率发生器vvoid Uart_Uclk_En(int ch,int baud)vv v int ch, baud;v Uart_Printf(nSelect UART channel0:UART0;1:UART1;2:UART2:n);v ch=Uart_GetIntNum(); /从键盘读通道号从键盘读通道号v Uart_Printf(nSelect baud rate :n); v baud=Uart_GetIntNum(); /从键盘读波特率从键盘读波特率v if(ch = 0) /选选UART0v Uart_Select(0);v rUCON0|=0 x400; /选选UCLKv rUBRDIV0=( (int)(UCLK/16./baud) -1 ); /波特率因子寄存器波特率因子寄存器v Uart_Printf(UCLK is enabled by UART0.n); v vfor(i=0;i100;i+ v UA
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号