适应多种时序的DMA控制器设计

最新更新时间:2012-03-14来源: 互联网关键字:时序  DMA  控制器 手机看文章 扫描二维码
随时随地手机看文章
本文所设计的可适应于多种时序情况的DMA控制器,被应用于该图像协处理器之中后,能够很好地解决问题。

  1 图像协处理器的系统结构

  图1所示为该DMA控制器所处图像协处理器的系统结构,下面将对其的系统构成和数据流程做详细说明。

  

图像协处理器的系统结构

 

  1.1 系统构成

  基带芯片为移动终端设备的系统控制核心。其通过外部存储器接口总线(External eMI,Memory InteRFace bus)与该图像协处理器的控制端口相连。基带芯片不仅控制着图像协处理器所有模块的工作模式,而且负责图像数据的传送。EMI总线数据线宽度为16位,其控制的图像显示终端为分辨率为320x240的LCD。

  图像传感器(sensor)为感光器件,其将接收到的光信号转为电信号,并在内部通过模拟/数字转换产生数字图像,在该图像协处理器设计中采用分辨率为640x480的图像传感器,其的工作时钟为24 MHz。

  图像处理模块,即ISP(Image Signal Processing)模块被用于图像处理,包括去坏点、去噪声、边界增强等功能。

  图像压缩模块被用于对图像处理模块输出的YUV422格式数据进行JPEG压缩。

  SD卡控制器模块负责与SD卡的命令和数据交互,所有对SD卡的操作都由基带芯片配置SD卡控制器的相关寄存器完成。其与SD卡的接口包括CLK(SD卡的时钟信号线)、CMD(SD卡的命令线)、DATA0~DATA3(SD卡的4根数据线)。在与SD卡的数据交互中,一般是以block(512字节) 为单位的,并且在启动写卡命令之后,SD卡控制器必须在250 ms(SD version 2.0)内将所有数据写入SD卡中。

  DMA控制器为基带芯片与SD卡控制器的接口模块,用于对写卡数据和读卡数据做暂时存储。其的本质功能是协调基带芯片和SD卡控制器之间的速度差异。存储数据的DMA存储器容量为5 120字节,即10个block数据。

  1.2 数据流程

  在该图像协处理器中,所有模块时钟频率均为48 MHz,其被2分频之后送至图像传感器,图像传感器以24 MHz频率送出格式为YUV422的640x480图像。

  该图像协处理器有2种模式:图像预览模式和连拍模式。图像预览模式用于拍照前的图像预览,拍照者可以在LCD上看到将被拍下的图像。连拍模式用于连续拍摄图像,并将每一幅拍下的照片存入SD卡当中。

  1.2.1 图像预览模式的数据流程

  在图像预览模式下,图像传感器以24 MHz频率送出分辨率为640x480且格式为YUV422的图像,帧率为30帧/s。数据被48 MHz系统时钟同步后送入图像处理模块。图像处理模块将针对图像传感器的特点对图像进行处理以提高图像质量,然后将图像分辨率从640x480缩小至 320x240以适应LCD的显示分辨率,并将数据格式从YUV422转为RGB565。最后,基带芯片通过EMI接口将图像数据读出,直接写入LCD的显示缓冲区后在LCD上显示出来。

  1.2.2 连拍模式的数据流程

  当基带芯片启动连拍模式后,其首先配置图像传感器,使其以10帧/s的帧率送出分辨率为640x480的数字图像,数据格式仍然为YUV42 2。此时每帧的周期为100 ms,其中帧有效时间为30 ms,帧消隐时间为70 ms。

  当数据送入图像处理模块后,该模块仍对图像进行处理并将图像分辨率从640x480缩小至320x240,之后将数据格式从YUV422转为RGB56 5。基带芯片也仍然通过EMI接口将该图像数据读出,并直接写入LCD的显示缓冲区中,这样在连拍的时候,仍可以在LCD上看到被拍下的图像。

  图像处理模块在送出预览数据的同时也将320x240的YUV422数据送至图像压缩模块。为了兼顾压缩比和图像质量,一般配置压缩比在10:1左右,这样一幅320x240的图像经JPEG压缩后的数据量为320x240x2/10=15 360字节。为留出适当的备用空间,图像压缩模块将编码之后的数据存入一个容量为8 192x16位的存储器中,在此命名为JPEG_MEM。当一幅图像编码完成时,即在图像传感器进入帧消隐阶段之后,JPEG_MEM中已经存了一幅压缩之后的图像。随后图像压缩模块向基带芯片发出中断信号,基带芯片在从图像处理模块接收了当前预览图像的最后一部分数据并送LCD显示后,将响应该中断,从 JPEG_MEM中读出JPEG格式图片,存入片外的存储器中。经实际测试可知,基带芯片做一次EMI读取大约需要时间250 ns,因为EMI数据线宽度为16位,所以在此250 ns内基带芯片将从JPEG_MEM中读出2个字节,这样读完所有15 360个字节需要15 360x250/2=1.92 ms。在基带芯片读取JPEG数据之前,其将最后一部分预览数据读出并送LCD显示也需要1 ms左右,至此每帧图像70 ms的帧消隐时间在基带芯片读完JPEG数据后还剩余70-1-1.92=67.08 ms。

  当基带芯片读完JPEG数据后,将立即准备将数据写入SD卡中。其首先将操作文件链表,在SD卡上为即将写入的JPEG图片分配相应空间,并将这些空间的原内容擦除。因为在写卡和擦卡之后,SD卡需要过一定时间后才能接受新的命令,所以操作文件链表和擦卡比较耗时间,一般需要15 ms左右。在此之后,为了提高写卡速度,基带芯片先将一部分数据(如512字节)利用DMA控制器写入存储器中,这需要的时间为250 nsx512/2=0.064 ms,然后配置SD卡控制器向SD卡发出CMD25(multiply block write conlluand)命令。基带芯片设置每个CMD25向卡写入10个block数据。在接收到SD卡发回的响应后,SD卡控制器将利用DMA接口从 DMA存储器中读出图像数据并同时将数据写入SD卡中。在SD卡控制器写卡的同时,基带芯片将剩余的9个block数据写入DMA存储器。SD卡的时钟频率为24 MHz,为其工作在4根数据线模式时,其传送完所有5 120字节的数据只需要42nsx2x5120=0.43 ms。但是基带芯片写完剩余的9个block需要250nsx512x9/2=0.576 ms>0.43 ms,所以从基带芯片写第1个block开始到SD卡控制器把最后一个block写入SD卡大约需要时间为 0.064+0.576+0.045=0.685 ms。在此之后,SD卡将进入编程状态(programming状态),这段时间因卡而异,在实际调试中使用的卡一般编程状态会持续5 ms左右。至此基带芯片完成一次5 120字节的写卡需要时间为:15+0.685+5=20.685ms。如前所述每幅JPEG压缩后的320x240的图片大约为15360字节,即30 个block,所以写完一幅图片需要的总时间约为3x20.685=62.055ms,其小于前面计算的67.08ms,所以基带芯片和SD卡控制器可以在每帧图像的帧消隐时间内完成写卡操作。

  2 DMA控制器的实现

  2.1 DMA控制器接口

  为了更准确地描述该DMA控制器的工作流程,其主要接口信号介绍如下。DMA控制器与3部分逻辑的接口为:基带芯片的EMI接口、DMA存储器接口、SD卡控制器。

  1)与基带芯片的接口 这个接口中,与该DMA控制器关系最密切的信号是host_dma_wr,其为基带芯片送给DMA存储器的写信号,这个信号低电平有效。

  2)DMA存储器接口 dma_memory_addr为DMA存储器的地址信号。为了能够保存10个block的数据,DMA存储器的容量为2560x16=5120字节,所以dma_memory_addr的位宽为12位;drag_memory_datain为DMA存储器的数据输入端口,位宽为16 位;dma_memory_dataout为DMA存储器的数据输出端口,位宽为16位;dma_memory_wen为DMA存储器的写使能信号,低电平有效。

  3)SD卡控制器接口 dma_req是SD卡控制器发出的DMA请求信号,高电平有效。其为DMA控制器做速度协调的重要信号,如果其为高则表示SD卡控制器要求与DMA存储器做DMA传送;如果该信号被置低,可能存在两种情况,①可能是本次DMA传送已经完成,②可能是SD卡控制器的读或写卡速度低于其操作DMA存储器的速度,所以SD卡控制器暂停DMA操作;dma_write是SD卡控制器发出的DMA写标志信号。如果其为1表示SD卡控制器在做读卡操作,并准备将读出的数据写入DMA存储器;如果其为0表示SD卡控制器在做写卡操作,并准备从DMA存储器中读取数据;dma_ ack是DMA控制器发给SD卡控制器的应答信号,其相当于DMA传输数据的有效信号;dma_rdata是DMA读模式的数据输出端口,位宽为32 位;dma_ wdata是DMA写模式的数据输入端口,位宽为32位。

  2.2 DMA控制器的工作流程

  为了使DMA控制器能更灵活地适应各种操作情况并很好的完成2个操作源(基带芯片、SD卡控制器)的速度匹配功能。下面将分别就multi-ple block write命令(CMD25)和multiple block read命令(CMD18)对该状态机的工作流程进行说明。

  先将状态机中的几个重要变量做如下说明:

  dma_num表示在一次多block读(CMD18)或写(CMD25)操作中,要向卡写入或读出多少个字节的数据。在该图像协处理器中,每次读或写卡都要操作10个block数据,所以dma_num将被设置为5 120;

  dma_in_cnt表示在一次多block写卡操作中,基带芯片已经向DMA存储器中写入了多少个字节的数据;

  dam_cnt表示在本次多block操作中,SD卡控制器从DMA存储器中读出数据的字节数(DMA读模式)或写入DMA存储器中的数据字节数(DMA写模式)。

  显然,在该图像协处理器中,每个CMD18和CMD25完成之后,dam_in_cnt和dma_cnt都将与dma_num相等,且均为5 120。

2.2.1 multiple block write

  如前所述,每次multiple block write要向卡写入10个block数据,即10x512=5 120字节。为了提高写卡速度,基带芯片首先向DMA存储器中写入1个block数据,然后向SD卡发出CMD25(multi block write command)。当SD卡控制器发出CMD25并接收到该命令的应答信号后,立即向DMA控制器发出dma_req信号,准备从DMA存储器中读取数据。当DMA控制器监测到dma_req为1且dma_write为0后,将依次进入状态1、状态2、状态3、状态4。在状态4中,其会检查基带芯片的写信号host_dma_wr是否有效,如无效,其将从DMA存储器中读取当前地址的数据,然后再将DMA存储器的地址加1并进入状态5;如 host_dma_wr有效,则DMA控制器将等待一个时钟周期,在下个时钟的上升沿再去判断host_dma_wr的极性,若其失效再读DMA存储器。也就是说基带芯片对DMA存储器的操作有更高优先级,利用这个办法就可以使基带芯片和SD卡控制器可以尽量并行工作以加快写卡速度。在状态5中,DMA读状态机做如状态4的操作,这是因为dma_rdata的数据线宽度为32位,而dma_memory_data-out的数据线宽度是16位,所以必须要读2次DMA存储器再做一次DMA读传送。在状态6中,DMA状态机将向SD卡控制器发出dma_ack(数据使能信号)和dma- rdata[31:0],随后进入状态7。在状态7中,DMA状态机将做3个重要判断,首先其判断dma-cnt是否等于dma_num,如相等则意味着 SD卡控制器在本次多block操作中已经读取了全部5 120个字节数据,状态机将回到初始状态以准备下一次DMA操作;若不相等,则判断dma_c-nt是否等于dma_in_cnt,若dma_cnt等于 dma_in_cnt,则意味着基带芯片写入DMA存储器的所有数据均已被SD卡控制器读出,DMA存储器已经为空,但数据量还没有达到5 120字节,DMA状态机将进入状态8即等待状态,只有基带芯片写入新的数据后,SD卡控制器才能回到状态4继续读取数据,这个分支主要是应用于SD卡控制器写卡速度快于基带芯片写DMA存储器的情况;若dma_cnt不等于dma_in_cnt,则DMA状态机将检查dma_req信号的极性,如其为 1,状态机将转至状态4读取下一个32位数据,如为0则意味着此时SD卡控制器写卡的速度要慢于DMA读数据的速度,其前面通过DMA接口读出的数据还没有完全写入SD卡,所以SD卡控制器将暂停从DMA存储器中读取数据,DMA控制器的状态机也将在状态7处于等待状态,等待dma_req重新为1。当 dma_req再次为1后,状态机将回到状态4开始新的32位数据的DMA读操作。最后,当第5 119和5 120个字节被从DMA存储器读出后,DMA状态机将在状态7中检查到dma_cnt=dma_num,标志至此,DMA状态机完成了一次DMA读操作的全过程。SD卡控制器将向基带芯片发出中断信号,基带芯片响应该中断后将启动下一个读卡或写卡的命令。其读状态流程图如图2所示。

  

读状态流程图

 

  2.2.2 multiple block read

  在该图像协处理器中每次multiple block read要从卡读出10个block数据并将其全部写入DMA存储器当中。当处于初始状态(状态0)的DMA状态机发现dma_req为1且 dma_write信号为1时,即明确SD卡控制器将开始DMA写操作,其将依次进入状态1、状态2、状态3、状态4。在状态1中,DMA状态机会向SD 卡控制器发出dma_ack信号,由于存储器读存在延时,SD卡控制器将在此后的第二个时钟上升沿(即DMA状态机在状态3时)送出dma_wdata。 DMA控制器将dma_wdata暂存一个时钟周期后,会在状态4和状态5中把此32位数据依次写入DMA存储器,dma_memory_addr也将在这两个状态分别加1。在状态7中,DMA控制器也将做2个判断,首先会判断dma_cnt和dma_num是否相等,若相等说明本次 multipleblock read的全部5 120字节数据已经写入DMA存储器中,DMA状态机将回到状态0等待下一次DMA操作指令;若不相等,则判断dma_req是否为1,如果为1则意味着继续做本次DMA写操作,DMA状态机也将回到状态1,开始下一个32位数据的写入;如果dma_req为0则说明SD卡控制器读卡的速度较慢,暂时还没有新的32位数据要写入,DMA状态机也将在状态7处于等待状态,直至dma_req再次为1,状态机才回到状态1,开始写入下一个32位的数据。最后当 DMA控制器在状态7时发现dma_cnt和dma_num相等,意味这本次DMA操作已经完成,SD卡控制器也将向基带芯片发出中断信号,基带芯片响应该中断后将从DMA存储器中读取此5 120字节数据。其写状态流程图如图3所示。

  

写状态流程图
关键字:时序  DMA  控制器 编辑:神话 引用地址:适应多种时序的DMA控制器设计

上一篇:单级倒立摆控制系统的稳定性算法设计
下一篇:MAX5974 有源钳位、电流模式PWM控制器

推荐阅读最新更新时间:2023-10-12 20:37

多域计算和区域控制器研究:五类设计思路齐头并进
佐思汽研发布了《2022年多域计算和区域控制器研究报告》。 随着智能汽车向更高级别的自动驾驶发展,对算力、通讯带宽、软件、安全等方面的要求也越发严格。在这一趋势的推动下,汽车电子电气架构从域集中架构逐步向多域融合,再向(准)中央计算架构演进。目前,汽车多域计算设计思路主要包括以下五种: 多域计算的五类设计思路和案例 来源:佐思汽研《2022年多域计算和区域控制器研究报告》 行泊一体&舱驾合一,多域计算的重要方向 行泊一体方面,过去主要将低速泊车功能融合到座舱域,形成所谓的舱泊一体方案;随着大算力平台演进,2022年无疑是L2+行泊一体发展元年,越来越多的车辆将支持实现打灯自动变道、匝道至匝道自动驾驶、记忆泊车、
[汽车电子]
多域计算和区域<font color='red'>控制器</font>研究:五类设计思路齐头并进
电池供电LED控制器电路介绍
利用MAX 684的关断控制引脚或MAX1916的使能控制引脚可以关闭LED。对于正向电压在3.5~4.2V(在20mA条件下)的白光LED 通常需要升压转换器,可以用电荷泵(如MAX682~MAX 684)与MAX1916共同构成这种LED 的驱动电路,如图1所示。MAX682~MAX 684能够将2.7V的输入电压转换为5.05V输出,输出电流能够分别达到250mA、100mA、50mA。图1电路中,MAX 684在关断模式下,电源电流降至22μA;RSET=43kΩ时,LED电流为22mA。 图2是利用电荷泵构成LED电流控制电路,反馈调节电压的典型值为1.235V,Ipk=1.235/R SENSE,选用24Ω的检流
[电源管理]
电池供电LED<font color='red'>控制器</font>电路介绍
解决通用串行总线(USB)控制器有感叹号
通用串行总线控制器:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备(代码 19 昨天U盘坏了,傻乎乎的从网上随便下了很多U盘量产工具,不知道是哪个牛氓软件,把我的USB驱动弄坏了,TNND,真郁闷,今天搞了一天,感谢中关村博客“彩虹奇迹”的文章,总算是把它弄好了,现贴出于与大家共享! 开始,还以为鼠标坏了,使用了其他的usb设备,都发现不了。然后,认为可能bios的设置问题,禁用了USB设备,重新开机进入bios观察,并没有关闭USB.最后进入系统,在设备管理中发现的usb设备都显示黄色感叹号。USB接口驱动都挂了?重新装主板驱动,通过系统盘引导安装驱动,都无济于事。
[嵌入式]
神舟IV学习笔记-控制器局域网bxCAN(十六)
CAN采用两线通信,简单能实现高波特率通信,是最有前途的现场总线之一。但是CAN的协议较复杂,涉及报文等专业内容。好在STM32的CAN容易上手,通过CAN_Init(CAN1, &CAN_InitStructure);和 CAN_FilterInit(&CAN_FilterInitStructure);配置好CAN, 就可以通过CAN_Transmit(CAN1, &TxMessage);发送和 CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);接收。 上面只是大体的介绍了下STM32的CAN配置,具体的使用可以参考下面附件的CAN代码,包含CAN测试模式,CAN查询,CAN中断三个应用。这里特别
[单片机]
高效率升压型DC-DC控制器— MAX770-MAX773
     在MAX770 - MAX773升压开关控制器提供了一个10mA至1A负载90%的效率。一个独特的电流限制的脉冲频率调制(PFM)控制方案,使这些设备的脉宽调制(PWM)转换器(在重负载的高效率)受益,同时使用更少的电源电流比(与110μA为2mA为PWM变换器10mA左右)。   这些IC使用小的外部元件。其高开关频率(高达300kHz)允许表面贴装高度为5mm和9mm直径磁性。   该MAX770/MAX771/MAX772输入电压从2V至16.5V。5V输出电压预置,(MAX770),12V的(MAX771)和15V(MAX772),他们也可以用两个电阻进行调整。   MAX773的输入电压从3V至16
[电源管理]
高效率升压型DC-DC<font color='red'>控制器</font>— MAX770-MAX773
士兰微电子推出新款电流模式PWM+PFM控制器SD6865
杭州士兰微电子近期推出了应用于AC/DC开关电源的控制芯片SD6865,该芯片内置高压MOSFET及电流模式的PWM+PFM控制回路,具有低功耗、低启动电流和较低的EMI等特点,最高效率可以达到84%以上,输出电压和极限输出功率均可调节,可广泛应用于机顶盒、DVD播放机、电源适配器等整机产品。 SD6865采用了多项自主专利技术,如交错式频率抖动技术,峰值电流补偿技术等。其中交错式频率抖动专利技术可以使得芯片振荡频率不断变化,以减小芯片在某个单一频率的对外辐射,并使振荡频率在一个很小的范围内变动,从而可以有效地降低EMI,简化EMI设计。峰值电流补偿专利技术可以为芯片提供最大功率平衡,此技术还可以在电路初始化后有效地减小芯片
[电源管理]
FM3 32位 微控制器
面对市场上庞大的MCU种族,MCU厂商与ARM合作已不足为奇。随着市场上对Cortex的需求不断增加,更多的客户希望可以采用便利的平台来缩短他们的研发周期,ARM的生态系统能够使开发工具、中间件、驱动器等都很容易获得,所以,有了文章开始的那句话。不过呢,富士通的FM3 MCU系列确实能让我们眼前一亮。尽管富士通算是最早推出Cortex-M3 MCU的厂商之一,但相对抢先一步的其他同业,富士通又是如何做到后来者居上呢?且听我娓娓道来。   众所周知,富士通在中国的机电控制应用方面十分有口碑,最近富士通半导体又热热闹闹的推出了第五波基于ARM® CortexTM-M3处理器内核的32位RISC微控制器的FM3系列新产品。这第五波
[模拟电子]
FM3 32位 微<font color='red'>控制器</font>
牛津半导体率先推出单芯片USB/内存联合主机控制器
牛津半导体公司日前发布了业界首款支持全速率主机和高速USB外设连接的联合控制器——OXU140CM。作为牛津半导体全新推出的合成型(all-in-one)设备互连解决方案,OXU140CM还支持多种类型的存储接口。OXU140CM全面实现了高性能的设备互连,完全满足大量数据传输和对各类扩展存储的访问,特别适合于在消费电子设备中的应用。 OXU140CM同时支持USB连接和多种类型存储接口,其中包括最新的手持电子设备小型磁盘专用的CE-ATA(Consumer Electronics-Advanced Technology Attachment)接口。OXU140CM还全面支持全速率主机和高速USB外设连接,从而使用户灵活高效
[新品]
小广播
最新模拟电子文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved