直接存储器存取
7.3 CPU与外设之间的数据传送方式

(3)连续方式 )
连续操作方式是指在数据块传送的整个过程中, 连续操作方式是指在数据块传送的整个过程中,不 请求是否撤消, 控制器始终控制着总线。 管DMA请求是否撤消,DMA控制器始终控制着总线。 请求是否撤消 控制器始终控制着总线 除非传送结束或检索到“匹配字节” 除非传送结束或检索到“匹配字节”,才把总线控制 权交回CPU。在传送过程中,当DMA请求失效时, 请求失效时, 权交回 。在传送过程中, 请求失效时 DMA控制器将等待它变为有效,却并不释放总线。 控制器将等待它变为有效, 控制器将等待它变为有效 却并不释放总线。
返 回
例
如图7-3-6所示,试编程实现将48000H 所示,试编程实现将 如图 所示 为首地址的顺序100个单元的数据,利用 个单元的数据, 为首地址的顺序 个单元的数据 查询方式输出到外设。 查询方式输出到外设。
程序如下: 程序如下: START: MOV AX, 4000H MOV DS, AX MOV SI, 8000H MOV CX, 100 GOON: MOV DX, 00F1H WAIT: IN AL, DX AND AL, 01H JZ WAIT MOV AL, [SI] MOV DX, 00F0H OUT DX, AL INC SI LOOP GOON RET
返 回
DMA控制器从CPU完全接管对总线的控制, DMA控制器从CPU完全接管对总线的控制,数据 控制器从CPU完全接管对总线的控制 交换不经过CPU 而直接在内存和I/O CPU, I/O设备之间 交换不经过CPU,而直接在内存和I/O设备之间 进行。 进行。 优点:传送速率很高, 优点:传送速率很高,这对高速度大批量数据传 送特别有用。 送特别有用。 缺点:要求设置DMA控制器,电路结构复杂, 缺点:要求设置DMA控制器,电路结构复杂,硬 DMA控制器 件开销大
计算机三级嵌入式试题题库

一单项选择题1. 世界上第一台计算机研制成功的年代是( C )Α.1944年B.1945年C.1946年D.1947年2. 十进制数235,用二进制表达为( A )Α.11101011B.11101010C.11101001D.111011103. ARM采用定长指令格式,所有指令都是32位,Bit[31:28]为( B )Α.目标寄存器编码B.条件执行C.指令操作符编码D.永远是04. 8080处理器是( C )Α.32位处理器B.16位处理器C.8位处理器D.4位处理器5. 把微处理器与外部设备相连接的线路称为( D )Α.电源线B.控制线C.数据线D.总线6. 嵌入式软件开发构建阶段的第一步是( A )Α.编译B.链接C.定址D.打包7. 以下有关进程和程序的说法错误的是( D )Α.进程是动态的B.程序是静态的C.一个程序可以对应多个进程D.程序就是进程8. 微软开发的嵌入式操作系统是( C )Α.RT-LinuxB.MontaVistaC.Windows CED.VxWorks9. ROM监视器是一个小程序,驻留在嵌入式系统的( B )Α.RAM中B.ROM中C.Flash中D.DOM中10.直接存储器存取的英文缩写是( A )Α.DMAB.DRAMC.ISAD.IRQ11. 以下不是嵌入式系统应用领域的是( C )Α.移动电话B.汽车电子C.办公系统D.军工航天12. 十进制数235,用八进制表达为( C )Α.351B.352C.353D.35413. ARM采用定长指令格式,所有指令都是32位,Bit[27:26]为( C )Α.目标寄存器编码B.指令操作符编码C.永远是0D.条件执行14. 80286处理器是( B )Α.32位处理器B.16位处理器C.8位处理器D.4位处理器15. 厂家和用户为性能扩充或作为特殊要求使用的信号线称为( A )Α.备用线B.控制线C.数据线D.总线16. 嵌入式软件开发构建阶段的第二步是( B )Α.编译B.链接C.定址D.打包17. 以下有关进程和程序的说法错误的是( B )Α.进程是动态的B.一个进程可以对应多个程序C.一个程序可以对应多个进程D.程序不是进程18. WindRiver公司开发的嵌入式操作系统是( A )Α.VxWorksB.MontaVistaC.Windows CED.RT-Linux19. GDB中,用来设置断点的命令是( D )Α.killB.nextC.makeD.break20.1Byte等于( D )Α.1024KBB.1024KMC.1024GBD.8bit21. 以下不是嵌入式系统应用领域的是( A )Α.电子商务B.移动电话C.消费类电子产品D.军工航天22. 十进制数235,用十六进制表达为( A )Α.EBB.ECC.EAD.EE23. ARM采用定长指令格式,所有指令都是32位,Bit[24:21]为( C )Α.目标寄存器编码B.条件执行C.指令操作符编码D.永远是024. 80386处理器是( C )Α.8位处理器B.16位处理器C.32位处理器D.64位处理器25. 决定电源种类的线称为( C )Α.备用线B.控制线C.电源线D.数据线26. 嵌入式软件开发构建阶段的第三步是( B )Α.编译B.定址C.打包D.定址和打包27. 以下有关进程和程序的说法正确的是( C )Α.进程是静态的B.一个进程可以对应多个程序C.一个程序只能对应一个进程D.程序不是进程28. 以下不是嵌入式操作系统的是( A )Α.U-BootB.MontaVistaC.Windows CED.RT-Linux29. GDB中,用来显示源代码的命令是( B )Α.killB.listC.makeD.break30.1KB等于( B )Α.1024MBB.1024BC.1024GBD.8bit31. 以下不是嵌入式系统应用领域的是( A )Α.通用软件B.工业控制C.消费类电子产品D.机器人32. 十进制数100,用十六进制表达为( C )Α.62B.63C.64D.6533. ARM采用定长指令格式,所有指令都是32位,Bit[24:21]为( B )Α.目标寄存器编码B.操作符编码C.第一个操作数寄存器D.永远是034. 80486处理器是( B )Α.64位处理器B.32位处理器C.16位处理器D.8位处理器35. 决定地线分别方式的线称为( D )Α.备用线B.控制线C.电源线D.地线36. 打包结束后得到的是一个( A )Α.二进制文件B.文本文件C.源文件D.汇编文件37. 以下有关进程和程序的说法正确的是( ABC )Α.进程是动态B.程序是静态的C.一个程序可以对应多个进程D.一个进程可以对应多个程序38. 以下是嵌入式操作系统的是( D )Α.U-BootB.VM WareC.EVCD.Windows CE39. GDB中,用来删除断点的命令是( B )Α.killB.clearC.makeD.break40.1MB等于( C )Α.1024BB.1024GBC.1024KBD.8bit41. 以下属于嵌入式系统应用领域的是( D )Α.移动电话B.工业控制C.机器人D.以上都是42. 十进制数100,用八进制表达为( A )Α.144B.145C.146D.14743. ARM采用定长指令格式,所有指令都是32位,Bit[20]为( C )Α.目标寄存器编码B.第一个操作数寄存器C.指示本指令操作是否影响CPSR的值D.永远是044. EMU只指( A )Α.嵌入式微控制器B.嵌入式微处理器C.嵌入式数字信号处理器D.嵌入式片上系统45. 不能确定总线功能的强弱以及适应性的是( D )Α.控制线B.时序信号线C.中断信号线D.地线46. 以下不是选择嵌入式系统编程语言的衡量标准的是( B )Α.位操作B.价格C.指针D.异常事件处理47. 以下不是线程的优点的选项是( D )Α.响应度高B.资源共享C.经济D.单处理器使用48. 以下是嵌入式操作系统的是( B )Α.VIVIB.RT-LinuxC.EVCD.VM Ware49. GDB中,执行下条源代码的命令是( D )Α.nextB.clearC.makeD.go50.1GB等于( C )Α.8bitB.1024BC.1024MBD.1024KB51. 以下不属于嵌入式系统应用领域的是( D )Α.消费类电子产品B.工业控制C.军工航天D.办公系统52. 十进制数100,用二进制表达为( D )Α.1100111B.1100010C.1100101D.110010053. ARM采用定长指令格式,所有指令都是32位,Bit[19:16]为( D )Α.目标寄存器编码B.永远是0C.指示本指令操作是否影响CPSR的值D.第一个操作数寄存器54. EMPU只指( B )Α.嵌入式微控制器B.嵌入式微处理器C.嵌入式数字信号处理器D.嵌入式片上系统55. 能确定总线功能的强弱以及适应性的是( C )Α.备用线B.地线C.中断信号线D.数据线56. 以下不是选择嵌入式系统编程语言的衡量标准的是( A )Α.以下都不是B.多任务支持C.程序控制结构D.异常事件处理57. 以下说法错误的是( B )Α.线程响应度高B.程序是动态的C.程序不是进程D.进程是动态的58. 以下不是Boot Loader的是( C )Α.VIVIB.U-BootC.RT-LinuxD.BLOB59. GDB中,显示帮助信息的命令是( B )Α.showB.helpC.seeD.browse60.1TB等于( C )Α.1024BB.1024KBC.1024GBD.1024MB61. 世界上第一台计算机诞生在( B )Α.英国B.美国C.法国D.苏联62. 十进制数123,用十六进制表达为( C )Α.70B.7AC.7BD.7C63. ARM采用定长指令格式,所有指令都是32位,Bit[15:11]为( B )Α.第一个操作数寄存器B.目标寄存器编码C.指示本指令操作是否影响CPSR的值D.永远是064. EDSP只指( B )Α.嵌入式微控制器B.嵌入式数字信号处理器器C.嵌入式微处理D.嵌入式片上系统65. 能确定数据传输的宽度的是( A )Α.数据线B.时序信号线C.中断信号线D.电源线66. 以下是选择嵌入式系统编程语言的衡量标准的是( D )Α.异常事件处理B.多任务支持C.程序控制结构D.以上都是67. 以下说法正确的是( A )Α.线程响应度高B.程序是动态的C.程序就是进程D.进程是静态的68. 以下是嵌入式系统的是( D )Α.VIVIB.U-BootC.BLOBD.RT-Linux69. GDB中,显示表达式的值使用命令( A )Α.displayB.showD.list70.1024KB等于( C )Α.1TBB.1BC.1MBD.1GB71. 单片出现在20世纪( A )Α.70年代B.80年代C.90年代D.60年代72. 十进制数123,用二进制表达为( C )Α.1111101B.1111100C.1111011D.111101073. ARM采用定长指令格式,所有指令都是( B )Α.64位B.32位C.16位D.8位74. 以下说法错误的是( D )Α.寄存器的速度最快B.寄存器容量最小C.一般用来存储计算的操作数和结果D.寄存器位于处理器外部75. 不能决定总线功能的强弱以及适应性的信号线是( C )Α.控制信号线B.时序信号线C.中断信号线D.备用信号线76. 在做低功耗优化时,以下说法错误的是( A )Α.采用什么算法与降低功耗无关B.在采集系统中应尽量降低采集速率C.在通讯模块中应尽量提高传输的波特率D.CPU的工作时间与降低功耗有关77. 以下说法错误的是( A )Α.程序就是进程B.程序是静态的C.线程响应度高D.进程是动态的78. 以下不是引导程序的是( D )Α.VIVIB.U-BootC.BLOBD.RT-Linux79. GDB中,终止被调试的程序可以使用命令( B )Α.clearB.killC.stopD.make80.1024MB等于( B )Α.1TBB.1GBC.1KBD.1B二填空题1.嵌入式系统的嵌入性特性,是指系统需要与物理世界中特定的环境和设备紧密结合。
直接存储器存取(DirectMemoryAccess,DMA)详细讲解

直接存储器存取(DirectMemoryAccess,DMA)详细讲解⼀、理论理解部分。
1、直接存储器存取(DMA)⽤来提供在外设和存储器之间或者存储器和存储器之间的⾼速数据传输。
2、⽆须CPU⼲预,数据可以通过DMA快速移动,这就节省了CPU的资源来做其他操作。
3、两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门⽤来管理来⾃⼀个或者多个外设对存储器访问的请求。
4、还有⼀个冲裁器协调各个DMA请求的优先权。
在同⼀个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很⾼、⾼、中和低),优先权设置相等时由硬件决定(请求0优先请求1,)5、每个通道都有三个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这三个事件标志逻辑或成为⼀个单独的中断请求。
6、闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和⽬标。
7、可编程的数据传输数⽬:最⼤为655358、如果外设要想通过DMA 来传输数据,必须先给DMA 控制器发送DMA 请求,DMA 收到请求信号之后,控制器会给外设⼀个应答信号,当外设应答后且DMA 控制器收到应答信号之后,就会启动DMA 的传输,直到传输完毕。
DMA 有DMA1 和DMA2 两个控制器,DMA1 有7个通道,DMA2有5 个通道,不同的DMA 控制器的通道对应着不同的外设请求,这决定了我们在软件编程上该怎么设置,具体见DMA 请求映像表。
9、仲裁器当发⽣多个DMA 通道请求时,就意味着有先后响应处理的顺序问题,这个就由仲裁器也管理。
仲裁器管理DMA 通道请求分为两个阶段。
第⼀阶段属于软件阶段,可以在DMA_CCRx 寄存器中设置,有4 个等级:⾮常⾼、⾼、中和低四个优先级。
第⼆阶段属于硬件阶段,如果两个或以上的DMA通道请求设置的优先级⼀样,则他们优先级取决于通道编号,编号越低优先权越⾼,⽐如通道0 ⾼于通道1。
机电一体化试题(卷)与答案汇总

目录机电一体化复习题2机电一体化复习题参考答案6机电一体化技术试题11答案与评分标准13机电一体化复习题18一、名词解释18二、填空题19三、简答题20四、选择题。
〔无答案〕23五、应用题24《机电一体化技术》试卷〔一〕27《机电一体化技术》试卷 (一)答案29《机电一体化技术》试卷 (二)30《机电一体化技术》试卷(二) 答案33《机电一体化技术》试卷 (三)35《机电一体化技术》试卷 (三)答案38《机电一体化技术》试卷 (四)40《机电一体化技术》试卷 (四) 答案42《机电一体化技术》试卷 (五)45《机电一体化技术》试卷 (五) 答案47机电一体化系统设计试题51一、填空题〔每空1分,共20分〕51二、简答题〔每题5分,共30分〕51三、计算题〔共20分〕〔将此题答案写在答题纸上〕52四、综合分析题〔共30分〕52机电一体化系统设计试题答案53一、填空题〔每空1分,共20分〕53二、简答〔每题5分,共30分〕53三、计算题〔共20分〕54四、综合分析题〔30分〕54机电一体化复习题一、名词解释1机电一体化 2伺服控制 3闭环控制系统 4逆变器 5 SPWM 6单片机 7 I/O接口8 I/O通道 9 串行通信 10直接存储器存取〔DMA〕二、判断题:1 在计算机接口技术中I/O通道就是I/O接口。
〔×〕2 滚珠丝杆不能自锁。
〔√〕3 无论采用何种控制方案,系统的控制精度总是高于检测装置的精度。
〔×〕4 异步通信是以字符为传输信息单位。
〔√〕5 同步通信常用于并行通信。
〔×〕6 无条件I/O方式常用于中断控制中。
〔×〕7从影响螺旋传动的因素看,判断下述观点的正确或错误〔1〕影响传动精度的主要是螺距误差、中径误差、牙型半角误差〔√〕〔2〕螺杆轴向窜动误差是影响传动精度的因素〔√〕〔3〕螺杆轴线方向与移动件的运动方向不平行而形成的误差是影响传动精度的因素〔√〕〔4〕温度误差是影响传动精度的因素〔√〕三、单项选择题1. 步进电动机,又称电脉冲马达,是通过〔 B 〕决定转角位移的一种伺服电动机。
计算机组成原理

③全互锁方式
t2、t4均限定。
保证了数据传输的正确性。
3、常用的标准总线
(1)ISA总线
ISA为工业标准总线,是IBM公 司为其生产的PC系列微机制定的总线 标准。
ISA-8总线(即XT总线)属8位总 线,适用于CPU为8088的IBM/XT, 包括数据总线8位,地址线20位,可 接受6路中断请求,3路DMA请求。
ISA-16总线(即AT总线)属16 位总线,适用于CPU为80286的 IBM/AT,包括数据总线16位,地 址线24位,可接受16路中断请求, 7路DMA请求。 ISA总线的总线时钟频率为 8.33MHZ,最大传输率为5MB/S。
(2)EISA总线
EISA总线为扩充工业标准总线。
EISA总线为32位总线,与ISA总线兼 容,总线插槽分为两段,较浅的部分为原 ISA总线信号,较深的部分是EISA信号, 插槽上有一个卡口使ISA的板卡不能进入较 深的部分。 EISA总线在ISA总线的基础上增加了 数据宽度和地址空间,具有共享DMA,总 线传输方式增加了块DMA方式、淬发传输 方式,支持多个主模块,支持中断共享。
常见的双向异步通信方式有非互锁 方式、半互锁方式和全互锁方式三种。
①非互锁方式
请求信号与回答信号互不连锁。
t2与t4未作限定。
该方式可以判断数据是否正确地传 送到对方,但两次总线传输的延迟t3+t5 和请求信号的宽度t2、回答信号的宽度 t4之间的配合是一个难以处理的问题, 原因为:
A、如t2过窄,在远距离的两个部件通 信时会出现边缘畸变而产生错误。 B、如t2过宽,在近距离的两个部件通 信时会出现t2﹥t3+t5,导致请求信号与 下一次数据传输相重叠而产生错误。
①外设本身的工作已经完成 中断触发器发出中断请求
微型计算机原理及应用试题及答案

填空1.微型计算机是指以微处理器为核心,配上存储器、输入输出接口电路及系统总线所组成的计算机。
2.微处理器是由一片或几片大规模集成电路组成的具有运算器和控制器功能的部件。
3.8086CPU从功能上讲,其内部结构分为_执行单元_和_总线接口单元_两大部分。
4.1KB=1024 字节,1MB=1024 KB,1GB=1024 MB。
5.带符号数有原码、反码和补码三种表示方法,目前计算机中带符号数都采用补码形式表示。
6.(101110.11)2=(46.75)10=(2E.C)167.已知[ X]补=81H,则X= -127 。
(已知补码如何求真值?)8.假设二进制数A=10000110,试回答下列问题:1)若将A看成无符号数则相应的十进制数是_134_。
2)若将A看成有符号数则相应的十进制数是_-122_。
(带符号数都采用补码形式表示,已知补码如何求真值?。
)3)若将A看成BCD码则相应的十进制数是_86_。
9.从_奇_地址开始的字称为“非规则字”,访问“非规则字”需_两_个总线周期。
10.8086CPU数据总线是_16_位,对规则字的存取可在一个总线周期完成,对非规则字的存取则需要两个总线周期。
11.8086CPU的地址总线有20 位,可直接寻址1M B的存储空间。
12.若DS=6100H,则当前数据段的起始地址为 61000H ,末地址为 70FFFFH 。
13.动态存储器是靠电容来存储信息的,所以对存储器中所存储的信息必须每隔几毫秒刷新一次。
14.8086 CPU复位后,执行的第一条指令的物理地址是FFFF0H 。
15.8086CPU系统的逻辑地址由段地址和偏移地址组成,物理地址的求法是段地址左移4位+偏移地址。
16.堆栈是以_先进后出_的原则存取信息的一个特定存贮区。
8086的堆栈可在1MB 存贮空间内设定,由堆栈段寄存器 SS 和堆栈指针 SP 来定位。
堆栈操作是以字为单位。
17.转移指令分为条件转移指令和无条件转移指令,条件转移指令的转移目的地址只能是短标号,即转移范围不能超过_-128~+127_字节。
(计算机原理会考试题库)

《计算机组成与工作原理》试题库教材《计算机组成与工作原理》电子工业出版社刘晓川主编一、选择题[0102A] 1、计算机直接存储器存取传送方式就是()。
A、程序查询方式B、中断处理方式C、DMA传送方式D、I/O通道控制方式[0302B] 2、下列存储器中,读出数据传输率最高的是()。
A、DRAMB、SRAMC、EPROMD、EEPROM[0101A] 3、以下不属于微机主机箱内接口或部件的是()。
A、IDE接口B、AGP显卡接口C、内存条D、鼠标[0202C] 4、当[x]反=1.1111时,对应的真值是()。
A、-0B、-15/16C、-1/16D、-6/16[0302A]5、1GB=()字节。
A、210B、220C、230D、240[0302B]6、一个512KB的存储器,其地址线和数据线的总和是()。
A、17B、19C、27D、37[0302C]7、某计算机字长是32位,它的存储容量是64KB,按字编址,它的寻址范围是()。
A、16KBB、16KC、32KD、32KB[0303A]8、所谓三总线结构的计算机是指()。
A、地址线、数据线和控制线三组传输线B、I/O总线、主存总线和DMA总线三组传输线C、I/O总线、主存总线和系统总线三组传输线D、地址线、主存总线和系统总线三组传输线[0302A]9、下列( )是正确的。
A、1KB=1024×1024BB、1KB=1024MBC、1MB=1024×1024BD、1MB=1024B[0301A]10、存放欲执行指令的寄存器是( )。
A、MARB、PCC、MDRD、IR[0102A]11、在下列设备中,属于图形输入设备的是()。
A、键盘B、条形码阅读机C、数字化仪D、显示器[0201B]12、以下不可能是八进制数的是()。
A、10B、24C、38D、67[0201C]13、在定点二进制运算器中,减法运算一般通过()来实现。
A、原码运算的二进制减法器B、补码运算的二进制减法器C、补码运算的十进制加发器D、补码运算的二进制加法器[0302B]14、在程序执行过程中,常需要将信息写入主存,通常有两种写法()。
微机原理考试题目及知识点整理

填空题知识点整理1.CPU的读写操作、微处理器的性能指标:参考填空题6、7、8。
2.中断响应中两个总线周期。
p160主要是对于时序图的理解,熟悉书中160页内容,理解两个总线周期的作用。
第一个周期8259A收到外设的中断请求(IR0~IR7),分析请求并向CPU请求中断(INT),CPU做出响应(INTA*),锁住总线(LOCK*),8259A在级联方式时选择从片(CAS0~CAS2,输出被响应中断的从8259A 的编码);第二个周期CPU发出第二个响应(INTA*),8259A把中断向量号送上数据总线(D0~D7),CPU利用向量号执行中断程序。
主要理解其中“4)8259A收到第一个INTA有效信号后,使最高优先权的ISR置位,对应的IRR复位”即进入中断服务状态,“5)8259A在收到第二个INTA有效时,把中断向量号送上数据总线,供CPU读取”即让CPU处理中断。
补充:关于中断还可能会考查关于中断级联的问答题,要求画出连接:3.三大总线,DB和AB决定什么。
p7微机三大总线包括地址总线、数据总线和控制总线,是微处理器与存储器与I/O接口之间信息传输的通路。
地址总线(AB):由微处理器向外设的单向总线,用以传输微处理器将要访问的外设的地址信息。
地址线的数量决定了系统直接寻址空间的大小。
数据总线(DB):微处理器与外设间数据传输线,为双向总线。
读操作时,外设将数据输入微处理器,写操作时,微处理器将数据输出外设。
数据线的数量决定了一次可传输数据的位数。
控制总线(CB):双向总线,用于协调系统中个部件的操作,有些信号线将微处理器的控制信号或状态信号送往外界,有些信号线将外界的请求或联络信号送往微处理器。
控制总线决定总线功能强弱与适应性的好坏。
4.DMA及相关。
其传送过程涉及的信号。
p140、p151、p189~p193直接存储器存取DMA是一种外设与存储器之间直接传输数据的方法,适用于需要数据高速大量传送的场合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
直接存储器存取—基本原理、结构与应用(上)上网时间: 2007年06月14日直接存储器存取(DMA) 控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储器与每个具有DMA能力的外设连接起来的控制器。
它之所以属于外设,是因为它是在处理器的编程控制下来执行传输的。
值得注意的是,通常只有数据流量较大(kBps或者更高)的外设才需要支持DMA能力,这些应用方面典型的例子包括视频、音频和网络接口。
一般而言,DMA控制器将包括一条地址总线、一条数据总线和控制寄存器。
高效率的DMA控制器将具有访问其所需要的任意资源的能力,而无须处理器本身的介入,它必须能产生中断。
最后,它必须能在控制器内部计算出地址。
一个处理器可以包含多个DMA控制器。
每个控制器有多个DMA通道,以及多条直接与存储器站(memory bank)和外设连接的总线,如图1所示。
在很多高性能处理器中集成了两种类型的DMA控制器。
第一类通常称为“系统DMA控制器”,可以实现对任何资源 (外设和存储器)的访问,对于这种类型的控制器来说,信号周期数是以系统时钟(SCLK)来计数的,以ADI的Blackfin处理器为例,频率最高可达133MHz。
第二类称为内部存储器DMA控制器(IMDMA),专门用于内部存储器所处位置之间的相互存取操作。
因为存取都发生在内部 (L1-L1、L1-L2,或者L2-L2),周期数的计数则以内核时钟(CCLK)为基准来进行,该时钟的速度可以超过600MHz。
每个DMA控制器有一组FIFO,起到DMA子系统和外设或存储器之间的缓冲器的作用。
对于MemDMA(Memory DMA)来说,传输的源端和目标端都有一组FIFO存在。
当资源紧张而不能完成数据传输的话,则FIFO可以提供数据的暂存区,从而提高性能。
因为你通常会在代码初始化过程中对DMA控制器进行配置,内核就只需要在数据传输完成后对中断做出响应即可。
你可以对DMA控制进行编程,让其与内核并行地移动数据,而同时让内核执行其基本的处理任务—那些应该让它专注完成的工作。
图1:系统和存储器DMA架构。
在一个优化的应用中,内核永远不用参与任何数据的移动,而仅仅对L1存储器中的数据进行读写。
于是,内核不需要等待数据的到来,因为DMA引擎会在内核准备读取数据之前将数据准备好。
图2给出了处理器和DMA控制器间的交互关系。
由处理器完成的操作步骤包括:建立传输,启用中断,生成中断时执行代码。
返回到处理器的中断输入可以用来指示“数据已经准备好,可进行处理”。
图2:DMA控制器。
数据除了往来外设之外,还需要从一个存储器空间转移到另一个空间中。
例如,视频源可以从一个视频端口直接流入L3存储器,因为工作缓冲区规模太大,无法放入到存储器中。
我们并不希望让处理器在每次需要执行计算时都从外部存储读取像素信息,因此为了提高存取的效率,可以用一个存储器到存储器的DMA (MemDMA)来将像素转移到L1或者L2存储器中。
到目前为之,我们还仅专注于数据的移动,但是DMA的传送能力并不总是用来移动数据。
我们可以用代码覆盖的办法来提高性能,将DMA的控制器配置为在执行前把代码送入L1指令存储器。
代码往往存储于较大的外部存储器中,而根据需要有选择性的送入L1。
DMA控制器的编程让我们考察一下在定义DMA活动的过程中可以有哪些选项。
我们将从最简单的模型开始,并在此基础上过渡到更为灵活的模型,这反过来增加了设置的复杂度。
对于任何类型的DMA传输,我们都需要规定数据的起始源和目标地址。
对于外设DMA的情况来说,外设的FIFO可以作为数据源或者目标端。
当外设作为源端时,某个存储器的位置(内部或外部)则成为目标端地址。
当外设作为目标端,存储的位置(内部或者外部)则成为源端地址。
在最简单的MemDMA情况中,我们需要告诉DMA控制器源端地址、目标端地址和待传送的字的个数。
采用外设DMA的情况下,我们规定数据的源端或者目标端,具体则取决于传输的方向。
每次传输的字的大小可以是8、16或者12位。
这种类型的事务代表了简单的1维(“1D”)统一“跨度” (unity stride)的传输。
作为这一传输机制的一部分,DMA控制器连续跟踪不断增加的源端和目标端地址。
采用这种传输方式时,8位的传输产生1字节的地址增量,而16位传输产生的增量为2字节,32位传输则产生4字节的增量。
上面的参数是基本的1D DMA 传输的设置参数。
我们只需要改变数据传输每次的数据大小,就可以简单地增加一维DMA的灵活性。
例如,采用非单一大小的传输方式时,我们以传输数据块的大小的倍数来作为地址增量。
也就是说,若规定32位的传输和4个采样的跨度,则每次传输结束后,地址的增量为16字节(4个32位字)。
虽然1D DMA得到了广泛的应用,但用处更大的则是2维(2D) DMA,特别是在视频应用中。
2D功能是我们所讨论的1D DMA的情形的一种直接扩展。
除了XCOUNT 和XMODIFY值之外,我们还需对对应的YCOUNT和YMODIFY值进行编程设定。
2D DMA 可以简单地理解为一个嵌套的循环,即内循环由XCOUNT和XMODIFY来规定,外循环由YCOUNT和YMODIFY规定。
一个1D DMA可以被简单的视为2D传输的“内循环”,如下形式:for y = 1 to YCOUNT /* 2D的外循环*/for x = 1 to XCOUNT /* 1D的内循环 */{/* 传输循环主体转移到这里 */}XMODIFY决定了XCOUNT每次减少时的DMA控制器的跨度值,而YMODIFY则决定了YCOUNT每次减少时对应的跨度值。
与 XCOUNT和XMODIFY一样,YOUNT可以以传输数量来定义,而YMODIFY则以字节数来定义。
值得注意的是,YMODIFY可以为负值,这会让DMA控制器回转到缓冲器的起始点。
对于外设DMA来说,传输的“存储器端”可以是1D或2D。
不过,在外设端,传输始终是1D的。
唯一的限制是在DMA每一端(源端和目标端)传输的字节总数必须相同。
例如,如果我们从3个10字节的缓冲器向外设馈入数据。
例如,如果我们从3个10字节的缓冲器向外设发送数据,外设必须被设定为传送30字节,具体方式则可以是任何可能的、所支持的传输宽度和传输计数值的组合。
MemDMA提供的灵活度则要更高一些。
例如,如果我们可以建立一个1D-2D传输、一个1D-2D传输、1个2D-1D传输,且可自然而然建立一个2D-2D传输,唯一的限制条件是,在DMA传输模块的两端所传送的字节总数必须相等。
DMA的设置目前有两类主要的DMA传输结构:寄存器模式和描述符模式。
无论属于哪一类DMA,表1所描述的几类信息都会在DMA控制器中出现。
当 DMA以寄存器模式工作时,DMA控制器只是简单地利用寄存器中所存储的参数值。
在描述符模式中,DMA控制器在存储器中查找自己的配置参数。
表1:DMA寄存器基于寄存器的DMA在基于寄存器的DMA内部,处理器直接对DMA控制寄存器进行编程,来启动传输。
基于寄存器的DMA提供了最佳的DMA控制器性能,因为寄存器并不需要不断地从存储器中的描述符上载入数据,而内核也不需要保持描述符。
基于寄存器的DMA由两种子模式组成:自动缓冲(Autobuffer)模式和停止模式。
在自动缓冲DMA中,当一个传输块传输完毕,控制寄存器就自动重新载入其最初的设定值,同一个DMA进程重新启动,开销为零。
正如我们在图3中所看到的那样,如果将一个自动缓冲DMA设定为从外设传输一定数量的字到L1数据存储器的缓冲器上,则DMA控制器将会在最后一个字传输完成的时刻就迅速重新载入初始的参数。
这构成了一个“循环缓冲器”,因为当一个量值被写入到缓冲器的最后一个位置上时,下一个值将被写入到缓冲器的第一个位置上。
图3:用DMA实现循环缓冲器。
自动缓冲DMA特别适合于对性能敏感的、存在持续数据流的应用。
DMA控制器可以在独立于处理器其他活动的情况下读入数据流,然后在每次传输结束时,向内核发出中断。
虽然有可能以恰当的方式阻止自动缓冲模式,但如果DMA进程需要定期启动和停止时,采用这种工作方式就没有什么意义。
停止模式的工作方式与自动缓冲DMA类似,区别在于各寄存器在DMA结束后不会重新载入,因此整个DMA传输只发生一次。
停止模式对于基于某种事件的一次性传输来说十分有用。
例如,非定期地将数据块从一个位置转移到另一个位置。
当你需要对事件进行同步时,这种模式也非常有用。
例如,如果一个任务必须在下一次传输前完成的话,则停止模式可以确保各事件发生的先后顺序。
此外,停止模式对于缓冲器的初始化来说非常有用。
描述符模型基于描述符(descriptor)的DMA要求在存储器中存入一组参数,以启动DMA的系列操作。
该描述符所包含的参数与那些通常通过编程写入DMA控制寄存器组的所有参数相同。
不过,描述符还可以容许多个DMA操作序列串在一起。
在基于描述符的DMA操作中,我们可以对一个DMA通道进行编程,在当前的操作序列完成后,自动设置并启动另一次DMA传输。
基于描述符的方式为管理系统中的DMA 传输提供了最大的灵活性。
ADI 的Blackfin处理器上有两种主要的描述符方式—描述符阵列和描述符列表,这两种操作方式所要实现的目标是在灵活性和性能之间实现一种折中平衡。
在描述符阵列模式下,描述符驻留在连续的存储器位置上。
DMA控制器依然从存储器取用描述符,但是因为下一个描述符紧跟着当前的描述符,说明到何处去寻找下一个描述符(以及它们相应的描述符取用)的两个数据字就并不必要。
因为描述符并不包含这一“下一描述符”指针项,DMA控制器希望一组描述符在存储器相互挨在一起,如同阵列一般。
当各描述符在存储器中的分布位置并非“背对背”时,可以使用一个描述符列表。
实际上这里涉及多种子模式,从而再一次实现了性能和灵活性之间的折中平衡。
在“小描述符”模型中,描述符包括了一个单16位的域,用来给出“下一描述符指针”域的低位部分;高位部分则通过寄存器来独立编程设定,并且不发生改变。
当然,这将描述符限制在存储器中一个特定的64K(=216)页面上。
当描述符的位置需要跨越这一边界时,也可以提供一个“大”模型,它可以为“下一描述符指针”项提供32位的位置。
无论采用何种描述符模式,描述符的量值数越多,则描述符取用的次数就越多。
这也就是为何Blackfin处理器定义了一个“柔性描述符方式”的原因,该模式可以修改描述符的长度,使之仅仅包括特定传输所需要的数据。
例如,如果不需要2D DMA,YMODIFY和 YCOUNT 寄存器就不需要成为描述符数据块的一部分。
描述符管理管理描述符列表的最佳方法是什么?其实,这个问题的答案需要根据应用来定,但要明白存在何种替代方法很重要。