简述tcp三次握手过程用DMA方式输入数据块的过程?

1,采用dma方式为什么能实现高速传送?
高速公路全线 采用 双向男子高速搂美女开车资料照片遭人肉市领导检查河紫高速进度时强调确保完成年度任务高速
高速 公路高速
高速 公路高速
高速 公路采用双向四车道 高速 公路标准建设全线采用双向六车道 高速 公路标准建设浙江诸永高速公路1高速
上一篇:  下一篇:7655人阅读
u-boot/驱动开发/linux(33)
Linux(86)
DMA方式具有如下特点:
  1、 外部设备的输入输出请求直接发给主储存器。
  主存储器既可以被CPU访问,也可以被外围设备访问。因此,在主存储器中通常要有一个存储管理部件来为各种访问主存储器的申请排队,一般计算机系统把外围设备的访问申请安排在最高优先级。
  2、 不需要做保存现场和恢复现场等工作,从而使DMA方式的工作速度大大加快。
  由于在外围设备与主存储器之间传送数据不需要执行程序,因此,也不动用CPU中的数据寄存器和指令计数器等。
  3、在DMA控制器中,除了需要设置数据缓冲寄存器、设备状态寄存器或控制寄存器之外,还要设置主存储器地址寄存器,设备地址寄存器和数据交换个数计数器。
  外围设备与主存储器之间的整个数据交换过程全部要在硬件控制下完成。另外,由于外围设备一般是以字节为单位传送的,而主存储器是以字为单位访问的,因此,在DMA控制器中还要有从字节装配成字和从字拆卸成字节的硬件。
  4、在DMA方式开始之前要对DMA控制器进行初始化,包括向DMA控制器传送主存缓冲区首地址、设备地址、交换的数据块的长度等,并启动设备开始工作。在DMA方式结束之后,要向CPU申请中断,在中断服务程序中对主存储器中数据缓冲区进行后处理。如果需要继续传送数据的话,要再次对DMA控制器进行初始化。
  5、在DMA方式中,CPU不仅能够与外围设备并行工作,而且整个数据的传送过程不需要CPU的干预。如果主存储器的频带宽度足够的话,外围设备的工作可以丝毫不影响CPU运行它自身的程序。
  DMA方式的工作流程如下:
  对于输入设备:
  从输入介质上读一个字节或字到DMA控制器中的数据缓冲寄存器BD中,如果输入设备是面向字符的,则要把读入的字符装配成字。
  若一个字还没有装配满,则返回到上面;若校验出错,则发中断申请;若一个字已经装配满,则将BD中的数据送入主存数据寄存器。
  把主存地址寄存器BA(在DMA控制器中)中的地址送入主存地址寄存器,并且将BA中的地址增值至下一个字地址。
  把DMA控制器内的数据交换个数计数器BC中的内容减&1&。
  若BC中的内容为&0&,则整个DMA数据传送过程全部结束,否则返回到最上面继续进行。
  对于输出设备:
  把主存地址寄存器BA(在DMA控制器中)中的地址送入主存地址寄存器,并启动主存储器,同时将BA中的地址增值至下一个字地址。
  将主存储器数据寄存器中的数据送入DMA控制器的数据缓冲寄存器BD中。如果输出设备是面向字符的,则要把BD中的数据拆卸字符。
  把BD中数据逐个字符(对于面向字符的设备)或整个字写到输出介质上。
  把DMA控制器内的数据交换个数计数器BC中的内容减&1&。
  若BC中的内容为&0&,则整个DMA数据传送过程全部结束,否则返回到最上面继续进行。
  目前使用的DMA方式实际上有如下三种:
  1、周期窃取方式
  在每一条指令执行结束时,CPU测试有没有DMA服务申请,如果有,则CPU进入一个DMA周期。在DMA周期中借用CPU完成上面所列出的DMA工作流程。包括数据和主存地址的传送,交换个数计数器中的内容减&1&,主存地址的增值及一些测试判断等。
  采用周期窃取方式时,主存储器可以不与外围设备直接相连接,而只与CPU连接,即仍然可以采用如图4.4那样的连接方式,因为外围设备与主存储器的数据交换与程序控制输入输出方式和中断输入输出方式一样都是要经过CPU的。
  周期窃取方式与程序控制输入输出方式和中断输入输出方式的不同处主要在:它不需要使用程序来完成数据的输入或输出,只是借用了一个CPU的周期来完成DMA流程。因此,其工作速度是很快的。
  周期窃取方式的优点是硬件结构很简单,比较容易实现。缺点是在数据输入或输出过程种实际上占用了CPU的时间。
  2、直接存取方式
  这是一种真正的DMA方式。DMA控制器的数据传送申请不是发向CPU,而是直接发往主存储器。在得到主存储器的响应之后,整个DMA工作流程全部在DMA控制器中用硬件完成。
  直接存取方式的优点与缺点正好与周期窃取方式相反。
  目前的多数计算机系统均采用直接存取方式工作。
  3、数据块传送方式
  在设备控制器中设置一个比较大的数据缓冲存储器,一般要能够存放下一个数据块,如在软磁盘存储器中通常设置512个字节的数据缓冲存储器。与设备介质之间的数据交换在数据缓冲存储器中进行。设备控制器与主存储器之间的数据交换以数据块为单位,并采用程序中断方式进行。
  数据块传送方式实际上并不是DMA方式,只是它在每次中断输入输出过程中是以数据块为单位获得或发送数据的,这一点与上面两种DMA方式相同,因此,通常也把这种输入输出方式归入DMA方式。
  采用数据块传送方式的外围设备还有行式打印机,激光打印机,卡片阅读机,部分绘图仪等。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1475497次
积分:15967
积分:15967
排名:第648名
原创:179篇
转载:291篇
评论:122条
(1)(1)(3)(2)(12)(19)(7)(1)(3)(2)(2)(3)(1)(5)(1)(4)(3)(1)(3)(1)(3)(1)(1)(9)(11)(1)(3)(1)(5)(6)(1)(1)(24)(1)(1)(2)(5)(3)(5)(7)(14)(37)(17)(17)(9)(28)(16)(78)(52)(20)(12)(4)温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
一个随和的人,只是这样……
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
· CPU当前机器周期结束,响应DMADMAC从CPU接管总线的控制权,完成:· 对内存寻址,决定数据传送的内存单元地址;· 对数据传送字进行计数;· 执行数据传送的操作。· 后处理---传送结束,DMAC向CPU发中断请求,报告DMA操作的结束。CPU响应,转入中断服务程序,完成DMA结束处理工作,包括:      ① 校验数据      ② 决定是否结束传送等。3.选择型和多路型DMA控制器  (1)选择型DMA控制器:物理上可以连接多个设备,而在逻辑上只允许接-个设备。即在某一段时间内只能为一个设备服务。适用于快速的外围设备。  (2)多路型DMA控制器:不仅在物理上可以连接多个外围设备,而且在逻辑上也允许这些外围设备同时工作,各设备以字节交叉方式通过DMA控制器进行数据传送。适用于同时连接多个慢速的外围设备。
阅读(340)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_081066',
blogTitle:'DMA方式',
blogAbstract:'DMA方式基本概念· 直接内存访问(DMA)方式,是一种完全由硬件执行I/O交换的工作方式。在这种方式中,DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和I/O设备之间进行。DMA工作时,由DMA控制器向内存发出地址和控制信号;进行地址修改;对传送字的个数计数;并且以中断方式向CPU报告传送操作的结束。· DMA方式一般用于高速传送成组的数据。      目的:减少大批量数据传输时CPU的开销',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:5,
publishTime:5,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'一个随和的人,只是这样……',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}ARM系统中DMA方式在数据采集中的应用
ARM系统中DMA方式在数据采集中的应用
发布: | 作者: | 来源:
| 查看:165次 | 用户关注:
1 引言ARM作为一种16/32位高性能、低成本、低功耗的嵌入式RISC微处理器。普遍应用于工业控制、消费类电子产品、通信系统、无线系统等产品。大多数ARM微控制器都集成了DMA控制器。且直接内存存取(DMA)作为一种独立于CPU的后台批量数据传输技术,以其快速、高效的特点在数据采集领域得到了广泛的应用。本文以三星公司的S3C2410为例,介绍了其内部DMA控制器的特点和使用方法.以S3C2410
1 引言ARM作为一种16/32位高性能、低成本、低功耗的嵌入式微处理器。普遍应用于工业控制、消费类电子产品、通信系统、无线系统等产品。大多数ARM微控制器都集成了DMA控制器。且直接内存存取(DMA)作为一种独立于CPU的后台批量数据传输技术,以其快速、高效的特点在数据采集领域得到了广泛的应用。本文以三星公司的为例,介绍了其内部DMA控制器的特点和使用方法.以和为核心结合DMA技术设计了CCD相机采集系统,并且给出操作系统下DMA设备驱动程序的设计方法。2 DMA工作过程简介是基于内核的微处理器.主频可达203 MHz,适用于信息家电、手持设备、移动终端等领域。S3C2410可提供4个DMA通道.用于系统总线内部或与外围总线之间的数据交换。现以外部DMA 请求为例简要介绍DMA的工作过程。图1所示为DMA基本工作时序。 图1 DMA基本工作时序图当需要进行DMA操作时,外部DMA请求引脚XnXDREQ置为低电平。此时DMA控制器向CPU发出占用总线的请求,当总线请求成功后,XnXDACK引脚变为低电平,表示CPU已经将总线使用权交给DMA控制器,可以进行数据传输。当数据传输完成后应答信号XnXDACK置为高电平,通知CPU完成一次DMA操作。S3C2410提供了3种不同的DMA操作模式,分别是单服务命令模式、单服务握手模式和全服务握手模式。在利用DMA进行数据传输前必须对其相关寄存器进行设置。主要有:源地址寄存器、目的地址寄存器和各自的控制寄存器,以及配置DMA模式的控制寄存器等。3 采集系统硬件设计根据DMA的特点,设计了基于ARM和的CCD相机采集系统。系统结构如图2选用公司的Cyclone系列器件,可为CCD相机提供工作所需的驱动时序.同时接收经模数转换的 CCD输出图像数据。S3C2410通过DMA方式从FPGA内部采集数据,通过数据线、DMA信号线、片选信号和输出时钟线与FPGA相连。这里主要介绍DMA方式的数据采集,FPGA内部的CCD驱动逻辑暂不介绍。 FPGA与ARM的接口逻辑电路如图3。FPGA内部采用异步解决CCD输出数据频率和S3C2410采集频率不匹配的问题,写时钟由CCD输出位同步信号提供,读时钟由 S3C2410的时钟输出引脚CLKOUT0提供。CLKOUT0根据ARM内部寄存器的设置可以输出不同的时钟频率。输出数据经过以nGCS4 为选通信号的BUFFER后接到ARM的数据总线上。nGCS4是S3C2410存储空间中BNAK4的片选信号,当S3C2410对地址范围 0xx的存储空间进行读写操作时,BANK4为低电平,其余时间均为高电平.用它作为BUFFER的选通信号能有效地避免数据总线的污染。的写请求信号由S3C2410与FIFO的满状态共同控制。当ARM发出START信号并且FIFO未满时,写请求信号为高电平。FIFO在写时钟的控制下写入数据。当START信号撤销或者FIFO满时,写请求信号变为低电平,停止写操作。FIFO的读操作与ARM的DMA操作配合进行。系统采用单服务命令模式的DMA操作,每次传输一个字节数据位。当DREQ0信号变为低电平时 DMA操作开始,每次传输一个字节后产生一个DACK0应答信号,而且只要DREQ0为低电平DMA操作就继续进行,直到DMA控制寄存器中的计数器为 0.产生DMA中断。根据上述时序特点,将FIFO的空信号作为DMA的请求信号DREQ0.当CCD输出的数据写入FIFO中时,空信号跳变为低电平启动DMA操作,同时以DACK0信号作为FIFO的读请求。每一次DMA传输完成后应答信号使FIFO的读指针移动一位,以实现数据的快速准确采集。 4 下的驱动程序设计系统采用ARM+嵌入式的构架,Linux版本为2.4.18,采集系统必须和高效灵活的接口驱动程序相结合才能在操作系统下正常工作。4.1 驱动程序的基本概念设备驱动程序是操作系统内核和硬件之间的接口,它属于内核一部分,主要功能如下:(1)对设备初始化或释放;(2)把数据从内核传送至硬件。从硬件读取数据:(3)读取应用程序传送给设备的数据,回送应用程序请求的数据:(4)监测和处理设备出现的异常。设备驱动程序为应用程序屏蔽了硬件的细节,在应用程序中,硬件设备只是一个设备文件,可以像操作普通文件一样对硬件设备进行操作。4.2 修改代码嵌入式Linux在arch/arm/mach-目录下的DMA.c 文件中定义了一些与DMA操作相关的通用函数,主要有:申请DMA通道函数_re,quest_dma()、申请DMA中断函数 request_irq()、加入DMA队列函数_dma_queue_buffer()、进行DMA操作函数_dma() 以及中断处理程序dma_irq_handler()等。在进行特定接口操作时,必须对其进行适当的修改。根据接口设置修改如下内容:增加外部DMA操作的寄存器设置:#define XDREQ0_CTL(DEMAND_MODE | _HCLK | INT_MODE | TSZ_ | _ | HWSRC(CH0_nXDREQ0) | DMA_SRC_HW | CLR_ATRELOAD | DSZ(DSZ_)| TX_CNT(0));//设置DMA为单服务命令模式,8位数据总线、允许中断且通过DREQ0硬件触发DMA操作#define XDREQ0_RD_SRC 0x#define XDREQ0_RD_SRC_CTL BUF_ON_MEM_FIX//设置DMA操作的源地址为系统总线上的0x且地址固定#define XDREQO_RD_DST_CTL BUF_ON_MEM //设置DMA操作的目的地址在系统总线且地址逐次加1通过DMA读取FPGA数据时必须由操作系统在内存中开辟一个空间做为DMA操作的目的地址。操作系统开辟的内存位于虚拟空间.而DMA操作的目的地址必须为物理地址,所以必须进行虚拟地址到物理地址的转换。因此在_dma()中增加如下代码设置DMA的目的地址寄存器:regs-&DIDST=virt_to_bus(buf-&dma_start)virt_to_bus()是操作系统提供的虚拟地址到物理地址的转换函数,buf-&dma_start是系统开辟的虚拟地址空间的首地址。另外由接口原理图可知,S3C2410须向FPGA发送START信号启动FIFO的读写和DMA操作。所以系统定义GPB3作为START信号,定义如下:#define START(GPIO_MODE_OUT | GPIO_PULLUP_DIS | GPIO_B3);同时在_dma()函数中增加如下代码启动DMA操作:write_gpio_bit(START,1);START引脚置为高电平后立即启动FIFO的写操作,同时也就启动了DMA操作进行数据传输,当DMA计数器减为0后发生DMA中断,并且在中断处理程序中将START位置0停止FIFO的写操作。4.3 接口驱动的关键代码利用系统提供的DMA操作函数,接口驱动的设计就显得比较容易。接口驱动属于字符设备驱动.重点在初始化和read函数部分。初始化函数中完成DMA引脚定义、BANK4总线设置、申请DMA通道以及注册字符设备等。read函数是接口驱动的核心。应用程序正是通过调用read函数来读取数据。其核心代码如下:fpga_buf_t *b=&fpga_dma_addr_t *b-&size=buf=kmalloc(b-&size,GFP_DMA);s3c2410 dma_queue_buffer(b-&dma_ch,(void*)b,buf,b-&size,DMA_BUF_RD);if(copy_to_user(buff,buf,b-&size))return -EFAULT;kfree(buf);return b-&系统调用read函数时首先通过kmalloc分配一段虚拟内存空间,并将其指针和DMA通道、传输字节数一起通过 s3c2410_dma_queue_buffer()加入DMA队列.在队列函数中调用process_dma()函数将虚拟地址转换为物理地址并且启动DMA操作。DMA操作完成后退出队列并调用copy_to_user()将采集到的数据由内核空间拷贝到用户空间进行后续操作。
本页面信息由华强电子网用户提供,如果涉嫌侵权,请与我们客服联系,我们核实后将及时处理。
应用与方案分类
这段时间,巨头高通似乎有些“点背”。苹果欠的专利费不给还

我要回帖

更多关于 简述数据包封装过程 的文章

 

随机推荐