网站大量收购独家精品文档,联系QQ:2885784924

2014-嵌入式系统基础-实验8-uart.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2014-嵌入式系统基础-实验8-uart

实验8 S3C2440 UART部件编程 班级 B12512 姓名 学号 日期 2014.12.14 成绩评定 1.实验目的 (1)掌握S3C2440串口的非缓冲、缓冲工作模式,采用查询、中断方式进行编程操作的编程及相关寄存器的设置; (2)根据示例程序进行调试串口的收发数据、阅读程序理解代码; (3)编写UART0采用中断与查询方式的数据收发程序。 2.实验环境 普通PC机,Windows系统下安装ADS1.2集成开发环境,ARM实验设备,串口线,USB线,网线。 3.实验原理 S3C2440的UART部件作为IO接口,提供了3个独立的串口(UART0、UART1、UART2),编程可以采用查询方式、中断方式、DMA方式进行操作每个串口;每个串口可以通过寄存器编程设置数据传输率,最大支持115200bps;每个串口可通过编程选择时钟PCLK、FCLK/n(FCLK分频)或UEXTCLK(外部时钟通过UEXTCLK 引脚接入);每个串口可编程设置串行数据传输格式(数据位、停止位、校验位);每个串口可进行数据收发,包含收发FIFO缓冲区均为64字节,可编程设置采用缓冲模式(FIFO模式)或非缓冲模式(非FIFO模式);UART0、UART1提供了握手信号引脚,支持自动流模式(硬件自动控制握手信号)或编程控制握手信号;UART2不支持握手信号。 采用中断方式UARTn对应产生内部中断INT_UARTn,该内部中断包含3个子中断:INT_RXDn、 INT_TXDn 、 INT_ERRn ; (1)接收中断INT_RXDn产生条件 非缓冲模式:接收缓冲区收到1个字节数据;缓冲模式:接收缓冲区中收到数据字节数达到触发水平(比如接收达到32字节则触发中断,可以通过编程设置);或是未达到触发水平,3个数据帧时间未收到数据(即发生接收超时); (2)发送中断INT_TXDn产生条件 非缓冲模式:发送缓冲区为空;缓冲模式:发送缓冲区中数据字节数达到触发水平; (3)错误中断INT_ERRn产生条件 非缓冲模式:数据传输过程中出现任何错误;缓冲模式对应以下情况: a、数据帧错误:接收数据没有有效的停止位; b、数据校验错误:接收数据奇偶校验出错; c、接收到终止信号:即RXDn引脚出现超过1个数据帧传输时间的低电平信号; d、数据覆盖错误:旧数据尚未从缓冲读出,接收到的新数据覆盖了旧数据; 缓冲模式中接收数据若检测为错误,会将错误信息记录在错误状态FIFO缓冲区中,当程序将数据从缓冲区读出时才会触发INT_ERRn中断; S3C2440 UART的3个串口可独立工作,寄存器可分别设置,每个串口的寄存器基本相同。包括: ULCONn、UCONn、UFCONn、UMCONn、UTRSTATn、UERSTATn、UFSTATn、UMSTATn、UTXHn、URXHn、UBRDIVn(n=0/1/2对应每个串口,UART2没有握手信号引脚,故不存在UMCON2、UMSTAT2寄存器) 4.实验步骤与内容 编写程序实现UART0发送与接收数据,发送采用查询方式,接收采用中断方式,非缓冲,波特率设置为115200。实现程序的C语言部分写在main.c文件中,如下: main.c文件 //其它情况 else { rSUBSRCPND |= (0x07); } //最后清除中断位 rSRCPND |= (128); rINTPND |= (128); } volatile char *psend; //发送位置指针 volatile unsigned char senddone; //是否发送完毕标志 //发送字符串,字符串以\0结束 void uart0_send_string(char *buf) { psend = buf; senddone = 0; rSUBSRCPND |= (11); //允许发送中断 rINTSUBMSK = ~(11); while(!senddone); } volatile char *pget; //接收位置指针 char c; //每次读取的字符 volatile unsigned char getdone; //接收完成标志 //接收字符串,接收内容以\r结束 void uart0_get_string(char *buf) { c = \0; pget = buf; getdone = 0; rSUBSRCPND |= (10); //允许接收中断 rINTSUBMSK = ~(10); while(!getdone); } void __irq uart0

文档评论(0)

youshen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档