Symbian OS的硬件——直接存储器访问(DMA)

DMASymbian OS用来减轻高带宽存储器到外设的数据传输上的负担,从而允许CPU去执行其他的任务。对于给定的外设,DMA可以减少1%的中断负担,节省电源并增加了外设接口的实时健壮性。

在第十三章,外设支持,将描述支持DMAEKA2软件框架是怎样和不同的DMA硬件及设备驱动一起被使用的。

DMA引擎是总线管理者外设,它可以被编程以在外设和存储器之间移动大量的数据,并且不需要CPU的干涉。

多通道DMA引擎可以一次处理一个以上的数据传输。有多少个需要DMA的外设端口,Symbian电话的SoC就应该有多少个通道,一个额外的以支持存储器到存储器的数据拷贝的通道也是有用的。

DMA通道传输可以通过对控制寄存器进行编程来启动,控制寄存器带有设定命令、传输大小、目标RAM的物理地址和先入先出外设等信息。传输的数据将是由外设接口控制的硬件数据流,而外设总是慢于系统RAM

在从存储器到外设的传输中,DMA引擎会一直等待,直到外设发出已准备好接收数据的信号。引擎随后将往DMA内部缓冲读进一批数据,通常是81632字节,然后再把数据写入到先入先出外设。在一批数据全部传输完成之后,会产生一个完成中断,通道则将增加读地址以为下一批数据传输做好准备。

在每次传输的最后产生中断的DMA引擎是单缓冲的。CPU必须处理这个中断,并在有数据溢出之前把下一个DMA传输进行重新排队。音频接口有一个由它的FIFO深度和功耗率决定的实时响应窗口。DMA 中断服务程序(ISR)必须在这个时间内完成,以避免数据下溢。比如,对于16位立体声音频,这个时间可能是160μs.

引擎可以在多个通道寄存器之间进行切换,在当前的传输正在进行的时候,通过这些通道寄存器的一个复制装置,双缓冲DMA引擎允许框架排队等候下一个传输。双缓冲使实时响应窗口的时间增加到和一次完整传输的持续期一样长,比如,对于一个4KB的音频传输缓冲,时间大约是20ms.

集散(scatter-gather)DMA引擎增加了另一个精巧并具有可编程性的层。DMA命令列表被汇编进RAM里,随后通道通过把第一个命令加载进引擎获知去处理这个表。在每个传输的末尾,DMA引擎将加载下一个命令——直到它处理完了所有的命令。当DMA在处理的时候,新的命令可能被添加或更新进列表里,所有理论上我们的音频传输的模型是永远不应该停止运行的。

集散引擎有利于把数据传输进RAM由页表(fragmented pages)组成的虚拟存储器系统里。也有利于复杂的外设交互,在这些交互里,需要通过读寄存器把读数据的操作分散开。NAND控制器要求512字节的数据,以及随后的16字节元数据和为每个进入的块读取ECC寄存器。

通过使用DMA,节省了电量,因为CPU在传输数据期间可以是空闲的,DMA操作不要求中断或指令以传输数据,而且DMA引擎可以根据外设和存储器系统的性能特性进行调节。

 =====================================================================================

说明: 本文由Bequan翻译自Symbian Press的Symbian OS Internals: Real-time Kernal Programming一书。任何人需要转载或引用,请先通过Email(a-pangu@163.comsymbianchn@gmail.com)与Bequan联系,在获得许可后方可转载或引用,否则视为侵权行为。转载或引用时,请在文章中注明上述翻译信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值