第45章UART接口功能及应用_第1页
第45章UART接口功能及应用_第2页
第45章UART接口功能及应用_第3页
第45章UART接口功能及应用_第4页
第45章UART接口功能及应用_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、S3C44B0的UART接口功能及应用开发UART概述 nUART(Universal Asynchronous Receiver/Transmitter) 通用异步收发器n提供两个独立的UART;n皆可工作于中断和DMA模式,即UART可以通过产生中断或DMA请求来完成CPU和UART间的数据传输 ;n最高波特率达115.2Kbps;n每一个UART单元包含一个16字节的FIFO,用于数据的接收和发送,其次还包含一个波特率发生器,接收器,发送器和控制单元。 n提供两个串口DB9。其中UART1为主串口,可与PC或MODOM进行串行通迅。采用MAX3243E作为电平转换器UART0只采用二根接

2、线RXD和TXD,因此只能进行简单的数据传输及接收功能。UART0采用MAX3221E作为电平转换器。 UART概述 工作过程工作过程串口在电气连接上有3wire和9wire UART程序设计 n串口初始化 n数据发送和接收数据 UART的操作 n数据发送 n数据接收 n自动流控制AFC( Auto Flow Control)n非自动流控制 n波特率的产生n回环(Loop-back)模式 数据发送与接收 n工作过程n数据帧格式:可编程,它包含1个开始位,5到8个数据位,一个可选奇偶位和1到2个的停止位,具体由行控制寄存器(ULCONn)来定义。 n接收状态:q溢出错误表明新的数据在旧数据没有被

3、读取的情况下,覆盖了旧的数据。q奇偶错误表明接收器发现一个不希望出现的奇偶错误。q帧错误 表明接收到的数据没有一个有效的停止位。q断点条件表明接收器收到的输入保持了大于传输一帧数据时间的逻辑0状态。UART的行控制寄存器UART行控制寄存器ULCON0地址:0 x01D00000R/W初始值0 x00UART0的行控制寄存器ULCON1地址:0 x01D04000R/W初始值0 x00UART1的行控制寄存器位位名称描述7保留6Infra-Red Mode该位确定是否使用红外模式0普通操作模式1红外发送/接收模式5:3Parity Mode该位确定奇偶如何产生和校验0 xx无100奇校验101

4、偶校验110强制为1111强制为02Stop bit该位确定停止位的个数0每帧一位停止位1每帧两位停止位1:0Word length该位确定数据位的个数005位016位107位118位自动流控制AFCnRTS:发送请求信号 nCTS:清除发送信号nCTS信号有效表示对方UART的接收FIFO已准备好,nRTS信号有效表示自己的接收器FIFO已经准备好;CTS信号控制发送器的操作,接收器的状态影响RTS信号非自动流控制主要用于与modem连接时使用UART控制寄存器UCON0UART0控制寄存器地址:0 x01D00004R/W始值0 x00 UCON1UART1控制寄存器地址:0 x01D04

5、004R/W初始值0 x00位位名称描述9Tx interrupt type发送中断请求类型0脉冲1电平8Rx interrupt type接收中断请求类型0脉冲1电平7Rx time out enable允许/不允许Rx超时中断0不允许 1允许6interrupt enable允许/不允许产生UART错误中断0不允许 1允许5Loop-back Mode该位为1使UART进入回环模式(loop back)模式0普通运行1回环模式(loop back)4Send Break Signal该位为1使UART发送一个暂停条件,该位在发送一个暂停信号后自动清除0正常传送1发送暂停条件3:2Trans

6、mit Mode这两位确定哪个模式可以写TX数据到UART发送保持寄存器00禁止(Disable)01中断请求或 polling 模式10BDMA0请求(仅用于UART0)11BDMA1请求(仅用于UART1)1:0Receive Mode这两位确定哪个模式可以从UART接收缓冲寄存器读数据00禁止(Disable)01中断请求或 polling 模式10BDMA0请求(仅用于UART0)11BDMA1请求(仅用于UART1)波特率的产生UART传输的时钟:由内部系统时钟经16位分频器分频后产生。UART波特率分频寄存器波特率分频寄存器 UBRDIV0UART 波特率分频寄存器UBRDIV0

7、UART0波特率分频寄存器 地址:0 x01D00028R/WUBRDIV1UART1波特率分频寄存器 地址:0 x01D04028 R/W波特率的产生UBRDIVn(round_off)(MCLK/(bps 16) ) 1例如:如果波特率为115200bps,而MCLK为40MHz,则:UBRDIVn=(int)(40000000/(115200 * 16)+0.5)-1=(int)( 21.7+0.5)-1=22-1=21 round_off四舍五入UART FIFO控制寄存器UFCON0UART0 FIFO控制寄存器地址:0 x01D00008 R/W初始值0 x00 UFCON1UAR

8、T1 FIFO控制寄存器地址:0 x01D04008 R/W初始值0 x00 位位名称描述7:6Tx FIFO Trigger Level这两位确定发送FIFO的触发条件00空014-byte 108-byte 1112-byte5:4Rx FIFO TriggerLevel这两位确定接收FIFO的触发条件004-byte018-byte1012-byte1116-byte3保留2Tx FIFO ResetTX FIFO复位位,该位在FIFO复位后自动清除0正常1Tx FIFO复位1Rx FIFO ResetRx FIFO复位位该位在FIFO复位后自动清除0正常1Rx FIFO复位0FIFO

9、Enable0FIFO禁止1FIFO模式初始化void Uart_Init(int mclk,int baud) int i; mclk=MCLK; rUFCON0=0 x0;/禁止FIFO rUMCON0=0 x0; /禁止AFC rULCON0=0 x3; /普通模式,无奇偶校验,1个停止位,8位数据位 rUCON0=0 x245; /rx为边沿触发、tx为电平触发、 /禁止超时中断、产生接受错误中断、 /普通传送、发送与接受为轮循模式 rUBRDIV0=( (int)(mclk/16./baud + 0.5) -1 ); for(i=0;i100;i+); /延时作用UART发送保持寄存

10、器UTXH0/1UTXH0 UART0发送缓冲寄存器地址:0 x01D00020(小端模式)0 x01D00023(大端模式)UTXH1 UART1发送缓冲寄存器地址:0 x01D04020(小端模式)0 x01D04023(大端模式)UART 接收保持寄存器UART 接收缓冲寄存器和FIFO寄存器URXH0 UART0接收缓冲寄存器地址:0 x01D00024(小端模式)0 x01D00027(大端模式)URXH1 UART1接收缓冲寄存器地址:0 x01D04024(小端模式)0 x01D04027(大端模式)UART Tx/Rx状态寄存器UTRSTAT0 UART0 TX/RX状态寄存器

11、地址:0 x01D00010R初始值0 x6 UTRSTAT1 UART1 TX/RX状态寄存器地址:0 x01D04010R 初始值0 x6 位位名称描述2Transmit shifter Empty该位在发送移位寄存器没有有效的数据或发送移位寄存器为空时为10发送移位寄存器不空 1发送移位寄存器空1Transmit buffer Empty该位在发送缓冲寄存器没有包含有效的数据为1。如果UART使用FIFO,用户应当检查UFSTAT寄存器的Tx FIFO计数位和Tx FIFO满标志位代替检查该位。0不空1空0Receive buffer data ready无论何时接收缓冲寄存器包含有效数

12、据,该位为1,如果UART使用FIFO,用户应当检查UFSTAT寄存器的Rx FIFO计数位代替检查该位。0空1接收缓冲寄存器中有接收数据发送字符void Uart_SendByte (int data)if(data=n) while(!(rUTRSTAT0 & 0 x2); /一直等到一直等到THR为空为空Delay(10); /因为超级终端的响应慢因为超级终端的响应慢WrUTXH0(r);while(!(rUTRSTAT0 & 0 x2); /一直等到一直等到THR为空为空Delay(10);WrUTXH0(data);/将数据写入发送保存寄存器中将数据写入发送保存寄存器

13、中#define WrUTXH0(ch) (*(volatile unsigned char *)0 x1d00020)=(unsigned char)(ch)发送字符串void Uart_SendString(char *pt) while(*pt)Uart_SendByte(*pt+);接收字符char Uart_Getch(void) while(!(rUTRSTAT0 & 0 x1); /Receive data readreturn RdURXH0();/返回接收保持寄存器的内容#define RdURXH0()(*(volatile unsigned char *)0 x1

14、d00024)void Main(void)char input_char;/* user input char */ int i; char pt_str 10=0,0,0,0,0, 0,0,0,0,0;sys_Init();Uart_Init(0,115200); for( i=0;i10 ; i+ ) pt_stri = Uart_Getch();/接收到一个字符Uart_SendByte(pt_stri);/发送刚才收到的字符 Uart_SendString(* pt_str );/发送整串字符超级终端的配置n打开超级终端: 开始/程序/附件/通信/超级终端n配置: 115200波特率

15、,8位数据位,无奇偶检验,1位停止位,无硬件流控制。 格式化输出函数Uart_Printf(“ please input : n“);void Uart_Printf(char *fmt,.) va_list ap; char string256; va_start(ap,fmt); vsprintf(string,fmt,ap); Uart_SendString(string); va_end(ap);函数申明: int vsprintf(char *buf, const char *format, va_list arglist); 函数用途: 该函数作用同sprintf函数,向变量输出格

16、式化字符串。 区别是参数表由一个va_list类型的指针代替 头文件: stdio.h stdarg.h 输入参数: format:参数格式说明,具体参见printf函数 arglist:参数列表指针, 类型 va_list是一个void类型的指针(见stdarg.h),即等价于: int vsprintf(char *buf, const char *format, void *arglist) 输出参数: buf: 要写入的缓冲区 实时时钟RTCn功能: 日历/时钟及数据存储功能 定时功能n特点: RTC可在断电后继续使用 8位BCD数据,秒分时日月年 硬件支持闰年产生器n操作: 读/写R

17、TC模块中的寄存器,读取并设置 产生滴答时钟中断。 RTC功能框图 时钟源由外部32.768KHz晶振提供n操作: 1.读取并设置当前的时间, 读/写RTC模块中的寄存器, 2.产生滴答时钟中断。 寄存器寄存器寄存器名称名称功能功能RTCCONRTC控制寄存器控制寄存器用于控制用于控制BCDBCD寄存器的读寄存器的读/ /写使能写使能 BCDSECBCD 秒寄存器秒寄存器用于存放秒的用于存放秒的BCD值值BCDMINBCD 分钟寄存器分钟寄存器用于存放月的用于存放月的BCD值值BCDHOURBCD小时寄存器小时寄存器用于存放小时的用于存放小时的BCD值值BCDDAYBCD 日寄存器日寄存器用于

18、存放日的用于存放日的BCD值值BCDDATEBCD 星期寄存器星期寄存器用于存放星期的用于存放星期的BCD值值BCDMONBCD月寄存器月寄存器用于存放月的用于存放月的BCD值值BCDYEARBCD年寄存器年寄存器用于存放年的用于存放年的BCD值值TICNTTICK TIME计数计数寄存器寄存器用于确定是否允许时间滴答中断和时用于确定是否允许时间滴答中断和时间中断的计数值。间中断的计数值。RTC控制寄存器RTCCON 地址:0 x01D70040(小端) R/W(字节) 初始值:0 x0位位名称描述3CLKRSTRTC时钟计数复位:0不复位1复位2CNTSELBCD计数器选择:0组合的BCD计

19、数器1保留(分离的BCD计数器)1CLKSELBCD计数器时钟选择0XTAL1/215 divided clock1保留(XTAL clock only for test)0RTCENRTC读写允许:0禁止1允许如果RTC读写允许,STOP电流将大大增大,为了减少STOP电流,当不存取RTC时,设置该位为0,虽然为0,但RTC时钟仍运行。1.读取并设置当前的时间n读取当前时间 访问RTC模块的寄存器,首先要设RTCCON的bit0为1。CPU通过读取RTC模块中寄存器BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON 和BCDYEAR的值,得到当前的相应时间

20、值。n但是,在RTC模块中,由于多个寄存器在读,可能会产生1s的偏差。例如:当用户从BCDYEAR到 BCDMIN读寄存器时,结果假定是1959年12月31日23时59分,当用户读BCDSEC寄存器并且结果是从1到59,这没问题,但如果结果是0秒,则年月日时分秒可能变为1960年1月1日0时0秒,因为存在1秒偏差。所以这时,若BCDSEC是0,用户应该从BCDYEAR 向 BCDSEC重新读取数据。 void Read_Rtc(void) Uart_Printf(“you can read RTC Value); rRTCCON = 0 x01; / R/W enable, 1/32768,

21、Normal(merge), No reset while(1) if(rBCDYEAR = 0 x99) year = 0 x1999;else year = 0 x2000 + rBCDYEAR; month=rBCDMON; day=rBCDDAY; weekday=rBCDDATE; hour=rBCDHOUR; min=rBCDMIN; sec=rBCDSEC;if(sec!=0) break; rRTCCON = 0 x0; / R/W disable(for power consumption)rtc.h文件#define TESTYEAR (0 x02)#define TEST

22、MONTH (0 x12)#define TESTDAY(0 x31)#define TESTDATE (0 x03)#define TESTHOUR (0 x23)#define TESTMIN(0 x59)#define TESTSEC(0 x59)#include rtc.h“void Rtc_Init(void) rRTCCON = 0 x01;/ R/W enable, 1/32768, Normal(merge), No reset rBCDYEAR = TESTYEAR; rBCDMON = TESTMONTH; rBCDDAY = TESTDAY;/ SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7 rBCDDATE = TESTDATE; rBCDHOUR = TESTHOUR; rBCDMIN = TESTMIN; rBCDSEC = TESTSEC; rRTCCON = 0 x0;/ R/W d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论