PC机自带两个串口,分为COM1和COM2,地址分别在3F8-3FFH和2F8-2FFH,接口芯片选用8250。8250片内有10个寄存器,其中有几个是共用地址的,其识别由线路控制寄存器(LCR)的最高位DLAB来决定。各寄存器的地址和格式如下所示:.
表 4.9 8250寄存器地址
DLAB
A2
A1
A0
I/O口地址
对应寄存器
0
0
0
0
3F8H(2F8H)
发送端数据寄存器
0
0
0
0
3F8H(2F8H)
接受端数据寄存器
1
0
0
0
3F8H(2F8H)
波特率因子寄存器(低8位)
1
0
0
1
3F9H(2F9H)
波特率因子寄存器(高8位)
0
0
0
1
3F9H(2F9H)
中断允许寄存器(IER)
X
0
1
0
3FAH(2FAH)
中断识别寄存器(IIR)
X
0
1
1
3FBH(2FBH)
线路控制寄存器(LCR)
X
1
0
0
3FCH(2FCH)
MODEM控制寄存器(MCR)
X
1
0
1
3FDH(2FDH)
线路状态寄存器(LSR)
X
1
1
0
3FEH(2FEH)
MODEM状态寄存器
X
1
1
1
3FFH(2FFH)
保留
8250在正常通信之前,需要先设定波特率因子寄存器,它决定传输数据的速率。对使用1.8432MHZ的基准时钟输入时,波特率因子寄存器设置要求为:
波特率因子=1843200÷(16×波特率)
主要波特率因子取值和相应的波特率如表4.10:
表4.10 波特率因子取值表
波特率
波特率因子寄存器
MSB
LSB
300
01H
80H
600
00H
C0H
1200
00H
60H
2400
00H
30H
4800
00H
18H
9600
00H
0CH

设置好波特率因子寄存器后,要先恢复LCR的DLAB为0才能正常通信。

linux串口的初始化

static void init(int port)
{
 outb_p(0x80,port+3);            /* set DLAB of line control reg *///
 outb_p(0x30,port);                  /* LS of divisor (48 -> 2400 bps */
 outb_p(0x00,port+1);              /* MS of divisor */
 outb_p(0x03,port+3);             /* reset DLAB */
 outb_p(0x0b,port+4);              /* set DTR,RTS, OUT_2 */
 outb_p(0x0d,port+1);             /* enable all intrs but writes */
 (void)inb(port);                        /* read data port to reset things (?) */
}

void rs_init(void)
{
 set_intr_gate(0x24,rs1_interrupt);    //设置串行口1的中断门向量
 set_intr_gate(0x23,rs2_interrupt);    //设置串行口2的中断门向量
 init(tty_table[1].read_q.data);             // 初始化串行口 1
 init(tty_table[2].read_q.data);
 outb(inb_p(0x21)&0xE7,0x21);        //允许主 8259A 芯片的 IRQ3,IRQ4 中断信号请求
}

串行通讯控制器8250相关推荐

  1. 【微机接口】可编程串行异步通信芯片8250

    8250能实现数据串并变换,实现全双工异步通信. 支持异步通信协议,数据格式.通信速率由初始化编程设定. 内部有中断机制,CPU可用查询中断方式与之交换信息. 8250内部寄存器:  发送保持寄存器: ...

  2. SPI、I2C、UART三种串行总线的原理、区别及应用

    SPI协议解析,链接如下 https://blog.csdn.net/weiqifa0/article/details/82765892 I2C协议解析,链接如下 https://blog.csdn. ...

  3. 俩个PC机通过串行口互联,实现件的无差错传输。程序必须用中断方式来完成任务

      课程设计(论文)任务书 一.设计题目:1.题目名称      PC机通过串行口互联 2.题目来源               二.目的和意义 俩个PC机通过串行口互联,实现件的无差错传输.程序必须 ...

  4. setserial - 取得/设置 Linux 串行口的信息

    总览 setserial [ -abqvVWZ] 设备 [ 命令参数一 [ 设备变元参数 ] ] ... setserial -g [-abGv ] 设备一 ... 描述 setserial 是一个用 ...

  5. 微机接口串行口的测试

    要求 运用微机系统串行口知识,进行微机系统串行偶的测试:完成硬件测试环境,编写程序对微机系统的串口进行自发自收外环测试:数据发送从键盘输入,接收数据在屏幕显示. 硬件 实验前,首先要进行串口的连接以实 ...

  6. 南京邮电大学微型计算机原理与接口技术:微机系统串行口的测试

    一.实验目的和要求 了解微机系统串行口RS-232C的内部结构.工作原理: 掌握Ins 8250的初始化编程方法,学会串行通信程序的设计. 二.实验内容 实验内容1:完成硬件测试环境,编写程序对微机系 ...

  7. (九)单片机串行口 内部结构的讲解 01

    1. 基本概念 常用于数据通信的传输方式有单工.半双工.全双工和多工方式. 单工方式:数据仅按一个固定方向传送.因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据采集. 半双工方 ...

  8. Modus串行链路系统电气特性:2线-Modus、4线-Modus、RS232-Modus和RS485-Modus的特性

    目录 1.2线-Modus 2.4线-Modus 3.4线-Modus和2线-Modus的兼容性 4.RS232-Modus 5.RS485-Modus 一个Modus多点串行链路系统是由主电缆(主干 ...

  9. Modbus协议在串行链路上的实现

    目录 1.串行链路通信简介 2.串行链路通信协议原理 3.串行链路通信帧描述 4.RTU.ASCII串行传输模式 4.1.RTU传输模式 4.2.ASCII传输模式 1.串行链路通信简介 Modbus ...

  10. promise实现多个请求并行串行执行

    早上查资料,偶然发现这个话题,发现自己并不会,于是乎,下来研究了一下. 想想之前我们用jquery写请求的时候,要实现请求的串行执行,我们可能是这么做的. $.ajax({url: '',data: ...

最新文章

  1. python对数运算符号_科学网—Python中算数运算符之注意及np.logspace - 张伟的博文...
  2. man手册查找ascii码和运算符优先级
  3. 为窗体添加防机器人的验证机制
  4. php-Arrays函数-array_flip-交换数组的键值
  5. C语言 | C语言实现十六进制转八进制
  6. 6.1 图的深度优先和广度优先搜索
  7. java 无名类做参数_说说你知道的几种主要的JVM参数
  8. AttributeError: type object ‘Image‘ has no attribute ‘open‘
  9. cmake安装配置及入门指南
  10. 闪退没由报错_使命召唤:(cod16)出现的闪退问题以及解决办法
  11. Go接口(Interface)的使用方法
  12. 相同风格,牛仔裤和青花瓷风行世界
  13. 卷积神经网络CNN原理以及TensorFlow实现
  14. poj1273:Drainage Ditches
  15. 工业铝型材是怎样去生产的
  16. windows下安装redis并设置自启动
  17. python加载模型包_R中的错误:需要h5py Python包来保存和加载模型
  18. 小游戏上传分数是怎么实现的_如何利用微信小游戏做公众号吸粉营销活动
  19. 工程师和他媳妇儿好玩的对话1——20160704
  20. CentOS 7 操作防火墙

热门文章

  1. C# 文件大小字节byte换算为 Kb Mb Gb Tb
  2. while循环的用法
  3. 人工智能和溯因推理 AI的历史一直被演绎和归纳所主导
  4. LRc2022 M1原生支持功能介绍,Lightroom Classic 2022 Mac M1专用 ,解决lr闪退打不开卡死等一系列问题
  5. 高中计算机数学,高中数学必修5
  6. 汉罗塔(河内塔)问题的数学模型
  7. css 鼠标变成小手
  8. win7任务栏谷歌浏览器图标显示异常
  9. 推荐几款不错的企业网站,前端设计师寻求设计灵感!
  10. 5-IP地址、端口、DNS服务器