- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式操作系统-设计与实现:串口交互程序及其实现.doc
串口交互程序及其实现
串行通信接口概述 2
串行通信编程方式 5
串口初始化 5
数据发送 6
数据接收 9
串口交互程序的实现 11
串口交互程序的使用 11
轮询模式的串口交互程序实现 15
中断模式的串口交互程序实现 24
串行通信编程总结 33
轮询方式和中断方式编程的对比 33
串口交互程序的其它实现方式 34
串行通信接口概述
PC 微机的串行通信使用的异步串行通信芯片是INS 8250 或NS16450 兼容芯片,统称为UART(通用异步接收发送器)。对UART 的编程实际上是对其内部寄存器执行读写操作。因此可将UART 看作是一组寄存器集合,包含发送、接收和控制三部分。UART 内部有10 个寄存器,供CPU 通过IN/OUT 指令对其进行访问。
这些寄存器的端口和用途见下表所示。其中端口0x3f8-0x3fe 用于微机上COM1 串行口,0x2f8-0x2fe 对应COM2 端口。条件DLAB(Divisor Latch Access Bit)是除数锁存访问位,是指线路控制寄存器的位7。
下表给出了PC机上串行通信接口的访问端口地址,以及对应的寄存器bit位的含义:
访问端口(COM1/COM2) 访问方式 DLAB位状态 各寄存器bit用途 0x3F8/0x2F8 R 0 写发送保持寄存器。含有将发送的字符。 W 0 读接收缓存寄存器。含有收到的字符。 R/W 1 读/写波特率因子低字节(LSB)。 0x3F9/0x2F9 R/W 1 读/写波特率因子高字节(MSB)。 R/W 0 读/写中断允许寄存器。
位7-4 全0 保留不用;
位3=1 modem 状态中断允许;
位2=1 接收器线路状态中断允许;
位1=1 发送保持寄存器空中断允许;
位0=1 已接收到数据中断允许。 0x3FA/0x2FA R X 读中断标识寄存器。中断处理程序用以判断此次中断是4 种中的那一种。
位7-3 全0(不用);
位2-1 确定中断的优先级;
= 11 接收状态有错中断,优先级最高;
= 10 已接收到数据中断,优先级第2;
= 01 发送保持寄存器空中断,优先级第3;
= 00 modem 状态改变中断,优先级第4。
位0=0 有待处理中断;=1 无中断。 0x3FB/0x2FB W X 写线路控制寄存器。
位7=1 除数锁存访问位(DLAB)。
0 接收器,发送保持或中断允许寄存器访问;
位6=1 允许间断;
位5=1 保持奇偶位;
位4=1 偶校验;=0 奇校验;
位3=1 允许奇偶校验;=0 无奇偶校验;
位2=1 1 位停止位;=0 无停止位;
位1-0 数据位长度:
= 00 5 位数据位;
= 01 6 位数据位;
= 10 7 位数据位;
= 11 8 位数据位。 0x3FC/0x2FC W X 写modem 控制寄存器。
位7-5 全0 保留;
位4=1 芯片处于循环反馈诊断操作模式;
位3=1 辅助用户指定输出2,允许INTRPT 到系统;
位2=1 辅助用户指定输出1,PC 机未用;
位1=1 使请求发送RTS 有效;
位0=1 使数据终端就绪DTR 有效。 0x3FD/0x2FD R X 读线路状态寄存器。
位7=0 保留;
位6=1 发送移位寄存器为空;
位5=1 发送保持寄存器为空,可以取字符发送;
位4=1 接收到满足间断条件的位序列;
位3=1 帧格式错误;
位2=1 奇偶校验错误;
位1=1 超越覆盖错误;
位0=1 接收器数据准备好,系统可读取。 0x3FE/0x2FE R X 读modem 状态寄存器。δ 表示信号发生变化。
位7=1 载波检测(CD)有效;
位6=1 响铃指示(RI)有效;
位5=1 数据设备就绪(DSR)有效;
位4=1 清除发送(CTS)有效;
位3=1 检测到δ 载波;
位2=1 检测到响铃信号边沿;
位1=1 δ 数据设备就绪(DSR);
位0=1 δ 清除发送(CTS)。
现对上述表格中比较重要的几个寄存器比特进行简要介绍:
DLAB:除数锁存访问位,设置为1的时候,用于设置波特率因子。设置为0的时候,用于设置或读取其它寄存器的值。也可以理解为一个标志位,用于对前两个寄存器(0x3F8/0x2F8、0x3F9/0x2F9)的用途进行区别。若为1,则这两个寄存器为波特率因子,否则这两个寄存器被用于发送/接收保持(缓存)寄存器和中断控制寄存器;
中断允许寄存器:用端口地址0x3F9/0x2F9进行访问,用于设置或读取COM端口的中断控制比特。该寄存器的0-3比特用于控制特定的中断源的状态,4-7比特保留(为0)。其中,0-3比特中,一个比特对应一个特定的中断源,若设置该比特为1,则对应的中断源会打开,这样一旦有对应的事件发生
文档评论(0)