《嵌入式原理与系统综合设计习题答案.docx》由会员分享,可在线阅读,更多相关《嵌入式原理与系统综合设计习题答案.docx(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1.1 什么是嵌入式系统?嵌入式系统是以应用为中心、以计算机技术为基本、软/硬件可剪裁、合用于对系统功 能、可靠性、成本、体积、功耗等有严格规定日勺专用计算机系统。1.2 嵌入式系统的应用领域有哪些?列举某些生活中的嵌入式系统实例。嵌入式系统的应用领域有交通管理、工控设备、智能仪器、汽车电子、环境监测、电子 商务、医疗仪器、移动计算、网络设备、通信设备、军事电子、机器人、智能玩具、信息家 电等;网络设备:互换机、路由器、Modem等。消费电子:手机、MP3、PDA、可视电话、电视机顶盒、数字电视、数码照相机、数 码摄像机、信息家电等。办公设备:打印机、传真机、扫描仪等。汽车电子:ABS (防死
2、锁制动系统)、供油喷射控制系统、车载GPS等。工业控制:多种自动控制设备13嵌入式系统时构成有哪些?嵌入式系统一般由硬件层,中间层,软件层三层构成。1.4 嵌入式系统的特点有哪些?嵌入式系统有如下4个特点:系统内核小、专用性强、系统精简、实时性高。1.5 简述嵌入式系统的发展。嵌入式系统具有如下6个发展趋势:系统工程化、开源化、功能多样化、节能化、人性 化、网络化。SUBS RO, R2, R4SBC RI, R3, R564位求负数RSB RO, R2, #0RSC RI, R3, #0B指令、BL指令、BLX指令和BX指令用于实现程序流程的跳转,有何异同?B指令只是做简朴的跳转;BL指令在
3、跳转之前会将目前PC寄存器的值保存在R14寄存 器(LR)中,通过LDRPC,LR语句可以返回跳转前的位置;BLX指令与BL区别在于跳转时时 候切换解决器工作状态,在ARM状态和Thumb状态间切换。3.8 简述汇编语言的程序构造。汇编语言日勺程序构造由段(section)构成;段又分为代码段和数据段;每个汇编程序至 少涉及一种代码段,零个或多种涉及初值日勺数据段,零个或多种不涉及初值的数据段。3.9 ALIGN伪操作时指令的作用是什么?什么状况下需要伪操作?在AREA伪操作中有ALIGN 属性,它与单独的ALIGN伪操作有什么不同?定义代码段和数据段的对齐方式。当某代码段的地址不是4欧I整数
4、倍欧I时候需要该伪操 作。在AREA伪操作中ALIGN属性欧I作用范畴只限定于AREA申请的区域,而单独的I ALIGN 作用范畴为该伪操作背面的所有代码。3.10 如何在C语言程序中内嵌汇编程序?如何在汇编程序中访问C程序变量?在C语言中使用如下格式来嵌套汇编代码_asm/*汇编1*/*汇编2*/)在汇编程序中访问C程序变量方式如下:1)使用IMPORT伪指令声明这个全局变量;2)使用LDR指令读取该全局变量日勺内存地址,一般该全局变量的内存地址寄存在程序时 数据缓冲池中;3)根据该数据类型,使用相应的JLDR指令读取该全局变量日勺值,使用相应欧ISTR指令修 改该全局变量时值。3.11 程
5、序设计:使用LDR指令读取0x40003100上的数据,将数据加1,若成果不不小于10则 使用STR指令把成果写回原地址,若成果不小于等于10,则把0写回原地址。然后再次读取 0x40003100上的数据,将数据加1,判断成果与否不不小于10周而复始循环。程序设计如下:_START:MAIN:LDR RO, =0X40003100LDR RI, ROADD RI, Rl,#lMOV R2, #10SUBS R3, RI, R2MOVLT R3,#0STR R3, R0B MAIN第4章4.1 S5PV210微解决器是哪种封装形式?这种封装有什么优缺陷?S5PV210芯片是584引脚日勺FCFB
6、GA封装,引脚间距0.65mm,体积为17x17mm0FCFBGA封装既能容纳较多日勺管脚,又能保证管脚间距,具有良好的电气性能。但是对 焊装时规定很高,无法手工焊装。4.2S5PV210微解决器有多少个GPIO端口?有多少GPIO引脚?S5PV210微解决器有35组GPIO端口,237个GPIO引脚。4.3 如何对复用的GPIO引脚进行配备?通过设立该引脚所属组的端口控制寄存器的相应位进行配备其功能,例如GPA0组日勺第 一种端口作为输入端口则只需要将GPAOCON日勺0-3位设立为0000即可。寄存器具体地址以 及相应位可以查询芯片手册。4.4 端口上拉寄存器的功能是什么?何种状况下需要上
7、拉?端口上拉寄存器控制了每个端口的上拉电阻时容许/严禁;当引脚端口作为输入端口时, 需要上拉,用于检测低电平信号。4.5 如何在C程序中给32位的寄存器中的某几位置1而不影响其她位的值?用位或和移位操作实现,例如将32位整型数据日勺a位、b位(a、b为整常量)置1, 可参照如下代码:x |= (la | lb);如何在C程序中给32位的寄存器中的某几位置0而不影响其她位时值?用位与和移位操作实现,例如将32位整型数据日勺a位、b位(a、b为整常量)置0, 可参照如下代码:x &= (la I lb);如何在C程序中编程检测32位寄存器中的某位与否为1?可以通过位与操作判断,例如判断a位与否为1
8、示例如下:x &= (la);if(x)/*该位为1*/else/*该位为0*/)4.6 如何在C程序中编程检测32位寄存器中的某位与否为0?可以通过位与操作判断,例如判断a位与否为0示例如下:x &= (la);if(!x)/*该位为0*/)else/*该位为1*/)第5章5.1 随机存储器和只读存储器有何区别?随机存储器数据掉电易丢失;随机存储器读写时可以从存储器任意地址处进行。只读存储器数据掉电不丢失。5.2 请解释 SRAM、DRAM 和 SDRAMoSRAM (Static Random Access Memory)静态随机存储器;DRAM (Dynamic Random Acces
9、sMemory)动态随机存储器;SDRAM (Synchronous Dynamic Random Access Memory)同步动 态随机存储器。5.3 简述内存管理单元的作用。地址存储单元(MMU)重要有两个作用:实现虚拟地址向物理地址U勺映射,即管理 地址重定位;管理访问权限。5.4 试描述ARM存储器管理的分页功能和解决流程。ARM存储管理器将物理地址和虚拟地址都划分一块块日勺小空间,这种划提成为分页; CPU访问的地址空间为虚拟地址空间,而存储器相应时是物理地址空间。当CPU去访问一 种虚拟地址空间的时候,如下图所示,MMU会找到该虚拟地址空间的所属页,然后根据预 先设立好的相应规
10、则去寻找相应的I物理地址的所属页,在物理页的基本上加上偏移量从而完 毕虚拟地址向物理地址的映射。一般状况下虚拟地址空间不小于物理地址空间,因此有也许 多块虚拟地址映射到同一物理地址,也有也许没有映射到物理地址,当用到该虚拟地址时才 得到映射。CPU操作虚拟地址 找到该庠乡地址所映射至物理地址页物理地址加偏移量MMU解决流程5.5 嵌入式系统的初始化过程涉及哪些环节?嵌入式系统初始化涉及两大步:初始化运营环境,初始化应用程序。在初始化运营环境的时候应当完毕如下工作:标记初始化代码日勺入口;设立异常向量表、 中断向量表;初始化存储器系统;初始化堆栈指针;初始化某些核心的I/O 口;初始化中断系统
11、需要的RAM变量;使能中断;如果需要,切换解决器模式;如果需要,切换解决器状态。在初始化应用程序的时候应当完毕如下工作:通过复制初始化数据到可写数据段来初始 化非0可写数据;对ZI数据段清零;存储器初始化后,程序控制权交给应用程序的入口,如C运营时库。5.6 简述S5PV210微解决器进行内存映射的机制。S5PV210日勺虚拟地址由虚拟页号和页内偏移量两部分构成。MMU根据虚拟页号查找 Translation Table找到虚拟页号相应由J物理页,然后加上页内偏移量即可得到虚拟地址相应 的物理地址。例如如果虚拟地址的页内偏移量为4K,则需要12位来表达,即虚拟地址的低 12位表达页内偏移量,其
12、他高20位保存着映射关系的信息(如段式转化,粗细页转化,细 页转化等转化方式,以及虚拟地址的J页信息,映射方式,访问控制位等信息)。这些信息可 以查阅cortex-a8的I手册。5.7 读如下程序,阐明程序功能.text.global _start_start:Idr rO, = 0xE2700000mov rl, #0str rl, rOIdr sp, = 0xD0037D80;设立栈,以便调用c函数Idr rO, = mainIdr rl, = 0xD0030000;0xd0030000 目的地址Idr r2, = redirt_endcmp rO, rlbeq run_on_dram c
13、opyjoop:Idr r3, rO, #4 ;源str r3, rl, #4;目的cmp rO, r2bne copyjooprun_on_dram:Idr pc, = 0xD0030008;跳转halt:b halt该段代码完毕的功能是代码的J复制以及重定位:将以标号main开始到redirt.end这段 地址空间的I代码复制到以0xD0030000 (RAM起始地址)为起始地址的存储区域。如果标号 main的I地址正好等于0xD0030000就跳过复制,直接到RAM中去执行。5.8 读如下电路图,阐明该内存单元应当如何和S5PV210微解决器进行硬件连接?如何进 行虚拟内存地址映射?(图
14、略)略第6章6.1 简述嵌入式系统通过查询方式和中断方式获取数据的特点。程序查询方式:操作简朴,但由于解决器始终查询I/O端口或部件的状态,因此解决器 日勺效率非常低。中断方式:CPU在中断信号到来时决定与否解决该中断,解决完毕后返回中断前日勺程序, 继续执行效率高,但实现相对于查询方式复杂。6.2 请论述ARM时异常向量表的I构造。在ARM体系中,有7种异常解决。当异常发生时,解决器会把PC设立为一种特定的存 储器地址。这一地址被放在异常向量表中。异常向量表涉及一系列不能修改的指令,用以跳 转到各异常口勺响应程序。ARM 口勺异常向量表由异常类型相应的跳转指令构成。6.3 软中断指令中的中断
15、号可以通过哪几种方式获取?软中断指令中日勺中断号可以通过如下两种方式获取:SWI指令后的24位立即数; SWI指令后的24位立即数被忽视,中断号保存在R0寄存器中。6.4 IRQ中断和FIQ中断发生时,解决器进行哪些工作?IRQ中断和FIQ中断发生时的I解决环节如下:1)初始化微解决器中断有关的寄存器,开放中断;2) I/O端口或部件完毕数据操作后产生中断祈求信号;3)当中断祈求信号有效时,微解决器也许处在不可中断状态,等微解决器容许中断时保存 目前状态,停止它现行的操作并开始进行中断源的辨认;4)在辨认出优先级最高的中断源后,微解决器转到相应的中断服务例程入口,并应答中 断0端口或部件收到应
16、答信号后,撤销其中断祈求;5)微解决器读入或写出数据,当中断服务例程结束后,返回到本来的被中断程序处继续执 行。6.5 中断解决完毕后,解决器是如何回到本来的程序断点处的?中断解决程序中一方面应当保存现场(中断之前的现场,涉及程序状态寄存器(CPSR), PC的J指向等);在中断服务程序执行完毕之后,就要恢复现场,即重新加载PC,寄存器等。 从而回到本来的程序断点处。事实上,当异常发生时,分组寄存器R14和SPSR用于保存解决器状态,异常返回时, SPSR内容恢复到CPSR,连接寄存器R14恢复到程序计数器PCo什么是向量中断控制器?其重要工作是什么?向量中断控制器(Vectored Inte
17、rrupt Controller),是中断控制器欧J构成部分。S5PV210 的中断控制器有4个向量中断控制器(VIC)。向量中断控制器的重要工作是:支持93个向量IRQ中断;配备中断优先级;硬件中断优先级屏蔽;产生IRQ与FIQ;产生软件中断;限制访问特权模式等。6.6 请解释中断优先级仲裁。若嵌入式系统中有多种中断源,则这些中断源必须要进行中断优先级区I排列。所谓优先 级仲裁,指的是如下两层含义:1)若有2个及2个以上的中断源同步提出中断祈求,微解决器先响应哪个中断源,后 响应哪个中断源。2)若1个中断源提出中断祈求,得到响应后,又有1个中断源提出中断祈求,后来的 中断源能否中断前一种中断
18、源的中断服务程序。6.7 在对图6-1所示硬件电路进行中断编程时,如果没有在starts中定义异常向量表,那么 中断可以正常被响应吗?为什么?不能。如果为未定义异常向量表,则CPU跳转到向量入口地址之后不懂得接下该执行 哪里的代码,无法对的跳转到中断服务程序中,因此不能正常响应。第7章7.1 简述通用定期器工作原理。通用定期器内部工作原理:以一种N位日勺加1或减1计数器为核心,计数器欧J初始值 由初始化编程设立,计数脉冲的I来源有系统时钟或外部事件脉冲。若编程设立定期/计数器 为定期工作方式时,则N位计数器的计数脉冲来源于内部系统时钟,并通过M分频。每个 计数脉冲使计数器加1或减1,当N位计数
19、器里H勺数加到0或减到0时,则会产生一种“回 0信号”,该信号有效时表达N位计数器里的目前值是0。由于系统时钟的频率是固定的,其 M分频后所得到的计数脉冲频率也就是固定的,因此通过对该频率脉冲的计数就转换为定 期,实现了定期功能。若编程设立定期/计数器为计数方式时,则N位计数器的计数脉冲 来源于外部事件产生日勺脉冲信号。有一种外部事件脉冲,则计数器加1或减1,直到N位 计数器中时值为0,产生“回0信号”。7.2 什么是ARM的脉宽调制定期器?S5PV210有5个32位双缓冲脉冲宽度调制定期器。配合定期器计数缓冲寄存器TCNTBn 和定期器比较缓冲寄存器TCMPBn,可以很以便地实现脉宽调制功能
20、,因此被称为脉宽调制 定期器。7.3 如何对S5PV210微解决器的定期器时钟进行分频?定期时间如何计算?定期器。和1共用一种可编程8位分频器,该分频器为PCLK提供第一层分频,定期器 2,3,4共用一种不同的8位分频器。每个定期器均有自己的专用时钟分频器提供第二层分频 (又称分割器,可提供124,8,16分频)。定期时间二计数器初值*定期器时钟频率。7.4 试编写定期器控制蜂鸣器鸣叫频率和占空比的程序。参照代码如下:(篇幅有限,在此只给出核心代码供参照)void timer_init(unsigned long utimer,unsigned long uprescaler,unsigned
21、 long udivider,unsigned long utcntb,unsigned long utcmpb)(unsigned long tempo;/ 定期器的J输入时钟=PCLK / (prescaler value + 1) / divider value = PCLK/(65+l)/16=62500hz设立预分频系数为66tempO = TCFGO;tempO = (tempO & (OxffOOff) | (uprescaler-l)O);TCFGO = tempO;/16分频tempO = TCFG1;tempO = (tempO & (0xf4*utimer)& (l20)
22、 |(udivider4*utimer);TCFG1 = tempO;/Is = 62500hz常用的嵌入式解决器分为哪几类?常用的嵌入式解决器有一下四类:嵌入式微解决器、嵌入式微控制器、嵌入式DSP解 决器、嵌入式片上系统。1.6 嵌入式操作系统的特点有哪些?嵌入式操作系统有如下6个特点:系统内核小、专用性强、系统精简、高实时性、多任 务日勺操作系统、需要专用开发工具和环境。1.7 什么是实时操作系统? IEEE实时UNIX分委会觉得实时操作系统应具有哪些特点?实时操作系统是指在限定的时间内能对过程调用产生对时的响应区I操作系统。IEEE区) 实时UNIX分委会觉得实时操作系统应具有如下特点
23、:异步日勺事件响应、切换时间和中断延 迟时间拟定、优先级中断和调度、抢占式调度、内存锁定、持续文献、同步。1.9常用的嵌入式操作系统有哪些?它们各有什么特点?操作系统特点uCLinux遵守GNU/GPL,完全开源;移植性好;网络功能优秀;支持多文献系 统;API接口丰富。Android良好的平台开放性、可以实现个性化应用设定和与Google应用日勺无缝 结合。Windows CE与Windows系列有较好的兼容性;能在多种解决器体系构造上运营; 采用模块化设计;没有开放源代码;耗费内存。Vx Works支持多种解决器;具有先进的网络功能;具有良好的可靠性、卓越的实 时性、高效时可裁剪性。Nuc
24、leus抢占式多任务操作系统内核;便于移植并且支持多种解决器;核心代码 精简。uC / OS II公开源代码;可移植性强;可固化、可裁剪;占先式、多任务;系统任 务;中断管理;稳定性和可靠性都很强。QNX实时可拓展;内核精简;运营速度快。Linux开源的自由操作系统;真正口勺多顾客多任务操作系统;内核可剪裁; 实时性好;网络功能强大;支持目前多数日勺解决器;稳定性和可靠性 都很强。嵌入式系统工程设计的要点有哪些?TCNTBO = utcntb;TCMPBO = utcmpb;/手动更新TCON |=11;/清手动更新位TCON &=(11);/自动加载和启动timer。TCON |=(l0)|
25、(l3);使能timerO中断tempo = TINT_CSTAT;tempo = (tempo & (lutimer) | (l(utimer);TINT_CSTAT = tempO;)中断解决函数void irs_timer()unsigned long uTmp;清timerO的中断状态寄存器uTmp = TINT_CSTAF;TINT_CSTAT = uTmp;)int main(void)(system Jnitexceptio n();intc_setvectaddr(NUM_TIMERO, irs_timer);intc_enable(NUM_TIMERO);timer_init
26、(O, 65, 4, 62500, 31250);while(l);return 0;)嵌入式系统为什么需要看门狗?嵌入式系统对可靠性有严格规定。为保证系统可以长期可靠地运营,需要加入看门狗, 在程序发生错误时自动重新启动系统,避免系统死锁。7.5 简述看门狗定期器工作原理。看门狗定期器是一种特殊日勺定期器,它既能引起中断,也能发送一种系统重启信号。看 门狗定期器被使能之后,需要在一定周期内(不不小于看门狗定期器产生日勺时间间隔)执行 重置看门狗的动作(喂狗)。如果在看门狗定期器产生的I时间间隔内没有喂狗操作,定期器 将会发送一种重启信号,系统将重新启动。7.6 编写0.ls看门狗复位的程序。
27、参照代码如下:(篇幅有限,在此只给出核心的设立看门狗的代码供参照)(设PCLK为 32MHz)void enable_watchdog()(容许输出重置信号,容许中断生成,128分频,预分频78rWTCON = (10) |(12) | (0bll3) | (0x4E8);rWTDAT = 0x8000;rWTCON = 1 5; 启动行门狗void feed_dog()rWTCNT = 0x8000;7.7 为什么嵌入式系统使用RTC定期器获取时间,而不用一般定期器?一般定期器在系统关机状态下无法工作,而实时时钟单元虽然在系统处在关机状态下它 也可以正常工作(一般采用后备电池供电),为系统提
28、供可靠的时钟,涉及时、分、秒和年、 月、日。7.8 读如下程序,试述各语句的作用和该段程序的功能。year = (year / 100) 8) + (year / 10)% 10) 4) + (year% 10;将 year 转换为 BCD 码将month转换为BCD码将date转换为BCD码将weekday转换为BCD码将hour转换为BCD码将min转换为BCD码将sec转换为BCD码将month转换为BCD码将date转换为BCD码将weekday转换为BCD码将hour转换为BCD码将min转换为BCD码将sec转换为BCD码month = (month/10)4) + (month%
29、 10);date = (date / 10) 4) + (date% 10);weekday = (weekday% 10);hour = (hour / 10) 4) + (hour% 10);min = (min / 10) 4) + (min% 10);sec = (sec / 10) 4) + (sec% 10);rtc_enable(true);保存将秒钟保存到BCD秒钟寄存器将分钟保存到BCD分钟寄存器将小时保存到BCD小时寄存器BCDSEC = sec;BCDMIN = min;BCDHOUR = hour;BCDDATE = date;将日期保存到BCD日期寄存器BCDDAY
30、 = weekday;将星期保存到BCD星期寄存器BCDMON = month;将月份保存到BCD月寄存器BCDYEAR = year;将年份保存到BCD年寄存器rtc_enable(false);该段程序的功能是将年月日,时分秒转换为BCD码然后保存到RTC相应寄存器中。即 设立RTC时钟初始值。第8章8.1 什么是模拟量?什么是数字量?请分别举例阐明。在时间和幅度上都是持续的物理量称为模拟量,例如如温度、压力、位移、图像等;在 时间和幅度上离散的物理量称为数字量。8.2 在A-D转换过程中,模拟量和输出的数字量应当满足如何的关系?输出的数字量与模拟量应满足线性关系;采样频率应高于模拟量最大
31、频率的2.5倍。8.3 什么是A-D转换的辨别率?其与转换位数之间是什么关系?辨别率用来表白A-D转换器对模拟信号的I辨别能力,由它拟定能被A-D转换器辨别的I最 小模拟量变化。一般来说,A-D转换器的位数越多,其辨别率则越高。8.4 满量程电压为33V且位数为12位的A-D转换器的量化误差是多少?计算如下:33q= 0.008量化误差为0.008VoA-D转换器的转换过程分为哪四个环节?分别完毕什么功能?采样,保持,量化,编码四个环节。采样与保持:将模拟量转换为在时间上离散的时间 离散量。量化与编码:将采样得到日勺时间离散量的幅度转化为离散幅度并进行编码得到数字 量。8.6 A-D转换器有哪
32、几种类型?其优缺陷分别是什么?类型优缺陷积分型长处是电路简朴,缺陷转换速率低逐次比较型长处是速度较高、功耗低,在低辨别率(12位)时价格很高并行/串并行比较型长处是转换速率极高,缺陷是电路规模大,价格高S-A(Sigma - delta)调制型电路的1数字部分基本上容易单片化,容易做到高辨别率电容阵列逐次比较型逐次比较型的改善,用低廉的成本制成高精度单片A-D转换器压频变换型其长处是辨别率高、功耗低、价格低,但是需要外部计数电路8.7 如何设立S5PV210微解决器的A-D转换时钟?若系统主频为100MHz,且预分频比为65, 则AD转换的J时钟频率为多少?A-D 转换频率=100MHz/(6
33、5+l)% 1.52MHz8.8 TSDATXn寄存器是多少位的寄存器?若所使用的A-D配备为12位,如何取出转换完毕时 12位AD输出数值?TSDATXn寄存器是16位寄存器。将TSDATXn的值读出来然后位与操作取值,例如: return(TSDATXn&Oxfff);将AD转换的12位数据以返回值形式返回。8.9 第8.4节中的I实例,若改为10位A-D转换,应如何修改程序?修改read_adc函数:int read_adc(int ch)(使能预分频功能,设立A-D转换器的时钟=PCLK/ (65 + 1)TSADCCONO = (0 16) | (1 14) | (65 6); 修改
34、 1:设立为使用 10 位 ADC清除位2,设为一般转换模式,严禁read startTSADCCONO & 二 (1 2) |(1 1);选择通道ADCMUX = O;设立位为1,启动A-D转换TSADCCONO = (1 0);当A-D转换真正开始时,位会自动清零while (TSADCCONO &(1 0);检测位15,当它为1时表达转换结束while (!(TSADCCONO &(1 15);读取数据return (TSDATX0 & 0x3ff); 修改 2:改为返回 TSDATX0 寄存器低 10 位如果外部待测模拟信号电压数值超过A-D转换器满量程电压,请问软件和硬件应如何 修改
35、?提供如下参照方案:在硬件电路设计的I时候外接分压电阻,将被测量的一部分电压接入 AD测量(例如分压皿),在软件中将读出时转换成果乘以分压倍数即可。第9章9.1 简述DMA的工作原理。DMA传播将数据从一种地址空间复制到此外一种地址空间,传播操作自身是由DMA控 制器来实行和完毕的I。DMA操作并不依赖于微解决器,微解决器可以去解决其她欧I工作。 因此可以提高系统运营效率。9.2 S5PV210支持几种DMA工作方式?有什么区别?S5PV210支持2种DMA工作方式,分别为DMA_mem和DMA_perio前者为存储器转移DMA,由一种PL330构成,用于内存到内存的I数据传播;后者为外围设备
36、转移DMA,由两个PL330构成,用于外围设备数据的转移。9.3如何对S5PV210微解决器进行perLDMA编程?如何进行M2M_DMA编程?两者有何区 别?可以通过将PL330 勺指令编码写进某一地址,然后将地址写进DMD_peri或者DMA_mem 日勺有关寄存器进行编程。区别在于DMD_peri只在非安全模式下运营,DMA_mem只在安全 模式下运营。指令指令简述DMAMOV数据转移指令,可以移动一种32位数到原地址寄存器,目日勺地址寄存器 与通道控制寄存器中DMALDDMAC装载指令,从源数据地址取出数据到MFIFO中DMAST与DMALD相应,讲MFIFO中HW据加载到目的地址DM
37、ARMB读内存屏障指令,可以使目前所有读解决所有被强制取消DMAWMB写内存屏障指令,可以使写解决所有被强制取消DMALP循环指令,该指令用来指定某个指令段时开始位置DMALPEND循环终结指令,DMASEV事件发送指令,可以产生一种事件信号DMAENDDMA结束指令,用来告知DMAC结束一次操作集合9.4请查阅PL330数据手册,简述PL330的指令集。9.5在9.6节所示的实例中,数组instr.seq的作用是什么?用于保存PL330时指令,作为指令缓存区。9.6模仿9.6节,编程实现UART DMA数据传播。#define MAX 100#define Inp(addr)(*(volat
38、ile unsigned int *)(addr)#define Outp(addc data)(*(volatile unsigned int *)(addr) = (data)#define VICOADDR(*(volatile unsigned int *)OxFFOO)#define VICOINTENCLEAR(*(volatile unsigned int *)0xF014)#define VICOINTENABLE(*(volatile unsigned int *)0xF010)#define VIC0VECTADDR18(*(volatile unsigned long *
39、)0xF148)#define DMAJNTEN OxFA2O #define DMA_DBGSTATUS 0xFA200D00#define DMA_DBGCMD 0xFA200D04#define DMA_DBGINSTO 0xFA200D08#define DMA_DBGINST1 OxFA2OODOC#define UTBR (*(voiatile unsigned long)0xE2900020char dma_src48 = dma_src datal234567;char dma_dst48 = dma_dst;volatile char instr_seqMAX;void dm
40、a_start()(/clear DMA_mem INTCLR清除DMA U勺中断标志(DMA除了从属于VICO以外有自己的一种中断机制控制) /Outp(OxFAOO+Ox2C, 0x2);取消对DMA_mem日勺使能,即不在响应DMA_mem中断祈求和之前为启动DMA欧I时候作对比,到这里已经在没有CPU干预日勺状况下,运用DMA将dma_src的数据搬运到dma_dst里面了printf(This is second print dam_dstrn);printf(%srn,dma_dst);printf(rnDMA Ending!rn);)/dma初始化void dma_init(un
41、signed int source, unsigned int destination;)int size = 0, x;int loopstart, loopnum;unsigned int start;/*1.先打印没有启动DMAC之前的dam_dst*/printf(rnThis is first printf dam_dst:rn);printf(%srn/dma_dst);/*2.DMAM0V SARO设立源地址寄存器*/source = (unsigned int)dma_src;instr_seqsize + 0 = (char)(0xbc);instr_seqsize + 1
42、= (char)(0x0);instr_seqsize + 2 = (char)(source0) & Oxff);instr_seqsize + 3 = (char)(source8) & Oxff);instr_seqsize + 4 = (char)(source16) & Oxff);instr_seqsize + 5 = (char)(source24) & Oxff);size += 6;/*3.DMAM0V DARO设立目H勺地址寄存器*/destination = (unsigned int)dma_dst;instr_seqsize + 0 = (char)(0xbc);in
43、str_seqsize + 1 = (char)(0x2);instr_seqsize + 2 = (char)(destination0) & Oxff);instr_seqsize + 3 = (char)(destination8) & Oxff);instr_seqsize + 4 = (char)(destination16) & Oxff);instr_seqsize + 5 = (char)(destination24) & Oxff);size += 6;/*4.DMAMOV CCO. burst_size 8byte, burst Jen 2设立通道0控制寄存器,源地址和目的
44、I地址在搬运完一次后来都自动增长,每次搬运8*2=16个字节,都是挂载到AXI接口,由于是内存之间口勺访问*/DOOO OOO 0,00 0001 01,1 1 000 000, 0001 011 1 instr_seqsize + 0 = (char)(Oxbc);instr_seqsize + 1 = (char)(Oxl);/CCR 寄存器instr_seqsize + 2 = (charj(0xl7);源地址递增,每次读8个字每次2个数据传播instr_seqsize + 3 = (char)(0xc0);/ARPROT0:2=0b000,ARCACHE0:2=0b000, 目的地址递
45、J次写 8 字节instr_seqsize + 4 = (char)(0x5);每次 2 个数据传播,AWPROT0:2=0b000instr_seqsize + 5 = (char)(OxO); /AWCACHE0:1,3 =0b000,不互换 8 位数据size += 6;5.DMALPLC0设立要搬运得次数,开始循环搬运数据。数组大小是48字节(dam_s48),因此耍搬运48除以16等于3次*/loopnum = 3;instr_seqsize + 0 = (char)(0x20); /lc=0instr_seqsize + 1 = (char)(loopnum -1);/ 循环次数s
46、ize += 2;loopstart = size; 需要循环执行廿勺起始位置/*6.DMALD装载源地址的数据到MFIFO数据缓冲区*/instr_seqsize + 0 = (char)(0x04);size += 1;/*7.DMAST将MFIFO日勺数据存入目的地址*/instr_seqsize + 0 = (char)(0x08);size += 1;/*8.DMALPEND 0循环搬运的I代码块结束*/instr_seqsize + 0 = (char)(0x38);instr_seqsize + 1 = (char)(size - loopstart); 记录循环结束日勺位置size += 2;应用需求;硬件规定;实时性的实现;系统功耗;系统升级方式;调试方式;开发环境 的选择等