要求。 1.1 dma介绍 blackfin处理器用直接存储器访问(dma)在存储器之间或存储器与外设之间传送数据。dma控制器可在存储器和片上外设(外设dma)之间进行数据传送,以及在l1/l2/l3存储器间进行数据传送(存储器dma或mdma)。dma控制器是blackfin处理器架构中的重要组件,完全独立于内核,不会进行周期挪用,完全无需占用处理器内核周期。在理想的应用配置中,内核只需要设置dma控制器,并在数据调用过程中响应中断。 bf561有3个独立的dma控制器dma1,dma2和imdma。dma1和dma2控制器各有12个外设dma通道和4个存储器dma通道。imdma控制器有4个存储器dma通道。 1.2 基于描述符的dma 基于描述符的dma传送需要存储于存储器中的参数来初始化一个dma队列。描述符包括所有需对dma控制寄存器正常编程的参数。描述符允许把多个dma队列链接在一起。在基于描述符的dma操作中,可以对一个dma通道编程,以便在当前传送队列完成后,自动设置和启动其他dma传送过程。在管理一个系统的dma传送过程时,基于描述符的模型能提供最大的灵
控制器是st公司基于cortex-m3内核的高集成度的微控制器。它在性能、价格、功耗和实时性方面树立了一个新的标杆,集成了cortex-m3内核,以及双adc、多用途的通用时钟timx、rtc、i2c、spi、uart、can、dma、usb等丰富的外设。其功耗在全速72mhz所有模块都打开时也仅仅为36 ma,在低功耗模式下其功耗仅为2μa。 2 dma和timx简介 stm32系列微控制器均含有dma和通用时钟timx模块。其低端型号中仅包含dma1,支持7个通道;高端型号还包括dma2,支持5个通道。它的每个通道可任意指定工作模式,如内存到内存、内存到外设或外设到内存等。当涉及到外设时,一般是由外设来触发dma的一次传输,如串口收到数据的标志位可触发dma。 dma的每次传输都分为4个阶段:申请仲裁、地址计算、总线存取和应答。除总线存取阶段,其他3个阶段都只需要一个系统周期,并且不占用总线,可在dma控制器内部并发地执行。总线存取阶段,每个字(4字节)的传输需要3个系统周期。dma和cpu工作在交替方式下,不会相互阻塞。dma各个通道可独立设置优先级,当访问同一资源时高
t。4路信号其32bit;16kbps和32kbps的cvsd是每样点2bit和4bit编码,故规定其码流为每比特编码码字分别重复4次和2次,即均占8bit。4路信号也是32bit。 (4)数据流的传输(串口与存储区) vc5409提供了6个dma通道,用户可以设置每个dma通道的源地址、目的地址、一次传输的数据量、同步事件和中断方式等。 表3是本项目中各dma通道的配置情况。表3 dma配置 通道 比特流 源地址 目的地址 缓冲区(字) 中断方式(缓冲区) dma2 g.729a(收) drr11 dm 4×5×2 全满/半满 dma3 g.729a(发) dm dxr11 4×5×2 全满/半满 dma4 pcm(收) *1 drr10 dm 4×1 全满 *2 drr10 dm 4×80×2 全满/半满 dma5 pcm(发) *1 dm dxr10 4×1 全满 *2 dm dxr10 4×80×2 全满/半满 dm:数据存储区 *1:对adpcm/cvbs
就是说,系统时钟周期在arm7内核和内部10通道的dma控制器之间分享。在这样的设计中,arm内核每得到一个时钟周期,dma也同样得到一个时钟周期,在将总线交回下一个控制者之间,总线主控制者被允许可以突发至4个长字。 下一个较关键的性能是时钟速度。net+arm通常使用33mhz的时钟。这样就给它的处理时间差据周期的单位数,将结果乘上30ns,再将所得结果乘2,就得到了整个系统时钟周期的时间。请注意每一个总线控制者都可以突发至4个字长或16个字节。整个系统周期基本上是arm、dma1、arm、dma2,依次类推。我们看一下dma通道1(以太网接收通道),可以简单地将每个系统周期移动16个字节转换成每秒多少兆字节。 除了flash,附加的nvram有时会被忽略。许多rtos广商推荐使用一些如eeprom的小型nvram设备来存储配置信息。为了增强易用性,netsilicon推荐用eeprom来保存如mac地址、序列号、ip地址一类的设备配置。当产品的ip地址或配置设定被改动时,程序可以简单地将新的值写到eeprom中,而不需要保存配置信息的flash的该扇区重新擦写。由于需要的eeprom的
关于查询和中断,我的看法。一般情况下,发送用查询方式好过中断方式。除非1)有dma2)cpu疯狂的快。否则最好用查询方式发送。 * - 本贴最后修改时间:2006-6-15 21:40:43 修改者:high
d channel\n", dma_sample); return retval;}运行如下:(两次,分别对1和2通道)hhbf531>-# insmod dsp.kosample_dma: could not allocate dma1 channelhhbf531>-# rmmod dsp.kocleanup sample module devicehhbf531>-# insmod dsp.kosample_dma: could not allocate dma2 channelhhbf531>-# rmmod dsp.kocleanup sample module devicehhbf531>-#是什么原因?急!