正文内容
I/O操作范文
来源:莲生三十二
作者:开心麻花
2025-09-18
1

I/O操作范文(精选9篇)

I/O操作 第1篇

1 虚拟地址映射

对外设进行I/O操作即读写外设的寄存器,WinCE系统启动后,无法直接访问其物理地址,因此,我们要理解WindowsCE下的虚拟地址映射。

在WindowsCE中有两种类型的地址:物理地址和映射的虚拟地址[1]。

物理地址是需要被操作系统访问的实际的RAM或设备存储器,它由来自于CPU的物理地址定义,一旦MMU启动,CPU就不能直接访问。内核只能管理512MB的物理内存。

不同架构的CPU硬件上的区别导致虚拟地址映射也不同。SHx和MIPS处理器,不采用MMU,在CPU和内核里定义1G的物理地址,能对其直接进行操作;而ARM和X 86带有MMU单元,在OEMAddressTable中定义物理地址到虚拟地址间的映射关系或者是操作系统启动后调用函数CreateStaticMapping和NKCreateStaticMapping来实现从虚拟地址到物理地址的静态映射。经过静态映射的地址,可以由操作系统内核用于ISR(InterruptServiceRoutine)访问设备。如果我们要在应用程序中访问外设,必须在物理地址和虚拟地址间建立动态映射关系,我们可以使用VirtualAlloc和VirtualCopy(或者直接调用MmmapIoSpace函数)来实现。

静态映射允许OAL,尤其是中断服务历程ISR访问连接到系统的设备。物理的内存块在被映射到虚拟地址空间时,通常被映射两次,分别映射到两个不同的区域,位于512MB使用缓冲(Cached)的区域和512MB不使用缓冲(Uncached)的区域,如图1所示。OEMAddressTable负责创建第一个基于Cached的映射,而操作系统负责自动创建第二个基于Uncached的映射。

如果是操作通过总线挂接的I/O或者存储器,必须先把总线地址转化成CPU上的系统地址,再做物理地址到虚拟地址的映射。这里需要查CPU的Datasheet,找出所要操作的I/O地址。先调用HAL-TranslateBusAddress()把总线地址转化成CPU上的系统地址,再调用MmmapIoSpace函数实现虚实映射;也可以使用TransBusAddrToVirtual()直接把总线上的地址转化成系统的虚拟地址。

在一般的应用程序中访问I/O是访问它的缓存段虚拟地址,而驱动中必须访问无缓存段虚拟地址。缓存段虚拟地址与无缓存段虚拟地址之间的偏移量为0x20000000,即无缓存段虚拟地址=缓存段虚拟地址+0x20000000。

2 关键函数

在动态虚拟地址的映射过程中,需要用到以下3个函数:VirtualAlloc、VirtualCopy、VirtualFree。

VirtualAlloc用于在当前进程的虚拟地址空间中保留或者提交空间,在保留时以64kB为单位,提交时以4kB为单位。其函数原型为

这里需要注意的是fdwProtect参数。如果是驱动程序访问,需要设置为PAGE NOCACHE,以访问无缓存段虚拟地址。如果映射的物理地址范围在0x1FFFFFFF之上,必须使用PAGE PHYSICAL,此时必须把lpvSrc右移八位,实现地址对齐。(这是由内核中VirtualCopy的实现决定的,在那个函数中会判断如果是PAGE PHYSICAL就将PHYSADDR左移8位移回来,源代码位于private/winceos/coreos/nk/kernel目录下的virtmem.c中的DoVirtual-Copy)

3 实例操作

以S3C 2440为例,GPIO的基地址为0x56000000,映射到虚拟地址空间为0xB 1600000,通过对这段虚拟地址空间的操作,就能够完成对GPIO或者其他片内资源的控制、输入输出工作。

(1)首先在BSP中的s2440.h文件,找到虚拟地址映射以及操作GPIO的寄存器结构体(这个在自己制作一些特殊设备的BSP时,会依据需要而发生更改)。

(2)在EVC中建立一个应用程序工程,由于VirtualCopy函数没有在头文件中定义,但是在coredll.lib里面提供了符号连接,所以我们在工程头文件中直接添加一个函数定义就可以了。

v pIOPRegs->rGPFCON=0x5555;

这3个步骤之后,对v pIOPRegs的操作将直接和GPIO的寄存器关联。例如:设置GPF的控制寄存器为全部Output

v pIOPRegs->rGPFDAT=0xFF;

4 结束语

WindowsCE作为实时嵌入式窗口操作系统,是当今应用最多、增长最快的嵌入式操作系统。研究其I/O操作方法,对进一步深入开发具有一定的指导意义。

摘要:介绍Windows CE系统的虚拟地址映射机制,以I/O操作为基础,通用性较强。对关键函数进行了说明,并以S3C2440为例详细介绍了GPIO的操作步骤。

关键词:Windows CE,地址映射,I/O操作

参考文献

[1]张冬泉,谭南林,王雪梅,等.Windows CE实用开发技术.北京:电子工业出版社,2006

Python 文件I/O 第2篇

Python提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用file对象做大部分的文件操作。

open函数

你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写。

语法:

file bject = open(file_name [, access_mode][, buffering])

各个参数的细节如下:

file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。

access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。

buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

不同模式打开文件的完全列表:

I/O操作 第3篇

EAST(Experimental Advanced Super-conducting Tokamak)超导托卡马克聚变实验装置是国家“九五”重大科学工程。极向场电源控制系统是托卡马克主要子系统之一,它为等离子体的产生、约束、维持、加热,以及等离子体的电流、位置、形状、分布和破裂的控制,提供必要的工程基础和控制手段。整个电源控制系统由三层网络组成:Windows监测层、QNX实时控制层、现场总线执行层。QNX实时控制层选用QNX6.20实时操作系统,是整个控制系统的灵魂所在,决定了整个系统的实时性和同步性,由电源主控制节点、电源子控制节点、数据库节点等节点组成[1]。EAST装置对电源实时控制系统中的所有实时程序都提出了很高的实时性和可靠性要求,因此要从不同方面和层次研究分析各种影响系统运行实时性和可靠性的故障及操作,并提出相应的解决措施,保证其严格的实时性和高可靠性。

目前在极向场电源控制系统中主要采用如下几种提高其实时性和可靠性的措施:

(1)采用优先级抢占式调度策略,并对可能存在的优先级倒置现象采用优先级继承方法来解决,保证优先级高的进程能优先得到调度执行,同时也保证每一进程在规定时间内都得到调度执行;

(2)采用多种系统实时性能优化方法,包括代码优化和通信优化;

(3)对系统进行可靠性设计和分析,提高系统运行时的可靠性;

(4)系统在运行时,同时进行时间性能分析测试,找出可能存在的时间错误(部分任务的完成时间违反了其规定的时间限制),然后采取相应的时间错误解决措施,进一步提高实时性和可靠性。

本文从另一角度分析测试了一种能直接影响系统运行实时性的操作,即硬盘I/O操作。当前的计算机大多采用共享总线的系统结构,CPU和内存是直接连接到总线上,其它I/O设备通过设备控制器也连接到总线上。这种通过总线互连的方式,任何一台I/O设备对其它I/O设备的访问实际上都是对总线的访问[2]。如果这种访问较频繁可能会使I/O总线出现拥塞现象,影响访问实时完成。

实时控制系统在运行时,有时需要实时保存一些现场采集数据和控制命令,用于技术人员事后分析。然而硬盘I/O操作是个高代价的操作,有可能使I/O总线出现拥塞现象,影响控制系统的实时运行,甚至会导致系统运行出现异常。本文着重对硬盘I/O操作的响应性能进行理论分析,并通过对实际测试数据的计算检验,给出硬盘I/O操作对实时控制系统的运行实时性的具体影响,并提出相应的解决措施。

2 排队模型的建立

图1所示为当前大多计算机采用的总线型I/O系统结构[3]。在图中,假设有一进程产生硬盘I/O操作请求,该I/O请求必须经过I/O总线才能到达硬盘控制器。由于I/O总线为公用通道,所有请求都需要竞争总线的使用权,使得在使用之前,需进行排队等待,因此可看成一个排队系统。另外,当硬盘I/O操作请求到达硬盘控制器后,将接受硬盘的存储服务。到达的请求同样也必须竞争硬盘的使用权,在使用前要进行排队等待,也可以看成是一个排队系统。因此可以将硬盘I/O操作过程抽象为图2所示的模型。

假定I/O请求到达间隔时间服从负指数分布且到达间隔时间相互独立,总线服务和存储服务的服务时间服从负指数分布,服务时间也是相互独立,I/O请求的到达率设为λ,那么由文献[4]得出如下结论:

结论1:在M/M/1排队模型中,ηn与Nn相互独立,ηn与ηn+1相互独立。

其中:ηi第i-1个顾客与第i个顾客离去时刻的间隔时间;Ni第i个顾客离开系统时留下的队长(即顾客数)。

由结论1可知,M/M/1队列的离去时间间隔是相互独立的,且为相同分布的负指数。而总线服务队列的离去恰好是存储服务队列的请求输入,因而整个系统的服务可看成两个串联的M/M/1排队系统[5]。

同时根据排队理论,在串联的排队系统中,若到达过程为泊松过程,每个服务台的服务时间是相互独立的负指数分布的随机变量,则每个服务台可分开考虑,串联排队系统可简化为单独的排队系统。因此为了简化系统分析的复杂性,将该串联排队系统简化为一个单独的排队系统,如图3所示。

以上所分析的排队模型考虑的是只有一个进程申请硬盘I/O操作,若有多个进程同时申请I/O操作时,其排队模型可简化为图4。由于所有进程的I/O操作请求都为相互独立的泊松过程,根据随机过程的结论,这些请求的合成仍然是一个泊松过程,且到达率为:undefined。

3 M/M/1排队系统

参考文献[6,7]推导M/M/1排队系统在平衡条件下的一些参数的计算公式。设M/M/1模型只有一个服务员,单位时间到达的任务数为λ(任务的到达率),在服务台忙的情况下,单位时间平均服务完的任务数为μ(服务率),则有:

系统服务强度:

ρ=λ/μ, ρ<1 (1)

系统中没有任务的概率:

p0=1-ρ (2)

系统中有n个任务的概率:

pn=(1-ρ)ρn (n=0,1,2,...,∞) (3)

利用上面已有结论推导系统中平均任务数L、队列中平均任务数Lq、系统平均响应时间Tq以及任务在队列中的平均等待时间Wq等参数的计算公式。

由式(3)可得系统在平衡条件下的平均任务数为:

undefined

队列中平均任务数Lq可由下式确定,

undefined

由此Lq的分布p′n为:

undefined

因此队列中平均任务数为:

undefined

设W表示为在统计平衡下,任一时刻到达的任务接受服务前在系统的等待时间,其分布函数为(公式推导详见文献[6]):

W(0)=P(w=0)=1-ρ (8)

W(t)=P(w≤t)=P(w=0)+P(0

=1-ρe-μ(1-ρ)t (t>0) (9)

因此其密度函数为:

undefined

由密度函数可求得平均等待时间:

undefined

接下来求任务在系统中的平均响应时间。

设等待时间为w,服务时间为v,则响应时间T为:

T=w+v (12)

平均响应时间为:

undefined

4 硬盘I/O操作性能分析

电源控制系统在运行时,要以字符串的形式实时保存每个控制信号的变化状态和变化时间到硬盘上的记录文件中,字符串的长度大概为50个字符。下面利用以上分析得出的排队系统的一些参数公式分析系统在进行单个进程和多个进程硬盘I/O操作请求时的响应性能。

4.1 单个进程硬盘I/O操作性能分析

做如下测试:在一台内存为512 M、CPU为P4-1.0G工控机上,建立一进程,连续保存200组长度为60的字符串,记录下开始保存时间Ts和结束保存时间Te,以及保存每组字符所花的时间Ti(i=0,1,2,,199)。

连续测试多次,取其平均值得如下数据:

Tobserve=Te-Ts=12.73 ms

undefined

Ntasks=200

由以上数据可得:

硬盘保存I/O请求的到达率:

undefined(个/ms)

系统的平均响应时间:

undefined

由式(1)和式(13)可得服务率:

undefined(个/ms)

由式(1)得系统服务强度:

undefined

由式(4)得系统中平均任务数:

undefined(个)

由式(7)得队列中平均任务数:

undefined(个)

由式(11)得任务在队列中的平均等待时间:

undefined

因此系统的平均服务时间为:

Vq=Tq-Wq=0.063-0.031=0.032 (ms)

可见单进程进行磁盘I/O操作请求时,有50%的响应时间花费在队列中等待。系统的服务强度较低,仅为0.498,说明系统比较空闲。另外系统的平均响应时间0.063 ms,对于控制周期为1 ms的系统而言,对其实时性构不成多大的影响。但若磁盘I/O请求较频繁,或响应时间再严重时(测试时,发现最大值达到1.82 ms),对系统的实时性肯定会产生一定的影响。进行磁盘I/O操作请求可能影响系统的实时性这个问题,其实在一次EAST实验中,就曾发现过,因此必须解决该问题。

4.2 多个进程硬盘I/O操作性能分析

做如下测试:在一台内存为512 M,CPU为P4-1.0G工控机上,建立三个进程,同时连续保存200组长度为60的字符串,记录下开始保存时间Ts和结束保存时间Te,以及保存每组字符所花的时间Ti(i=0,1,2,,199)。

连续测试几次,取其平均值得如下数据:

进程1:

Tobserve1=Te-Ts=15.82 ms

undefined

Ntasks=200

进程2:

Tobserve2=Te-Ts=15.62 ms

undefined

Ntasks=200

进程3:

Tobserve3=Te-Ts=15.85 ms

undefined

Ntasks=200

由以上数据可得硬盘I/O请求的到达率分别为:

undefined(个/ms)

undefined(个/ms)

undefined(个/ms)

因此总硬盘I/O请求到达率为:

λa=λ1+λ2+λ3=38 (个/ms)

系统的平均响应时间:

undefined

由式(1)和式(13)可得服务率:

undefined(个/ms)

由式(1)得系统服务强度:

undefined

由式(4)得系统中平均任务数量:

undefined(个)

由式(7)得队列中平均任务数:

undefined(个)

由式(11)得任务在队列中的平均等待时间:

undefined

因此系统的平均服务时间为:

Vq=Tq-Wq=0.078-0.058=0.02 (ms)

可见三个进程同时进行磁盘I/O操作请求时,有75%的响应时间花费在队列中等待。系统的服务强度较高,达到0.749,系统比较忙碌。

4.3 单个进程和多个进程请求硬盘I/O操作响应结果比较分析

表1给出了单个进程和多个进程请求硬盘I/O操作时的响应结果。

(1)在一定范围内,当有多个进程同时请求I/O操作时,相比单进程请求I/O操作,系统服务强度增强;

(2)当有多个进程同时请求I/O操作时,系统平均响应时间相比单进程进行I/O操作有所增加,主要是由于在队列中的平均排队时间在加长。单进程平均有50%的响应时间消耗在队列中等待,而三个进程却有75%的响应时间消耗在队列中;

(3)如果任务到达率小于系统服务率(ρ<1),所有到达任务都能得到执行,反之,若任务到达率大于系统服务率(ρ>1),则有一部分任务会被阻塞,得不到执行。

5 解决措施

由以上分析得知,进程进行磁盘I/O操作请求时,系统中会有一定比例的响应时间是消耗在队列中等待,占用CPU资源,这会对系统的实时性产生一定的影响,对于实时性要求较高的极向场电源控制系统而言,必须要消除这种不利影响。

电源控制系统之所以在实验过程中记录每个控制信号的变化状态和变化时刻,是为了事后分析控制信号变化的逻辑性和变化时刻是否正确。因此考虑在程序运行的关键时刻,即对实时性要求很高的某些时刻,将每个控制信号的变化状态和变化时刻先保存在字符数组中(即保存在内存中),然后在对实时性要求不是很高的时刻,将这些字符数组保存到硬盘上的记录文件中,从而降低硬盘I/O操作所带来的对控制过程的影响。对此在电源控制系统的每个控制节点程序中特别建立另一个进程log_sig,专门用来实现上述过程的数据记录,防止在程序运行的关键时刻执行硬盘I/O操作。

6 结 论

本文主要是对计算机硬盘I/O操作过程进行定性和定量分析。首先将硬盘I/O操作抽象为一个排队模型,利用排队系统已成熟的相关理论对I/O操作响应性能进行理论分析,推导出一系列计算公式。然后利用实际环境测试单个进程和多个进程进行硬盘I/O操作的数据,通过对这些数据的分析,给出硬盘I/O操作对计算机系统的具体干扰力。文中所提出的利用排队理论分析硬盘I/O操作性能的方法,具有一定的实际工程意义。

参考文献

[1]陈飞云.EAST极向场电源实时控制系统——系统分析程序的实现与应用[D].合肥:中国科学院合肥物质科学研究院等离子体物理研究所,2007.

[2]李之棠,赵振龙,黄辉龙.并行PC系统结构及I/O性能评价[J].计算机工程与科学,2002,24(4):71-77.

[3]汤子瀛,哲凤屏,汤小丹.计算机操作系统[M].西安:西安电子科技大学出版社,1999.

[4]罗荣桂.排队模型及其应用[M].武汉:华中理工大学出版社,1990.

[5]郭辉,周敬利,余胜生.附网存储体系中的I/O性能分析[J].小型微型计算机系统,2003,24(2):280-284.

[6]孟玉珂.排队论基础及应用[M].上海:同济大学出版社,1989.

8086的I/O写周期 第4篇

8086在执行输出指令时进入I/0写周期,在I/O写周期中将指定寄存器的内容输出到指定的I/O端口,图2.1l是I/O写周期的时序图。I/O写周期和存储器写周期基本相同,

区别在于两点,一是M/在I/O写周期内为低电平,表示当前进行的是I/0操作;二是I/0端口的地址只有16位,因此图2.11中T1、T2期间没有出现A19~A16。

串行通信与重叠I/O 第5篇

串行通信在通信领域被广泛应用,标准的RS232接口已成为计算机、计算机外设、交换机和许多通信设备的标准接口。微机与微机、微机与外设、微机与程控交换机等都可以通过RS232接口进行方便的连接,以实现控制外设和传输数据等目的。

在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。笔者在实际工作中积累了一些经验,现结合硬件、软件,及需要注意的要点作一番探讨。希望对各位需要编写串口通信程序的朋友有一些帮助。

2 RS232串口标准

EIA-RS-232是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串行接口标准。该标准规定:直接连接的最大物理距离为15m,通信速率低于20kbps。

由于RS232并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。表1介绍了其中两种连接器(DB-25, DB-9)。

RS232标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线,但常用的只有9根。

目前较为常用9针串口和25针串口,当通信距离较近时,可以用电缆线直接连接,若距离较远,须附加Modem。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连。表2列举了RS232串口通信接线方法。

EIA-RS-232对电气特性、逻辑电平和各种信号线功能都作了规定。

在TxD和RxD上:

(1) 逻辑1 (MARK) =-3V~-15V。

(2) 逻辑0 (SPACE) =+3V~+15V。

在RTS、CTS、DSR、DTR和DCD等控制线上:

(1) 信号有效: (接通, ON状态, 正电压) =+3V~+15V。

(2) 信号无效: (断开, OFF状态, 负电压) =-3V~-15V。

3 Win32串口应用程序

3.1 打开串口

Win32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。该函数的声明为:

如果调用成功,那么该函数返回文件的句柄,如果调用失败,则函数返回INVALID_HANDLE_VALUE。

3.2 串口配置和串口属性

在打开通信设备句柄后,常常需要对串口进行一些初始化工作。这需要通过一个DCB结构来进行。DCB结构包含了诸如波特率、每个字符的数据位数、奇偶校验和停止位数等信息。在查询或配置串口的属性时,都要用DCB结构来作为缓冲区。

调用GetCommState函数可以获得串口的配置,该函数把当前配置填充到一个DCB结构中。一般在用CreateFile打开串口后,可以调用GetCommState函数来获取串口的初始配置。要修改串口的配置,应该先修改DCB结构,然后再调用SetCommState函数用指定的DCB结构来设置串口。

除了在DCB中的设置外,程序一般还需要设置I/O缓冲区的大小和超时。Windows用I/O缓冲区来暂存串口输入和输出的数据,如果通信的速率较高,则应该设置较大的缓冲区。调用SetupComm函数可以设置串口的输入和输出缓冲区的大小。

3.3 串口读写

在用ReadFile和WriteFile读写串口时,既可以同步执行,也可以重叠(异步)执行。在同步执行时,函数直到操作完成后才返回。这意味着在同步执行时线程会被阻塞,从而导致效率下降。在重叠执行时,即使操作还未完成,调用的函数也会立即返回。费时的I/O操作在后台进行,这样线程就可以干别的事情。例如,线程可以在不同的句柄上同时执行I/O操作,甚至可以在同一句柄上同时进行读写操作。“重叠”一词的含义就在于此。

ReadFile函数只要在串口输入缓冲区中读入指定数量的字符,就算完成操作。而WriteFile函数不但要把指定数量的字符拷入到输出缓冲中,而且要等这些字符从串口送出去后才算完成操作。

ReadFile和WriteFile函数是否为执行重叠操作是由CreateFile函数决定的。如果在调用CreateFile创建句柄时指定了FILE_FLAG_OVERLAPPED标志,那么调用ReadFile和WriteFile对该句柄进行的读写操作就是重叠的,如果未指定重叠标志,则读写操作是同步的。

函数ReadFile和WriteFile的参数和返回值很相似。这里仅列出ReadFile函数的声明:

需要注意的是如果该函数因为超时而返回,那么返回值是TRUE。参数lpOverlapped在重叠操作时应该指向一个OVERLAPPED结构,如果该参数为NULL,那么函数将进行同步操作,而不管句柄是否是由FILE_FLAG_OVERLAPPED标志建立的。

当ReadFile和WriteFile返回FALSE时,不一定就是操作失败,线程应该调用GetLastError函数分析返回的结果。例如,在重叠操作时如果操作还未完成函数就返回,那么函数就返回FALSE,而且GetLastError函数返回ERROR_IO_PENDING。

在使用重叠I/O时,线程需要创建OVERLAPPED结构以供读写函数使用。OVERLAPPED结构最重要的成员是hEvent, hEvent是一个事件对象句柄,线程应该用CreateEvent函数为hEvent成员创建一个手工重置事件,hEvent成员将作为线程的同步对象使用。如果读写函数未完成操作就返回,就那么把hEvent成员设置成无信号的。操作完成后(包括超时),hEvent会变成有信号的。

如果GetLastError函数返回ERROR_IO_PENDING,则说明重叠操作还未完成,线程可以等待操作完成。有两种等待办法:一种办法是用象WaitForSingleObject这样的等待函数来等待OVERLAPPED结构的hEvent成员,可以规定等待的时间,在等待函数返回后,调用GetOverlappedResult。另一种办法是调用GetOverlappedResult函数等待,如果指定该函数的bWait参数为TRUE,那么该函数将等待OVERLAPPED结构的hEvent事件。GetOverlappedResult可以返回一个OVERLAPPED结构来报告包括实际传输字节在内的重叠操作结果。

如果规定了读/写操作的超时,那么当超过规定时间后,hEvent成员会变成有信号的。因此,在超时发生后,WaitForS-ingleObject和GetOverlappedResult都会结束等待。WaitForSingleObject的dwMilliseconds参数会规定一个等待超时,该函数实际等待的时间是两个超时的最小值。注意GetOverlappedResult不能设置等待的时限,因此如果hEvent成员无信号,则该函数将一直等待下去。

在调用ReadFile和WriteFile之前,线程应该调用ClearCommError函数清除错误标志。该函数负责报告指定的错误和设备的当前状态。

调用PurgeComm函数可以终止正在进行的读写操作,该函数还会清除输入或输出缓冲区中的内容。

3.4 超时设置

在用ReadFile和WriteFile读写串口时,需要考虑超时问题。如果在指定的时间内没有读出或写入指定数量的字符,那么ReadFile或WriteFile的操作就会结束。要查询当前的超时设置应调用GetCommTimeouts函数,该函数会填充一个COMMTIMEOUTS结构。调用SetCommTimeouts可以用某一个COMMTIMEOUTS结构的内容来设置超时。

有两种超时:间隔超时和总超时。间隔超时是指在接收时两个字符之间的最大时延,总超时是指读写操作总共花费的最大时间。写操作只支持总超时,而读操作两种超时均支持。用COMMTIMEOUTS结构可以规定读/写操作的超时,该结构的定义为:

COMMTIMEOUTS结构的成员都以毫秒为单位。总超时的计算公式是:总超时=时间系数要求读/写的字符数+时间常量

例如, 如果要读入10个字符, 那么读操作的总超时的计算公式为:读总超时=ReadTotalTimeoutMultiplier10+ReadTotalTimeoutConstant

可以看出,间隔超时和总超时的设置是不相关的,这可以方便通信程序灵活地设置各种超时。

如果所有写超时参数均为0,那么就不使用写超时。如果ReadIntervalTimeout为0,那么就不使用读间隔超时,如果ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都为0, 则不使用读总超时。如果读间隔超时被设置成MAXDWORD并且两个读总超时为0,那么在读一次输入缓冲区中的内容后读操作就立即完成,而不管是否读入了要求的字符。

在用重叠方式读写串口时,虽然ReadFile和WriteFile在完成操作以前就可能返回,但超时仍然是起作用的。在这种情况下,超时规定的是操作的完成时间,而不是ReadFile和WriteFile的返回时间。

4 结语

以上给出了用Win32 API设计串行通信的基本思路,这个重叠(异步)I/O操作的串行通信程序,应用于大型任务,表现出良好的性能。在实际应用中,稍加改造,即可设计出满足需要的各种串行通信程序。

摘要:串行通信方便易行, 应用广泛。结合硬件详细介绍在Windows环境下使用Windows API实现异步串行通信的方法。

关键词:串行通信,RS232,重叠,I/O,Win API

参考文献

[1]李现勇.Visual C++串口通信技术与工程实践.人民邮电出版社, 2004.

I/O操作 第6篇

随着微电子工业和半导体加工技术的不断发展,集成电路的规模不断增大。这使得将复杂系统集成在单个芯片上成为可能,于是便出现了片上系统SOC(System on a Chip)。SOC极大地缩小了系统体积;SOC减少了板级系统SOB(System on Board)中芯片与芯片之间的互连延时,从而提高了系统的性能;SOC采用基于IP(Intellectual Property)核的设计(Core-based Design),它允许在芯片设计过程中复用(Reuse)已经经过验证的高性能的IP核,从而提高了设计效率[1]。FPGA的飞速发展为SOC的发展开辟了新的方向SOPC(System On a Programmable Chip)。对于比较复杂的系统,仅仅使用基于硬件的FPGA对其进行协调控制还是比较困难的,因此通常把一个微处理器内核嵌入到FPGA芯片中,采用软硬件协同设计的技术,不仅使得对设备的控制更加灵活,调试也更加方便,并缩短了开发周期。

MicroBlaze是由Xilinx公司推出的一款32位RISC微处理器IP核,具有很高的可配置度,可以将外部存储器,液晶显示屏、键盘接口等外部设备连接在一起并协调它们的工作,适合设计针对网络、电信、数据通信等应用背景的复杂嵌入式系统。

本文以嵌入式I/O系统为例,介绍了基于MicroBlaze进行嵌入式系统设计开发的方法,给出了一种输入/输出系统的设计实现方案,分析了其开发流程,并讨论了设计开发过程中相应的软硬件设计问题。

2.嵌入式I/O系统总体设计

2.1 MicroBlaze的体系结构

MicroBlaze采用功能强大的32位流水线结构,包含32个32位通用寄存器和1个可选的32位移位器,时钟频率可达150 MHz[3]。MicroBlaze软核的结构框图如图1所示。它具有以下基本特征:

(1)32个32位通用寄存器和2个专用寄存器(程序计数器和状态标志寄存器)。

(2)32位指令系统,支持3个操作数和2种寻址方式。

(3)分离的32位指令和数据总线,符合IBM的OPB总线规范(与外设相连接的低速总线)。

(4)通过本地存储器总线(LMB,本地高速总线)直接访问片内块存储器(BRAM)。

(5)具有高速的指令和数据缓存(cache),三级流水线结构(取址、译码、执行)。

(6)具有硬件调试模块(MDM)。

(7)带8个输入和8个输出快速链路接口(FSL)。

2.2 MicroBlaze嵌入式开发工具EDK

Xilinx公司提供了完善的嵌入式开发工具EDK(Embedded Development Kit)。EDK是Xilinx公司于2003年推出的SOPC系统开发套件。该套件集成了丰富的开发工具和大量的IP核资源,其中集成的工具包括硬件平台生成器(Plat Gen)、硬件仿真模型生成器(Sim Gen)、硬件调试工具(XMD)、软件库生成器(Lib Gen)、应用软件编译工具(GNU Compilers)、软件调试工具(GNU Debuggers)等;IP核资源包括LMB和OPB总线接口、外部存储器控制器(EMC)、SDRAM控制器、UART接口、中断控制器、定时器等[2]。

所有这些工具和资源都由EDK中的XPS(Xilinx Platform Studio)集成开发环境统一管理。XPS提供一个友好的图形用户界面(GUI),使用非常方便。

2.3 系统的设计开发流程

在嵌入式系统的开发中,软硬件协同设计的方法可以降低开发成本,缩短开发时间,并使得设计更加灵活,从而逐步取代了传统的设计流程。其中涉及到的关键问题是系统资源的规划和利用,所以在系统设计前首先要考虑系统功能的软硬件划分,清楚地界定系统内部各项功能的最终实现形式;而在进行软硬件分割时,若想达到系统性能的最佳化,就必须考虑到各功能部件之间数据交换的性能以及不同功能部件之间的同步,确保系统在执行时能满足所需的时间约束(timing constraint)[3]。

EDK工具包括XPS工具和SDK工具,XPS工具完成主要软/硬件设计调试工作,SDK工具用于设计和调试应用软件。ISE工具,用于混合编程和定制IP核。ChipScope Pro工具,用于在线调试硬件系统。第三方工具,如Modelsim工具,用于仿真硬件系统。

在本系统的设计开发过程中就采用了软硬件协同设计的方法,其流程如图2所示。

3.系统的关键硬件模块实现

3.1 44键盘模块的硬件实现

键盘是计算机系统中最常用的人机交互输入设备,然而在应用中都采用通用的键盘扫描器件是不现实的,需要单独设计成专用的小键盘。

(1)44键盘工作原理

44键盘的工作原理如图3所示,其中P0~P3为输出口,P4~P7为输入口。无按键按下时,输入口被上拉为高电平。输出口以一定频率循环输出0111、1011、1101、1110。通过读输入口的状态,便可判断击键情况。键盘扫描电路键盘上的每一个按键其实是一个开关电路,当某键被按下时,该按键的接点会呈现逻辑0状态,反之,未被按下时则呈现逻辑1的状态。当尚未按下键盘时,依据表1所示编码方式逐一扫描键盘按键,键盘输入到按键检测电路的值均为1,使键盘无论扫描哪个键时,都检测到尚未按下键盘;当使用者按下键盘按钮,则键盘输入到按键检测电路的值为0,直到键盘扫描到此键时,检测到已按键。

(2)按键的去抖动问题

按键大多是机械式开关结构,在开关切换的瞬间会在接触点出现抖动的现象。因此,必须加上抖动消除电路。如果要防抖动,就不能用时钟去检测按键的按下状态,而要去检测按键按下或者抬起的边沿。例如按键按下的时候就检测与按键连接的FPGA管脚的下降沿,按键松开的时候就检测与按键连接的FPGA管脚的上升沿。这样就可以不用理会按键按下的时间长度,根据按键按下或者抬起的次数来确定计数。

(3)硬件实现

虽然EDK提供的IP核非常丰富,但不可能满足所有用户的需求,根据实际需求定制IP核是嵌入式设计中常需要的,也是实现“量身定制”系统的前提。EDK工具提供了简单的界面帮助用户完成IP核定制过程,其中非常重要的方式是通过IPIF接口定制IP核。IPIF(IP Interface)是EDK提供的标准IP接口,允许用户在系统内总线上构建自己的IP核,用户只需关注自己想要的功能逻辑,EDK工具会根据用户选择的总线方式实现相应的总线接口逻辑,合成完整的IP核模块[4]。

在接口电路设计中,我们使用IPIF接口定制一个KEY_IP核,用于对键盘进行扫描进而采样键盘输出,最终生成扫描码以及产生中断请求。键盘扫描信号频率只需在几百赫兹左右即可,实现时将50MHZ OPB总线频率分频,上升沿循环扫描,下降沿采样,根据采样结果生成扫描码。

考虑到机械式按键的不稳定性,需要对扫描结果进行防抖处理,故在扫描到有键按下时启动一个计数器,计数若干次同一键被扫描到后,即可认为此键已被人为按下,将其存储于本地寄存器后,产生一个中断请求通知CPU调度键盘中断处理程序。

3.2 LCD液晶显示模块的硬件实现

(1)工作原理

TS1620-1 LCD为162字符型液晶显示器,可显示两行,每行可显示16个字符,通过发送指令,可配置成不同模式。接口部分有1个8位的数据寄存器、1个8位的指令寄存器、一个7位的地址计数(AC)寄存器和1位的忙标志(BF);指令寄存器用于控制LCD内部电路,完成LCD读写、扫描、显示等功能;数据寄存器用于暂存LCD与外部数据的通信数据。基本操作时序如下:

1)读状态:

RW=H,RS=L,E在读状态期间应保持高电平;

2)读数据:

RW=H,RS=H,E在读数据期间应保持高电平;

3)写指令:

RW=L,RS=L,D0-D7指令码,E在指令码稳定后要产生一个下降沿触发LCD执行此指令;

4)写数据:

RW=L,RS=H,D0~D7为待写数据,E在指令码稳定后要产生一个下降沿触发LCD执行此指令;

AC6~AC0的值为CGRAM还是DDRAM地址取决于最近一次向AC写入的是DDRAM还是CGRAM地址。地址只有7位,在进行传的时候,要并上DB7,组成8位一并传,状态同样通过D0~D7读出,格式如表2所示。

(2)硬件实现

在接口电路的设计中,我们使用IPIF接口定制一个LCD_IP核,通过OPB总线对显示设备进行控制和数据传输。LCD_IP与液晶显示模块之间需要连接的主要有数据线和控制信号线,如图4所示,具体为:RS、R/W、EN、DB7-DB0共11位。

Data_I与数据端口连接,负责采集液晶的状态数据。Data_O与数据端口连接,负责将控制指令和显示数据送至液晶。用DataCmdSelect、Execute、Data_T分别控制EN、RS、R/W信号,通过对这些引脚的组合控制,按照一定的时序关系实现对LCD的控制。

LCD_IP核中需要实现以下四种操作:

(1)读状态:

检测忙标志以及AC的值;

(2)读数据:

读出最近一次由DDRAM地址设置指令处DDRAM单元的内容;

(3)写指令:

设置LCD的工作模式、AC值以及显示方式等;

(4)写数据:

向LCD的DDRAM写入要显示的数据,写之前需要设置DDRAM地址;

四种操作中除读状态外都需对忙标志位检测;若BF为高电平,则LCD正在工作中,此时LCD接口部分被锁定,任何指令都将不处理,故需等待知道BF为低时方可进行下一个操作。

在IP核模板的基础上,用周期计数延时获得读、写操作时序,将指令直接传送至LCD,读写操作在IP核中占用几个总线周期,为了防止应用软件在发送指令期间再次发送新指令,IP核提供一个标志位供应用软件读取,以指示是否正在进行读写操作,若是则应用软件需适当延时等待再通知IP核发送下一条指令。

3.3 系统硬件平台的创建

在键盘和LCD液晶的硬件接口设计完成后,我们利用Xilinx公司提供的EDK开发软件XPS中的工具Create and Import Peripheral将其以IP核的方式挂到OPB(On-Chip Peripheral Bus)总线上。创建IP核时,在IPIF提供的服务中选择用户逻辑中断支持以及软件用户逻辑地址寄存器支持,前者使得外围设备可以管理由用户逻辑产生的中断,后者使得外围设备的用户逻辑部分拥有可寻址的寄存器[1]。按照前面所介绍的连接关系进行硬件搭建后,键盘以及LCD液晶显示模块的硬件详细信息都保存在MHS文件中。该文件定义了系统结构、外围设备和嵌入式处理器,也定义了系统的连通性以及系统中每个外围设备的地址分配和对每个外围设备的可配置选项。平台生成工具将MHS文件用于输入,创建了硬件平台。在XPS中选择Generate bit stream,即可以产生硬件配置文件*.bit文件。硬件平台如图5所示。

4.系统的软件设计与实现

4.1 44键盘软件实现

在建立系统时,在OPB总线上添加EDK提供的中断IP核INTC_IP,该IP核INTC可控制多个中断信号。把键盘的用户逻辑产生的中断信号输入到INTC_IP核中,然后INTC_IP核将这个中断信号输入到MicroBlaze的中断端口上,由MicroBlaze进行中断管理。当有中断发生的时候,MicroBlaze会跳转到地址0x10。这是C运行库的一部分,它包括缺省时跳转到中断句柄(interrupt handler)函数,此功能是由Xilinx提供的BSP(Board Support Package)(它是一个最基本的核,为应用程序提供最基本的功能)完成的[7],由于在MSS文件中已经对中断操作路线进行了设置,因此它会跳转到中断处理函数中进行中断处理。同时在引入IP核后,系统会自动生成相关的驱动程序,可以方便使用软件对寄存器进行读写操作。中断处理程序主要是进行了扫描码和ASCII码的转换,并把ASCII码显示在LCD上。

引入中断IP核后,系统会自动生成相关的中断请求号,以及提供与此中断号相关联的默认中断处理句柄(interrupt handler),随后即可在系统初始化时调用XIntc_Register Handler函数注册自定义中断处理句柄替换默认处理句柄。MicroBlaze提供的通用中断处理机制通过XIntc,可以管理多个中断控制器,XIntc中CfgPtr为数组类型,数组元素类型为XIntc_Config用于为中断控制器提供中断管理。XIntc_Config中的HandlerTable用于管理中断请求号与中断处理句柄的关系,所以每个中断控制器可以接收多个中断请求。在发生中断时,MicroBlaze会根据产生中断的中断控制器设备,找到与此设备相关联的XIntc_Config结构,再取出中断发生时的中断请求号,在XIntc_Config结构中找到相应的中断处理句柄,并跳入此处理程序处理中断请求。

4.2 LCD液晶显示模块软件实现

系统上电后,首先根据液晶显示器模块的结构通过写寄存器的方式对各项控制指令代码和参数(如液晶的行数、光标的位置光标、光标是否闪烁等)进行设置,从而完成对液晶显示模块的初始化过程。在对系统进行正确的初始化以后,就可以通过MicroBlaze将数据送至LCD进行显示了。在初始化程序中设置系统控制指令及其参数的方法为:根据用户硬件电路的设计,将指令及参数送到LCD_IP核对应的寄存器地址。系统中每个外设都有自己对应的唯一地址,这个地址是XPS在添加了LCD_IP核后选择Generate Addresses自动产生的。

CheckBF()函数用于通知LCD_IP核发送读取忙标志指令,此函数运行后,LCD_IP核会发出读状态操作指令,在数据有效后,将数据(BF和AC)先缓存于IP核的本地寄存器,而后供应用软件读取;Send Cmd(cmd)函数用于向LCD写入控制命令,从而达到配置LCD和显示字符的目的。需传入有正确命令格式的参数,确定将要执行的操作,在发送之前,需要一直等待CheckBF()检测到BF为低电平;为方便写入数据设有WriteChar、WriteString等函数,此类函数直接调用Send Cmd发出写数据操作;若没有设置LCD工作方式为自动递增AC,则在每次写之前都需要先发出设置DDRAM地址指令。

需要注意的是LCD在写数据之前需发送一系列初始化命令,以配置其工作模式、显示方式等,都是间接通过Send Cmd(cmd)实现。

4.3 应用程序的实现

本系统中应用程序设计部分主要功能为读取按键值,通过查找表的方式完成扫描码到ASCII码的转换,并把键码转换后的值显示在LCD液晶显示模块上。由于前面已经创建好键盘的IP核,又通过LCD_IP核对LCD液晶进行了控制,在此仅需编写主函数即可。按键扫描码的获取可以使用查询或者中断的方式。在具体实现中我们采用中断驱动模式来接收键盘扫描码。采用这种方式,既提高了响应速度,又可实现程序的模块化设计,并便于以后系统的扩充。应用程序调试运行成功之后便会产生.elf可执行文件。

5.系统的开发调试经验

我们更多的采用硬件调试的方法,将系统通过JTAG接口连接到目标板上的XMD调试接口,并把软件代码可执行文件(*.elf)和FPGA硬件配置文件(*.bit)通过Data2Mem转换成新的FPGA位流文件(*.bit)下载到系统中后,通过设置断点,读写内存和寄存器的值等手段来进行调试。最后将调试通过的位流文件,下载到目标芯片上,系统即可正常工作。

另外,结合系统调试过程中的经验,我们发现在进行程序编写时,需要特别注意以下两点:

(1)MicroBlaze为big-endian模式,且其内部总线宽度为32位,因此在对寄存器进行读写时需要注意其数据格式及宽度。

(2)在软件设计中要注意,对于FPGA来说LCD是一个低速设备,因此对于指令的响应需要一定的延迟,需要写一个有延迟作用的函数。

6.结论

本文采用软硬件协同设计的思想,设计并实现了一种基于MicroBlaze处理器的I/O系统。在进行完软硬件功能划分并创建好硬件平台后,对于输入设备键盘的控制以及输出设备LCD液晶显示器的功能设置可以通过软件的方式进行更改。本设计已在Xilinx Spatan3开发板上进行了验证,取得了良好的效果。通过本设计的实现可以看出,MicroBlaze是一个功能强大、应用灵活的嵌入式软处理器,特别是其强大的用户自定义逻辑功能,极大地方便了系统设计。可以预见,基于嵌入式软处理器的SOPC开发方法,必将拥有广阔的应用前景。

摘要:随着微电子工业的不断发展和FPGA技术的不断提高,SOPC技术逐渐成为嵌入式系统技术发展的新方向。本文介绍了XILINX公司的SOPC集成开发环境EDK,以及在EDK中开发和利用用户IP的方法;利用ISE及EDK设计工具设计开发了I/O系统中常用的IP模块,并通过了仿真验证。

关键词:SOPC,MicroBlaze,IP核,软硬件协同设计

参考文献

[1]董代洁,郭怀理等.基于FPGA的可编程Soc设计[M].北京:北京航空航天大学出版社,2006.

[2]Xilinx,“MicroBlaze Processor Reference Guide”EDK(v8.1)[S].January,2006.

[3]Xilinx,“Embedded System Tools Guide”EDK(v8.1)[S].January,2006.

I/O操作 第7篇

研华此次将数据采集、智能处理与数据发布三个核心功能有效融合在单个I/O模块中, 以满足如环境监测、设备故障监测及智慧城市等更广泛的行业应用。

研华WISE-4000系列产品是基于以太网的无线I/O模块, 无需通过网关即可采集和传输信息。由于无限定数量的I/O模块可从传感器采集信息并连接到既有网络, 这意味着该配置将更加简单便捷。

WISE-4000系列内部集成HTML5文档, 无需任何接入点, 即可直接通过web浏览器在移动设备上进行访问和配置。由于WISE-4000采用了时下流行的RESTful API, 系统集成商可通过调整程序以满足其特定需求, 并以更少的工作量获得更多数据, 实现用户效率最大化。

通过WISE-4000系列的数据存储功能, 用户可将标记时间的数据发送到Dropbox或私有云平台, 亦可缓冲在模块中。如此, 当发生网络通信故障时, 即便暂未发送数据至管理员也不会丢失, 有效提高了数据的安全性。

I/O操作 第8篇

如果你是一名摄影爱好者或媒体制作人, 那么工作间里放的一定是苹果公司的MacBook Pro或iMac。原因不在于你是苹果的“粉丝”, 而在于其所具备的高速数据传输和高清显示集成技术Thunderbolt (开发代号为“Light Peak”) 。

这项由英特尔中国研究院研发出来的新型高速互联技术, 能够同时串联多达6部外接设备, 包括高性能的存储设备、高分辨率显示器, 以及高比特率的视频采集设备等, 即便面对超大规模的媒体数据流, 拥有10Gbit/s速率的传输接口也能轻松应对。这对媒体制作者来说, 无疑是巨大的诱惑力。

尽管当下PC传输互联领域已是群雄逐鹿, 但Thunderbolt所具备的10Gbit/s速率绝对算是揭开了业界的“高铁时代”仅通过一个单独而精致的端口, 就可支持高分辨率显示屏和高性能数据设备。

同时在速度、灵活性和简约程度上, Thunderbolt技术也都为业界开创了新的技术先河。据实测数据显示, Thunderbolt技术传输一部全高清长电影 (6G~8G) 的时间还不到30秒。

据悉, 英特尔在2011年2月24日正式发布了这项新型高速PC连接技术Thunderbolt, 现已使用于苹果公司的新款Mac Book Pro系列笔记本电脑中。

苹果公司M a c硬件工程高级副总裁B o b Mansfield也评价道:“Thunderbolt具有超高传输速度、支持高分辨率显示并兼容现有I/O技术, 这将是整个行业的突破。相信苹果爱好者都会喜欢上它。”

从趋势到现实

在业界看来, 传输速率的不断提升将是不可逆转的发展趋势, 以创新著称的英特尔公司研发出10Gbit/s速率的Thunderbolt技术也在情理之中, 但对于当时的英特尔中国研究院而言, 如何将一个技术趋势化为商业现实, 则是经历了诸多不为人知的艰辛。

参与过该项目的英特尔中国研究院嵌入式IO系统实验室研究经理吴向斌告诉记者:“刚刚接手工作就遇到了不少难题, 首先是技术协议存在空白, 其次一些模块还处在研发阶段, 尤其在光模块方面, 基本与技术开发处于并行状态。还有些工作交由外部供应商来做, 我们需要将时间风险降到最低。”

“另外, 因为研究院的很多项目都是前瞻性的, 研发过程中势必伴随的风险。我们在实施项目的同时, 还要不断打消那些持怀疑态度的人的想法, 坚定信念走下去, 这对于我们项目组的每个人都是一次关于意志力的考验。”吴向斌补充道。

融合两种通信协议

据介绍, Thunderbolt技术在研发之初, 就设立了明确的目标, 即更快速地传输媒体数据、简化设备之间的连接并推动开发与使用PC的新方式。

如何把高速数据和高清视频连接整合到一条线缆上对于实现这个目标至关重要。

对此, Thunderbolt技术融合了两种通信方法 (协议) 用于数据传输的PCI Express以及用于显示的DisplayPort。PCI Express可以灵活地连接几乎任何类型的设备, DisplayPort用于显示, 能同步传输超过1080p分辨率的显示内容以及最多八声道音频。Thunderbolt技术兼容现有的Display Port显示器和适配器。它是一种所有设备通用的接口, 能够以菊花链的方式通过电缆或光缆方便地连接多种设备。

对于普通的移动PC用户而言, 它意味着超薄笔记本电脑上只需有一个接口, 就能在家或办公室实现高速数据媒体和高清显示功能。

产业规模2年内爆发

不过, 10Gbit/s的传输速率是否过于前沿, 除高端专业用户以外的普通PC用户何时能够真正用上该技术, 业界也存在不小的疑虑。

面对这一问题, 吴向斌倒是格外乐观。“市场对于前沿技术从来都是照单全收, 还记得最早的摄像机接口都是1394, 但没过多久, 就变成了USB。而现在, 很多摄影爱好者都嫌传输太慢, 可见用户需求的增长绝不亚于新技术的研发速度。”

据了解, 目前全球几大创新企业已经推出了基于Thunderbolt技术的产品或正计划推出支持Thunderbolt技术的产品, 包括Aja、Apogee、Avid、Blackmagic、LaCie、Promise、西部数据等。

“新技术的传递速度是很快的, 我们相信, 苹果公司率先采用Thunderbolt技术, 是一个良好的开端, 现在西部数据已经在研制基于Thunderbolt技术的硬盘产品, 而佳能等公司也在考虑使用, 我们相信, 在未来2年内, Thunderbolt技术的产业链将会有一个较大规模的集体爆发。”吴向斌如是说。

Thunderbolt:满足媒体制作者的高速需求

处理高清媒体是PC上要求最为苛刻的工作之一。通过Thunderbolt技术, 英特尔提供了创新的技术, 帮助专业人士和消费者更快捷地处理音乐和高清电影等越来越多的媒体内容。

I/O操作 第9篇

网友采取的方法

通过上网查阅,网友给出了两种方案:一种是更换三极管的类型,把NPN类型的8050 更换为PNP类型的8550;另外一种方法是为IO添加下拉电阻。

我对这两个方法都进行了实验:当我把三极管8050 改为8550 时,利用程序设置“OUT”初始状态为高电平,Q1截止,按下“ON”键后,Q1 导通;当需要关断三极管时,让“OUT”输出高电平5V,三极管却没有被关断。仔细分析后可知,本电路采用双电源,VC1 采用12V电源,单片机供电为5V,当输出高电平5V时,仍然满足饱和的外部条件而不能退出饱和。因此,第一种方法只能适用于三极管、单片机使用同一5V电压时的情况。

对于第二种解决方法,网友做了一些实验,实验原理图如图2 所示,其实验过程及结果为:为IO添加一个5k的下拉电阻R65,测试有效,上电瞬间不是高电平了;更换R65 为30k下拉电阻,依然有效,上电瞬间IO的电压被拉到低了;再换为60k电阻,也可以;但后面程序运行时候现象就不同了,如果使用5k电阻,那么I/O(DO2)无法启动9013,而30k、60k可以正常启动或关闭9013. 还有一个现象,就是如果使用万用表电压档对DO2 处进行电压测量,会导致9013 断开,而后再无法通过控制IO电平启动9013,必须电路板重新上电才能再启动。

从图2 电路可知,由于单片机的驱动能力有限,如果加下拉电阻,会降低其驱动能力,会对电路造成影响。

对单片机瞬间高电平的测试

为解决这一问题,我用示波器对这一高电平测试并进行录像,逐帧观察。在电路中,P3.7 的初始状态设置为低电平,当按下“ON”时,转为高电平使Q1 饱和导通。

在通电瞬间,用示波器测出的波形如图3 所示。经计算可以得出这一高电平的时间大约为40ms,在这一时间内Q1 饱和导通会使继电器闭合。

利用电容吸收瞬时高电平

如何降低瞬时高电平呢?我想到了利用电容的暂稳态把这一高电平吸收,使输出的高电平降低,不足以使三极管导通。测试电路如图4 所示,在图中P3.7 端口并联了一个电解电容C7。

工作过程:当单片机得电后未运行程序的瞬间,P3.7

输出高电平,但由于电容C7 两端的电压不能突变,所以C7 正极的电压将缓慢增大,在单片机输出高电平的时间内,升高的电压如果达不到三极管的导通电压,则Q1 不会产生误动作。当P3.7 通过软件变为低电平时,C7 上的电压回流到单片机,对电路不会造成影响。

电容器参数的选择实验

由原理可以得出,在51 单片机的I/O外部并接一个电解电容可以把瞬间高电平吸收掉,但是电容器的参数对这一吸收影响较大,我选用了10μF、47μF和100μF的三个电容器。

■ 1、外部并接10μF的电解电容

当在外部并接10μF的电容器时,输出电压的峰值接近3.5V,这一电平能使三极管导通;另外充完后的电压回流时间较短,电容器上的电压基本上是瞬时消失。

■ 2、外部并接47μF的电解电容

当在外部并接47μF的电容器时,输出电压的峰值接近2.3V,这一电平还能使三极管导通;另外充完后的电压回流时间变长,但电容器上的电压会迅速降低到0.3V以下。

■ 3、外部并接100μF的电解电容

当在外部并接100μF的电容器时,输出电压的峰值接近0.5V,这一电平已经不能使三极管导通;另外充完后的电压回流时间变得更长,但不会超过5ms。

实验结果

通过实验,在单片机I/O口并接电解电容后,可以消除其输出的瞬时高电平,符合我设计的电路要求,不过这种方法也存在一定的弊端:通电瞬间,后级电路不会因为单片机的瞬时高电平而得电,但在电路接通时会有一定的延时通电,单片机控制断电时不会即时断电,也会有一定的延时。

相关文章
11月份幼儿教师工作总结

11月份幼儿教师工作总结

11月份幼儿教师工作总结(精选14篇)11月份幼儿教师工作总结 第1篇本月,自己积极适应新时期教学工作的要求,严格要求自己,积极向同事们...

1
2025-09-19
兽药饲料监管工作总结及2012年工作打算

兽药饲料监管工作总结及2012年工作打算

兽药饲料监管工作总结及2012年工作打算(精选8篇)兽药饲料监管工作总结及2012年工作打算 第1篇2011年兽药饲料监管工作总结及2012年工作打...

1
2025-09-19
10职业健康安全保障措施

10职业健康安全保障措施

10职业健康安全保障措施(精选9篇)10职业健康安全保障措施 第1篇六、施工组织设计㈠文字表述总体施工组织布置及规划施工进度安排主要工程...

1
2025-09-19
2023年中国网络教育激发创新意识

2023年中国网络教育激发创新意识

2023年中国网络教育激发创新意识(精选7篇)2023年中国网络教育激发创新意识 第1篇2013年中国网络教育激发创新意识智研数据研究中心网讯:...

1
2025-09-19
2024-2025学年度第一学期少先队活动计划

2024-2025学年度第一学期少先队活动计划

2024-2025学年度第一学期少先队活动计划(精选10篇)2024-2025学年度第一学期少先队活动计划 第1篇2017---2018学年第一学期少先队工作计划...

1
2025-09-19
山东公务员考试行测判断推理注意事项

山东公务员考试行测判断推理注意事项

山东公务员考试行测判断推理注意事项(精选4篇)山东公务员考试行测判断推理注意事项 第1篇2018山东公务员考试行测判断推理注意事项随着20...

1
2025-09-19
400字初中日记作文

400字初中日记作文

400字初中日记作文(精选13篇)400字初中日记作文 第1篇初中暑假日记作文400字【作文一】一天暑假,妈妈就子啊家里河东狮吼: “扫地了,...

1
2025-09-19
3s技术与方法名词解释

3s技术与方法名词解释

3s技术与方法名词解释(精选6篇)3s技术与方法名词解释 第1篇3S技术在林业的应用与前景随着3S技术在林业中的`应用,我国林业信息技术的发展...

1
2025-09-19
付费阅读
确认删除?
回到顶部