ARM+SL811HST问题(网友写)

合集下载

ARM经典300问(181~246) 免费下载

ARM经典300问(181~246) 免费下载

第181 问:Q:我的2214 板IO 口和中断均能正常工作,今天准备调显示器,显示器接在CS2 上,8 位数据线,通过查资料,得cs2 的地址空间为8200 0000,于是我将命令口地址定为0x82000001,数据口地址定义为0x8200 0000,对啦,数据命令切换线在A0 上,在显示器初始化前,对CS2 进行了配置,即BCFG2&=0XCFFF FFFF,即除修改成8 位数据线外,其它均不变,对显示初始,定时送显示器,但是测量CS2 口线,根本不出现低电平,更不用说数据线啦,即好像外部总线根本没有工作.之后根据2214 的模板,从新设置了参数,结果写信号出不来,片选,读地址,数据均有.PINSEL2=0x0f814910;BCFG2&=0xcfffffff; // CS2,8 位数据线,请问,配置外部总线还需要其它寄存器吗,由于手上没有这方面的资料,请给予帮助.谢谢!A:注意BCFG2 的写保护位.第182 问:Q:请问:关于LPC2214 的BOOT0 和BOOT1 的用法.前提:我使用内部FLASH 作为程序存储器,利用外部总线CS0 扩展一片并口的12 位AD,CS1 扩展并口的液晶,CS2 扩展一片RAM 芯片.我的想法:将BOOT0 和BOOT1 上拉,系统上电启动后,检测到11,那么从内部FLASH 启动,之后我可以设置管脚的选择寄存器,使能CS0 和CS1 和外部总线,那么我就可以随时的利用它的地址访问我的外部扩展的设备.请问我的想法对吗,并请指点一下我应该注意的相关的问题.A:正确.第183 问:Q:请问:2214 外扩SST39VF320 在CS1 上为什么读ID 不正确程序如下://设置PINSEL2 位#define P1_26_31_Debug 4 // JTAG D2#define P1_16_25_Track 8 // 跟踪 D3#define P2_Data_Bus 0x10 // D0-15 IO (D5 D4=01)#define P3_27_WE 0x100 // 写信号 D8#define P3_26_CS1 0x800 // D11#define P3_25_CS2 0x4000#define P3_24_CS3 0x10000#define P3_0_23_ADDR 0x0f800000 // 地址总线//PINSEL0=P0_0_15_Set;#define PIN2Set (P1_26_31_Debug+P1_16_25_Track+P2_Data_Bus+\P3_27_WE+P3_26_CS1+P3_25_CS2+P3_24_CS3+P3_0_23_ADDR)#define SST39VF320_Com_Add1 (*((volatile unsigned long *) 0x81005555)) #define SST39VF320_Com_Add2 (*((volatile unsigned long *) 0x81002aaa)) #define SST39VF320_ID1_Add (*((volatile unsigned long *) 0x81000000)) #define SST39VF320_ID2_Add (*((volatile unsigned long *) 0x81000001)) void InitGPIO(){PINSEL2=PIN2Set;BCFG1=0x10000000; // 16 位}void Check320(void){SST39VF320_Com_Add1=0xaa;SST39VF320_Com_Add2=0x55;SST39VF320_Com_Add1=0x90;// Delay_150_Nano_Seconds();// Read the product ID from 39VF320SST_id1=SST39VF320_ID1_Add; // 读出ID 不对SST_id2=SST39VF320_ID2_Add; // 读出ID 不对SST39VF320_Com_Add1=0xaa;SST39VF320_Com_Add2=0x55;SST39VF320_Com_Add1=0xF0;}A:CPU 的A0 不能不能接,另外地址也要相应的变化(针对FLASH 的地址和针对CPU 的地址不一样).第184 问:Q:请问1.8V 电源和3.3V 电源的跳线要同时供电吗分别是给谁供电的A:一个是给核心(内核)供电,一个是给I/O 口供电.第185 问:Q:1.ARM 的P0.1(WR),P0.4(RD)为何不直接和以太网控制芯片的IOWB,IORB 相连NETCS 起什么作用2.网卡控制芯片的INT0 为何要接一个反相器和ARM 的P0.7 相连3. 我能否直接连接到ARM 的P0.16(外部中断0 输入)口呢4.8 位数据线和5 位地址线怎么实现分时复用A:1.使用片选选择,NETCS 就是片选信号.2.因为8019 的中断是输出高电平,为了适应所选芯片,所以加反相器.3.如果所选芯片支持低电平或跳变触发,就可以不用加反相器而直接与外部中断输入相连.4.加锁存器.第186 问:Q:目前210x 的各功能均试验完毕,现在想知道的是其IAP 功能是否可以向PSD 产品那样实现远程的程序更新如果可以,那么当程序代码写入FLASH 后如何让程序转到更新后的程序 PSD 是通过寄存器来完成转换的,那么210x 如何实现呢比如210x 的程序是从0地址开始执行的,假如原代码长2FFFH,现在更新后的程序长3500H,那么在IAP 时只能将代码写到非00000000~00002FFFH 区域FLASH 中,写完后该如何让当前程序停止而转到更新后的程序呢 PSD 产品是因为有2 块存储器,在执行当前存储器中程序时可对另块存储器写操作,写完后在将执行权交给另块存储器.期待您的回复!A:如果,你的程序较小(64k),你就把它当作两块独立的FLASH(多个扇区).写入其中一块,另一块空着...程序开始执行的时候,判断哪一块是最新的,跳转过去就行了!一旦从外界收到"更新程序"的命令,检验数据,更新另外一块,就行了!接收完毕,烧写结束,写入最新程序标志.立即跳过去.下一次开机,执行最新的.这个方法,比较安全.可以防止中途通讯结束,复位等.如果你的程序比较大,有点悬……至少,在某些干扰环境下,不要那么做.第187 问:Q:开发板实验中 delay_ns(uint32 dly) 在上述条件下是延时dly 秒吗如是则执行速度似乎并不快怎么估计出来的呢A:如果程序和数据均在片内RAM 中,这样计算:1.一般指令需1 个主时钟时.2.每次跳转增加3 个主时钟时间(也许是2 个,需要确认).3.从RAM 中取一个操作数多增加一个主时钟时间,以此类推.4.保存一个结果到RAM 中多增加一个主时钟时间,以此类推.5.访问片内外设,增加一个外设时钟时间.注意伪指令ldr rn,=x 需要从ram 中取一个操作数.第188 问:Q:请问如果lpc2104 和5V 的芯片字节连接,中间不接小电阻,会怎样对系统有没有很大的影响A:不安全而已.第189 问:Q:2104 的功耗最大在多少,(考虑外设全部工作,功率损耗)EASY ARM 板上提供的电源最大输出电流好象只有300mA 哦.A:芯片本身功耗最大值小于70mA(120 摄氏度,核2.1V 供电,运行于60MHz).一般情况小于50mA.IO 口耗电(即3.3V 耗电)与其它电路密切相关,实质是其它电路在消耗电源(ARM 本身对3.3V 的消耗是极小的).第190 问:Q:LPC2114 替换LPC2104 的话,我的程序还需要做哪些变动哪些内部专用寄存器的地址是否变动还有,我原来设计电路用的是LPC2104 的次要JTAG 口,现在换到LPC2114 上来,需要怎么改电路A:程序无需改动,JTAG 设计时在RTCK 接一个4.7k 的下拉电阻即可.第191 问:Q: 有一问题请教,在市场上买的ARM 核单片机的程序用ADS1.2 建立项目,添加初始化程序vectors.s, init.s,target.c 和target.h 后再写自己的主程序,编译烧录到ARM中即可投入使用了吗而有的ARM 嵌入式系统中还有bootloader,那是不是利用ARM 开发的产品都要bootloader,而bootloader 是通过什么软件编译的我所买的easyarm 开发板的lpc2104 中有bootloader 吗A:bootloader 是用来下载程序到FLASH 中的,LPC210x 具有ISP 功能,可直接使用ISP 下载程序,不需要自己编写bootloader.第192 问:Q:我想用IAP 把数据存到2104 的FLASH 里,可我怎么读出来呢A:定义一指针,指向你用IAP 写数据的那个区域,就可以读了.第193 问:Q:当PLLCFG 设置为0x05 时的效果和设置为0x25 时一样,但晶振是11.0592MHz 的,如果设为0x05, Fcco 的范围不在156M-320MHz,为什么还可以用,而且和其它没有区别A:手册说明的是保守值.实际的芯片的Fcco 可能在更大的范围可以工作.第194 问:Q:WDT 复位后从地址0 开始执行吗运行程序5.40 后,WDT 复位后并不是从地址0 开始执行,却跑去执行[0x07806808] dcd 0x07806808,并一直执行此语句.如何才能从地址0 开始执行A:WDT 复位后是从0 开始执行程序.可在复位处设置一些外部现象(如LED 闪烁),然后脱机运行.第195 问:Q:我运行光盘上原始的IAP 程序例子,使用它的project 是正常的,但我自己重新建一个目录和project,参数设置按照原来工程的设置,编译出来的axf 文件就是会在运行到第一个 SelSector(1,1)时无法继续下去,我自己的axf 文件和光盘上的一样大16kB,究竟是怎么一回事有一处设置Language Settings 里的ATPCS 项有什么意义其他工程好像没有选择这一项.A:IAP 是THUMB 指令,如果用户程序是ARM 指令,所以调用时需要使用BX 指令.则C 编译器的ATPCS 项要设置"ARM/Thumb interwork...".第196 问:Q:LPC2104 具有6 个PWM,可以应用与电机控制,可是却没有计数器进行电机转速的PID闭环控制, 这个情况是不是lPC2106 的一个缺陷呢如果不是,那应该怎么样才能进行外部脉冲的计数在不用外加计数器的情况下! 很是困惑!A:捕获算周期.第197 问:Q:ISP 通讯的问题.自己做的板子,使用ISP 下载程序,提示无法通讯.板子上使用了跳线使得44 脚和地连通,也通过max3232 进行电平转换了.还有复位电路感觉也一切正常.不知道为什么就是无法通讯.好晕啊,各位成功下载的大侠们指点一下吧.试了好几天了,都没法成功.A:你确保了max3232 过来的电平正确了吗如果正确了,还要确保通信方向是否弄反,最后注意复位信号是否正确.A:搞定了,原来是max3232 的问题,现在已经可以下载程序了!第198 问:Q:如何用ISP 软件擦除FLASH 中的内容啊我在调试UART0 串口程序的时候出现问题,上网看到很多文章都建议要先擦除FLASH 中已有的内容,于是用ISP 软件进行擦除.但是在使用该软件过程中,按到很多钮都说:串口不能正常工作.这是什么原因啊请教高手正确使用ISP 软件的方法及注意事项.A:看看你的跳线是不是按要求接好了!!第199 问:Q:EasyArm2104 开发板上的ISP 下载的时候通讯不上.请问,要跳JP6 吗A:您可以自己试一下:1.是不是接的UART0 口2.系统晶振(XATL.Freq)是不是11059.2kHz3.串口选择是否正确4.要求你复位的时候你是否有复位5.ISP 使能跳线使用JP1(JP6 和JP7 保持主JTAG 调试状态)!第200 问:Q:请教高手,lpc2104 和lpc2114 外部晶振接法原来我用LPC2104 做的板子,外部晶振接到X1 时不可用.后来接到X2 上时好象可以用,但这与资料上的说法好象有点出入.现在我想换LPC2114 改版,但不想再次改版了.故在此请教外部晶振接法A:使用外部无源晶振,晶振两个管脚无需连接,与51 单片机基本一致;时钟信号由X1 输入.第201 问:Q:请问有没有工业级的21**系列A:lpc2114 等芯片就是工业级的.第202 问:Q:读LPC2119/2129/2194/2292/2294 使用指南之迷惑.1. 对于2292/2294,开放了外部总线,程序应该可以放到外部,外部和内部的存储空间地址不连续,如何保证程序超过128K 后自动跳转到外部执行程序2. VIC 部分,VIC 通道号17#和18#都是EINT2,是什么意思难道一个中断源占2 个号EINT3 的VIC 通道号是多少3. 我购买的芯片是否内部已经有了Boot 装载程序A:1.使用分散加载.2.可能是笔误.3.有.第203 问:Q:请问用LPC2104 扩展D12 有没有问题A:可以使用模拟总线,速度比51 快几倍.第204 问:Q:请教:LPC2114 的V3 能否接2.8V系统有多个外设,有一个使用2.8V±5%的电平接口,其它使用3.3V,那么LPC2114 的V3 怎样接V3 接2.8V 电压基准是否可以,口线与其它3.3V 的接口能否直接相连A:建议不要超出手册说明的范围使用芯片.第205 问:Q:我自己做的板子,把2104 的44 脚(EINT1)接地,再利用LPC210XISP 软件通过串口0往芯片里写程序,为何按了复位键以后连芯片的ID 都不能读到A:应该检查如下几点:1. 确保你的芯片在工作.一般可以查看芯片的几个电源是否都正确,查看晶体是否有波形, 最好还可以看看各电源的纹波是否严重.2. 确保电平转换芯片的正确工作,以及各输入输出的正确.这个方向最容易弄反.3. 查看复位端的电平是否正确,复位按健正常.4. 确保44 脚接地.第206 问:Q:请教如何通过2104 的串口1 来往芯片里写程序A:使用ISP 功能,不能用串口1,只能用UART0.第207 问:Q:请教ARM2104 配套《ARM 微控制器基础与实战》上第一个实验的问题.在ADS1.2 中编译以下程序后进入AXD 进行调试成功.程序稍加修改,使LED1..LED4 同时闪烁,在ADS1.2 中编译以下程序进入AXD 调试成功.问题:两个程序的软件延时部分相同,但两个程序使LED 的闪烁间隔时间不同,不知是何原因A:可以先使用ISP 将芯片FLASH 擦除试试,可能是FLASH 程序设置PLL 的缘故. 第208 问:Q:1.《ARM 微控制器基础与实战》上说32 字节的向量表的累加和必须为0 才可脱机运行,是否需要每次修改程序后修改第六个保留向量的值(因为地址有改变).2.《ARM 微控制器基础与实战》上说用ldr pc, resetaddr 指令代替b 指令可全空间跳转,但是我看指令说明ldr 指令的地址只能是当前地址的+-4k 呀!A:1.不用修改.2.请看书.第209 问:Q:关于2119 的can 的通讯问题,就是2119 的波特率的设置与SJA1000 有什么不同A:基本上一致,将ARM7 的Fvpb 与SJA1000 的晶振对比:BRP,SJW,TSEG1,TSEG2 均是同样的设置方法,需要计算,可参照SJA1000 中位定时参数的计算方法.第210 问:Q:请问各位高手.新买的ARM 芯片是不是直接安装上去就可以直接下载程序工作了了吗,还需要有什么别的设置吗.A:LPC2000 系列有片内FLASH 的都可以直接ISP,不过要保证硬件正常.第211 问:Q:2119 实时时钟电池怎么供电所有的电源引脚都要供电吗A:没有独立的电池供电引脚,以后会推出RTC 独立晶振和备份电源接口的型号. 不太适合电池供电,除此以外,功能还是很强的.第212 问:Q:在调试实验程序的时候,把低功耗掉电模式实验代码PDRUN 编译后下载到2104 FLASH以后,程序正常运行了.可是再DEBUG 程序时,在AXD 下总是提示错误:Error:flash is user configured protected我能明白这个是因为2104 一直处于掉电模式的原因,可是如何解除这种状态,把现在FLASH 里的这段程序擦除掉啊A:通过ISP 软件擦除.第213 问:Q:请教关于"IAP 实验的问题"《ARM 微控制器基础与实战》359 页的IAP 实验是用汇编写的,然而在光盘上IAPtest实验的程序是用C 编写,其中提到本实验是调用IAP 服务程序.请问:1. IAP 服务程序放在了什么地方(汇编部分)2. 我想向其中写入10 字节数据,而不是诸如256 个字节,是否可以,如何实现3. 在主程序中定义一个数组,如何把此数组中的数据固定在特定地址中阿,然后我好进行RamToFlash.A:1.在BOOT 区,入口地址为0x7ffffff0,IAP 服务程序为THUMB 指令.2.先读取原数据到RAM 中.如果只需要保存小量数据,且经常要更改,最好使用外部E2PROM.3.可能不好实现,参考ADS 帮助手册吧.第214 问:Q:请问LPC2104 系统为什么采用11.0592Mhz 的晶振,是在定时上有优势还是其他原因.A:选用11.0592MHz 只是为了得到精确的通信波特率,串口通信的可靠性高.第215 问:Q:请教:lpc2104 和RTL8019AS 的接口问题.以前在C8051F 上做,高低地址是固定的,容易接口,RTL8019 映射地址也容易算出.现在lpc2104 是32 位的,32 个地址线和32 个数据线,和外围器件接口时带到很困惑.不知有没有高手看过周立功网站的提供的lpc2104+RTL8019AS 的接口电路,SA0-SA4 和lpc2104 的哪个脚接在一起请指点由一个573 来控制地址与数据总线复用现在有点明白虚拟总线了,加上一个地址锁存器,和51 机的就很相似了.A:对,为了兼容51.第216 问:Q:开发板上的74HC125 的U5C,U5D 起什么作用A:去抖动.第217 问:Q:请教:在2100 开发板的ADC 实验(P119 面)中为什么每次AD 转换都要启动两次A:切换通道后,丢弃第一次ADC 转换值.第218 问:Q:如果我的AD 转换需要的满量程是0V~5V,是不是把AD 部分的电源即V3A 由现在的3.3V改为5V 供电就可以了A:把输入的电压用电阻分压就可以了.第219 问:Q:疑问:2104 开发板上用了MAX708,其已有高/低电平复位输出,为什么还要用74HC125呢A:为了使手动与JTAG 都可以对芯片复位.第220 问:Q:请教高手关于自己做板子的问题.我自己做了一个2104 的板子,第一次上电可以通过串口顺利地把 .hex 文件从串口写入flash, 然后再次上电,程序就不执行了,并且再次用周立功公司提供的ISP 软件却无法访问该芯片.同样地程序我放到周立功地2104 的开放板用同样的步骤,它却能正常运行,我的板子基本上是按《ARM 微控制器基础与实战》上的图制作的,请指点我的问题可能的原因在哪里请教自己做板子容易出错和注意的地方.A:重新上电试试.P0.14 口是否已接为低电平测一下晶振是否起振Q:晶振测过已经起振,运行自己的程序不是要把P0.14 口断开吗用ISP 软件下载程序的时候才把P0.14 接地是不是A:需要ISP 时P0.14 口接地;需要运行用户程序时,P0.14 口要接一个上拉电阻,因为P0.14 内部无上拉(作为输入时).第221 问:Q:请问2104 的复位电路我不用MAX708 和74HC125,做成象51 单片机那样的复位电路可以吗A:做成这样是为了保证JTAG 接口和按钮,上电都可以复位芯片!实现线与逻辑,如果你不需要调试只是生产的话,完全可以那样设计复位电路. 第222 问:Q:关于REMAP请问remap 的时候只要给MEMMAP 赋值就好了吗具体的中断向量表的映射系统自动给你生成在启动代码中关于remap 我只看到赋值,而在《ARM 微控制器基础与实战》上写了一段重映射的代码示例P280 程序清单5.2.如果系统自动remap 的话,那么映射到的地址空间我们没法改动了代码中,通过B lable1 或bl Lable2 进行跳转时,要不要进行栈的操作如果调用的是c 语言函数,除了传递必要的参数,有没有保存寄存器呢A:中断向量表不是系统自动生成的,是由用户编写.Remap 通过改变MEMMAP 的值实现.请看一下"ARM-Thumb 过程调用标准"(ATPCS.pdf)这篇文档.安装ADS 后就有. 第223 问:Q:请问:lpc2104 运行速度ARM7TDMI(-S)能提供0.9MIPS/MHz 的指令执行速度,lpc2104 cclk 为60MHZ 时指令执行速度应为0.9*60 = 54 MIPS,这样得到一条指令的执行速度大概为0.018us.可我用示波器观察计算得出一条指令的执行时间远远大于这个数值,大概为0.1us-0.8us(可能由于流水线的影响,指令执行时间的差别很大).这是怎么回事呀A:这是一个在存储器带宽足够时的平均值.如果程序和数据均在片内RAM 中,这样计算1. 一般指令需1 个主时钟时间2. 每次跳转增加3 个主时钟时间(也许是2 个,需要确认)3. 从RAM 中取一个操作数多增加一个主时钟时间,以次类推4. 保存一个结果到RAM 中多增加一个主时钟时间,以次类推5. 访问片内外设,增加一个外设时钟时间注意伪指令ldr rn,=x 需要从ram 中取一个操作数.在flash 中如果MAM 配置为最优,平均速度与在ram 中相差无几.第224 问:Q:请教斑竹关于211x 和22xx 系列P1.16-P1.25 这些引脚的作用另外在开发版上除了JTAG 口外,上述引脚是否用到在设计自己的系统时,如果将P1.16-P1.25 这些脚作为普通输入输出口用,是否会影响系统的调试A:ETM 跟踪端口.一般JTAG 仿真器不使用这些引脚,所以设计自己的系统时用作I/O 即可.不会影响调试.第225 问:Q:请问,请问评估板上的S-1131B 哪里能订购到,或者有什么替换型号.谢谢A:SPX1117M3_1.8 和 SPX1117M3_3.3./Sipex/power/SPX1117.asp.第226 问:Q:关于 P2104 的驱动能力!我正在用2104 外接LCD 其中用P0 口模拟总线我的了LCD 电压是5V 的,而2104 是3.3V的,能否直接相接我没接时还有信号输出但接上之后就什么信号都没有了,请问是何缘故是否需要电平转换芯片或驱动芯片上拉电阻能否满足要求A:中间串一个小电阻试一试.我们接过多种总线器件都没有问题.第227 问:Q:问一下,lpc2104 的I/O 的驱动能力单个I/O 可以走多大电流全体I/O 可以走多大电流A:数据手册上有,Ioh,Iol.第228 问:Q:2119 最高频率可达60MHZ,在频率比较高的时候应该使用几层的电路板,有没有确切的规定A:不知道什么时候有人就把PCB 的层数与频率划上了一个必然的关系.60MHz很高吗看看你的调频收音机,FM 波段范围是88-108MHz,内部部本振频率可达118.7MHz,1层板!看看电视机里头的电路板,高频盒内一般最多就2 层板(还是一层的居多)它跑多高的频率自己查查UHF 的范围吧,记得保持冷静因为没有什么值得去惊讶的!再有几年前拆过一个GIGA 的游戏机,音频部分的PCB 是4 层板(独立的小板),小日本的东西元器件密密麻麻的,看看这个它又能是跑多高的频率况且现在数字电路的电平容差相对于模拟电路的至少有一个数量级的差别.在高频模拟电路下,多一块覆铜可能就使电路的性能下降或工作点异常,例如它可能使电感特性器件的Q 值下降,产生涡流耗损等.很多时候增加PCB 的层数决不是单纯因为系统速度,你所说的60Mhz 也只是芯片内部的系统时钟, 难道你的IO 也要作为时钟源使用吗在ARM 中采用PLL 技术使得外部时钟可以下降到一个较低的水平,则可以抑制部分由时钟电路产生的射频干扰,有较好的EMC,EMI 特性,一个合理的PCB layout 可能比盲目增加PCB 层数的方法提高系统的稳定性来得更合理和有效!看你是想做精品还是想做产品或其他,这就要综合多方因素考虑了.无可否认,增加PCB 的层数后比较容易的处理一些由于电源寄生干扰产生的问题,适当配合layout 可以满足一些速度(时序)要求苛刻的电路.由于现在元器件体积日渐小型化,PCB 上元器件密度大,很多时候单面或双面的layout 实现已经非常困难,增加PCB层数是为了更好的使设计变得合理和可靠.第229 问:Q:ARM 抗干扰能力怎样,是否低压器件一定比高电压器件抗干扰能力弱谢谢! A:我们用自己的开发板打群脉冲到最高都正常工作(程序没有任何抗干扰措施).第230 问:Q:我刚刚设计完了一块LPC2106 的电路板.在用EASYARM 仿真器通过JTAG 接口调试没有能够使用,但是通过JTAG 口下载到FLASH 后上电复位却不能正常工作,手动复位也不行.同样的程序在购买的实验板上完全可以使用.不知道是怎么回事.我初步怀疑是复位电路问题,但不知道怎么解决.A:问题解决了!只要将P0.14 上拉到高电平就可以了.第231 问:Q:VPB 是什么意思英文全称是什么A:VPB (VLSI Peripheral Bus)第232 问:Q:请问大侠们,2104 怎样与5V 的外设连接,多谢!!下一个产品想用2104,可是用惯了51,不知怎样与5V 外设连接,多谢!!A:可以考虑使用3.3V 至5V 的缓冲器件如4245,最简单的方法就串上个小电阻. 第233 问:Q:请教大家:LPC2104 芯片中的PWM 有中断功能,请问输出置PWM 匹配通道的中断标志有什么意义,有什么作用A:举个例子,如果使用PWM 滤波生成正弦波,有中断,就方便很多!第5 章 GPIO第234 问:Q:我是在LPC2119 与光隔相连时遇到的这个问题,以前用的片子IO 口都是5V 电压,由于2119 是3.3V 所以和以前系统中采用的高速光耦相连时就涉及到两个问题:接受光耦送来的信号2119 可否承受还有2119 输出的信号能否驱动光耦搞CAN 的朋友可否同样遇到此问题,我觉得可以解决这个问题,但不敢肯定,我想通过分析光耦内部结构可以解决这个问题,有经验的朋友谈谈吧A:可以将 CAN 引脚当成普通 IO 口对待,就不会存在疑惑了.第235 问:Q:LPC2119 的IO 口输出电压是多少,我在数据手册上没有找到还有它的IO 口带不带上拉电阻A:GPIO 输出可输出高电平电压约为3.3V,手册上的Voh.GPIO 作输入时没有内部上拉.第236 问:Q:请教:LPC2214 的P2,P3 作为普通IO 时,怎么设置输入输出方向没有找到它们的IODIR!A:与P0 一样,请下载工程模板,内有头文件.第237 问:Q:请问:LPC2214 的GPIO 的管脚在输入时没有上拉,在输出时有没有上拉好像在资料里说的都没有上拉.A:P0.2,P0.3 是I2C 接口,是开漏输出,所以要外接上拉电阻,其它GPIO 不用接. 第238 问:Q:LPC2104 实验板接上JTAG 线时,P0.22 变为0 我在测试键盘时发现的,一拿下JTAG 插头,一切正常.A:使用主JTAG 调试时,P0.22 为ETM 跟踪调试口,不能作GPIO 用.第239 问:Q:请教LPC2214 的P2/P3 口做I/O 口扩展而不是EMC 怎样访问手册上没有找到,只有P0/P1的访问方法.A:同P0 口一样.请下载"EasyARM2100 开发套件快速入门和L...",里面的头文件有其地址的定义.第240 问:Q:GPIO 哪些内部有上拉,哪些没有A:《ARM 微控制器基础与实战》中说的明白,都没有上拉电阻的,不过是推挽输出的,输入0,1 都没问题,放心!第241 问:Q:因为看到LPC2114 外围电源用的是3.3V 供电,而我想用它的I2C 接口去控制后面用5V供电的芯片,因此想问一下是否可以直接接上拉电阻和5V 相连如果不能是不是只能加电平转换了谢谢!A:可以.第242 问:Q:当外部有数据送到IO 口时,是不是通过读寄存器IOPIN 就可以得到其IO 的当前状态呢A:你说的对,但是要将你要用的IO 口设为GPIO(PINSEL0\PINSEL1)方式,并将其设为输入方式(IODIR),就可以了.不过要是你用的IO 口不连续的话,要将输入的管脚状态处理一下才是你要的字节或是字数据.我就是用这种方式扩展外部CAN 总线器件的.第243 问:Q:当用用GPIO 时,输出电流是多大呢急用!A:数据手册上有,Ioh = 4mA.第244 问:Q:请教:2104 的IOPIN 这个寄存器为什么老是一个值.我的IO 不断变化,他就是不变,不知为什么A:我认为可能是IODIR(管脚方向寄存器)和PINSEL0,PINSEL1(管脚功能寄存器)中的一个寄存器没设置好吧.第245 问:Q:可以直接把+5V RAM/FIFO 的数据线和2104 连接吗(模拟总线时)A:我做过外接RAM 的实验,RAM 输入的直接连,输出到ARM 的串电阻.第246 问:Q:我用2104 的时候,怎么设置IO 口,比如例子上有一个:#define LEDCON 0x00002000.为什么设置P0.13 的时候要定义为0x00002000,是怎么计算的.谢了A:右移13 位(1 <> 6)/a_mode->ubps;U0DLM = tmp >> 8;U0DLL = tmp & 0xff;70tc = a_mode->data_bit;tc |= a_mode->stop_bit;tc |= a_mode->parity_bit;U0LCR = tc;VICIntSelect = 0x00000000; // 设置所有通道为IRQ 中断VICVectCntl0 = 0x26; // UART0 中断通道分配到IRQ slot 0,即优先级最高VICVectAddr0 = (int)IRQ_UART0; // 设置UART0 向量地址VICIntEnable = 0x00000040; // 使能UART0 中断A:要在VECTOR.S 文件中打开IRQ 中断.如"MSR CPSR_c, #0x5F"。

ARM的异常处理学习笔记转贴

ARM的异常处理学习笔记转贴

ARM 的异常处理学习笔记转贴ARM的异常处理这部分比较不好理解。

当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。

当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执行。

在进入异常中断处理程序时,要保存被中断程序的执行现场,从异常中断处理程序退出时,要恢复被中断程序的执行现场。

1、引起异常的原因(1)、指令执行引起的异常软件中断、未定义指令(包括所要求的协处理器不存在是的协处理器指令)、预取址中止(存储器故障)、数据中止。

(2)、外部产生的中断复位、FIQ、IRQ。

2、ARM中异常中断的种类(1)、复位(RESET)a、当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行,包括系统加电和系统复位。

b、通过设置PC跳转到复位中断向量处执行称为软复位。

(2)、未定义的指令当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。

(3)、软件中断这是一个由用户定义的中断指令(SWI)。

可用于用户模式下的程序调用特权操作指令。

在实时操作系统中可以通过该机制实现系统功能调用。

(4)、指令与取终止(Prefech Abort)如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行时,处理器产生指令预取终止异常中断。

(5)、数据访问终止(DATAABORT)如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问终止异常中断。

(6)、外部中断请求(IRQ)当处理器的外部中断请求引脚有效,而且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。

系统中个外设通过该异常中断请求处7)、快速中断请求(FIQ) 理服务。

(当处理器的外部快速中断请求引脚有效,而且CPSR的F控制位被清除时,处理器产生外部中断请求异常中断。

嵌入式原理思考题及答案

嵌入式原理思考题及答案

第1章复习要点1.1.1节嵌入式系统的概念1.1.3节嵌入式系统的特点1.3节嵌入式处理器1.4节嵌入式系统的组成第2章复习要点2.1节计算机体系结构分类2.3.1节 ARM和Thumb状态2.3.2节 RISC技术2.3.3节流水线技术2.4.3节 ARM存储系统第3章复习要点3.1节ARM编程模式3.2节ARM指令格式及其寻址方式3.3节ARM指令集(课上所讲的指令)第4章复习要点4.1节汇编语言源程序格式4.2节汇编语言的上机过程第5章复习要点5.1节键盘接口5.2节 LED显示器接口5.5.1节 UART异步串行接口作业题答案:1.什么是嵌入式系统?∙第一种,根据IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。

∙第二种,嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

2.与通用型计算机相比,嵌入式系统有哪些特点?⏹通常是面向特定应用的;⏹空间和各种资源相对不足,必须高效率地设计,量体裁衣、去除冗余;⏹产品升级换代和具体产品同步,具有较长的生命周期;⏹软件一般都固化在存储器芯片或单片机本身;⏹不具备自举开发能力,必须有一套开发工具和环境才能进行开发3.举例介绍嵌入式微处理器有哪几类?一、嵌入式微处理器(Embedded Microprocessor Unit, EMPU)嵌入式处理器目前主要有Aml86/88、386EX、SC-400、PowerPC、68000、MIPS、ARM系列等。

二、嵌入式微控制器(Microcontroller Unit, MCU)嵌入式微控制器目前的品种和数量最多,比较有代表性的通用系列包括8051、P51XA、MCS-251、MCS-96/196/296、C166/167、MC68HC05/11/12/16、68300等。

arm开发问题解答

arm开发问题解答

arm开发问题解答1. p153,在任何IRQ请求产生之后,微控制器跳转到地址0x00000018执行代码。

对于向量和非向量地址,可以在0x18放入下面指令:LDR pc,[pc,#-0xff0]该指令将VICVectAddr寄存器保存的地址装入PC但是这时候pc=0x00000018,pc-0xff0=fffff028,而VICVectAddr的地址是fffff030,这是怎么回事?2. p159,在复位时拉低DBGSEL时,只有管脚p0.17--p0.31的功能控制有效是什么意思?1:就是说本来这个地址(0x00000018)下,应该是放中断服务程序的入口地址的,但是这个地址被装在VICVectAddr寄存器中,所以通过这条指令(LDR pc,[pc,#-0xff0])可转移到VICVectAddr寄存器中所存放的地址出去执行。

就这么简单!2:。

1. 书上P262页有说明。

ARM7TDMI是三级流水线,PC超前于当前执行的指令8字节。

2. 应该是"只有DBGSEL为低电平时,管脚p0.17--p0.31的功能控制才有效"********************************************************************* ********************************************************对于保存非向量IRQ中断程序地址是用寄存器VICDefVectAddr,如果有2个或2个以上的非向量IRQ中断,则如何保存其各个地址。

是保存第一个非向量IRQ 中断函数的地址,还是其它的呢?如果是第一个,则是否一定要在程序中将多个非向量IRQ中断函数连续书写呢?请各位帮我看一下,谢谢!只写一个非向量中断处理函数,在函数内判断是那一个中断源产生的中断,然后分别处理。

如果不想这样做,那么就要使用向量中断了。

********************************************************************* ********************************************************有熟悉ADS这两个问题的吗1、偶尔打开AXDSEC,总是提示我有.sec文件没有加载,这是个什么文件呢?在遇到这样情况下,我从新设置了CONFIGURE TARGET就没有问题了2、在AXD下我用FLASH LOADING 来下载HEX文件到FLASH中,为什么状态栏一直显示RUNNING IMAGES?按道理下栽是很快的事情啊3、每个工程项目中的debug,debugrel,release是什么意思?怎样设置和使用1、这时ads自身的问题,好像以前我说过。

ARM指令集学习总结(转载)

ARM指令集学习总结(转载)

ARM指令集学习总结(转载)2008-11-24 01:12:37ARM指令集比较简单,本文介绍ARM指令集中需要注意和不易理解的地方。

一、ARM指令集是32位的,程序的启动都是从ARM指令集开始,包括所有异常中断都是自动转化为ARM状态,并且所有的指令都可以是有条件执行的。

二、ARM指令集是Load/Store型的,只能通过Load/Store指令实现对系统存储器的访问,而其他的指令都是基于处理器内部的寄存器操作完成的,这和INTEL汇编是不同的,初学者很不易理解。

三、指令的后缀:"S" 可选后缀,若指定S,则根据指令执行的结果更新CPSR中的条件码。

很多初学着不知道怎么更新,若这条指令执行完以后,对AR M程序状态寄存器的条件码标志(N,Z,C,V)的影响。

"! " 表示在完成数据操作以后,将更新基址寄存器,并且不消耗额外的时间。

如:LDR R0, [R1, #4] 他相当于R0 <- mem32[R1+4]R1 = R1+4;"^" LDMFD R13!, (R0-R3, PC)^ //"^"表示一条特殊形式的指令。

(在从存储器中装入PC的同时,CPSR也得到恢复)。

四、#号后面加0x或&表示十六进制:#0xFF, #&FF#号后面加0b表示二进制。

#号后面加0d表示十进制。

*******************************************************************************五、立即数寻址每个立即数都是采用一个8位的常数循环右移偶数位间接得到。

初学者不易理解:一个32位的指令不可能全部用来保存32位的立即数,所以从指令的编码格式上分析,在指令编码中只分配了12位来存储立即数,其中4位用来保存右循环值,8位用来保存一个常数,所以并不是每一个32位的立即数都是合法的。

ARM基础知识单选题100道及答案解析

ARM基础知识单选题100道及答案解析

ARM 基础知识单选题100道及答案解析1. ARM 处理器采用的架构是()A. CISCB. RISCC. VLIWD. EPIC答案:B解析:ARM 处理器采用的是精简指令集(RISC)架构。

2. 以下哪个不是ARM 处理器的特点()A. 低功耗B. 高性能C. 复杂指令集D. 体积小答案:C解析:ARM 处理器是精简指令集,不是复杂指令集。

3. ARM 指令集的寻址方式不包括()A. 立即寻址B. 间接寻址C. 寄存器间接寻址D. 基址加变址寻址答案:B解析:ARM 指令集的寻址方式包括立即寻址、寄存器寻址、寄存器间接寻址、基址加变址寻址等,没有间接寻址。

4. 在ARM 体系结构中,用于存储程序状态寄存器的是()A. R0B. R13C. R15D. CPSR答案:D解析:CPSR(Current Program Status Register)用于存储程序状态。

5. 以下关于ARM 异常的说法错误的是()A. 复位异常优先级最高B. 未定义指令异常可以用于软件仿真C. 数据中止异常发生在数据访问时D. 快速中断异常响应速度比普通中断慢答案:D解析:快速中断异常响应速度比普通中断快。

6. ARM 处理器的工作模式不包括()A. 用户模式B. 系统模式C. 管理模式D. 超级模式答案:D解析:ARM 处理器的工作模式包括用户模式、系统模式、管理模式、中止模式、未定义模式、中断模式、快速中断模式。

7. 下列属于ARM 处理器的寄存器组的是()A. 通用寄存器B. 状态寄存器C. 控制寄存器D. 以上都是答案:D解析:ARM 处理器的寄存器组包括通用寄存器、状态寄存器和控制寄存器。

8. 在ARM 中,实现子程序调用的指令是()A. BB. BLC. BXD. MOV答案:B解析:BL 指令用于实现子程序调用,并保存返回地址。

9. 以下关于ARM 流水线的描述,错误的是()A. 提高了指令执行效率B. 增加了处理器的复杂度C. 减少了指令执行周期D. 不会产生流水线冲突答案:D解析:ARM 流水线可能会产生流水线冲突。

从ARM汇编指令机器码解释一些问题

从ARM汇编指令机器码解释一些问题

28~31bits(cond)是条件码,就是表明这条语句里是否有大于、等于、非零等的条件判 断,这 4bits 共有 16 种状态,分别为:
二进制码 0000 0010
0100 0110 1000
1010
1100
1110
指令符号 EQ
CS/HS
MI VS HI
含义 相等 进位/无符号数 大于等于 减/负数 溢出 无符号数大于
以下内容节选自“底层工作者手册之嵌入式操作系统内
核”,更多内容请访问 /ifreecoding
为什么 MOV R0, #0x12345678 这条指令无法编译,而 MOV R0, #0x678 却可以编译通 过?
为什 么芯片会 有立即数 寻址,寄 存器寻 址,间接 寻址等多 种寻址方 式?一 种寻址方 式 不可以么?
MOV R0, #0x12345678
这条指令。立即数#0x12345678 是 32bits 数据,已经超过了 shifer_operand 域所能装下 的最长 12bits 数据,如果把 0x12345678 全部被存到指令中,那么该指令中将无法存储条件 码等其它指令信息,因此,这条指令在编译时就会报错。
1101
0 0000 0000 000000000001
EQ 的条件 码为 0000
寄存器 MOV 的 指令没 方式 指令码 有 S 标志
目的寄存 源操作数为寄存
器为 R0
器 R1
表 2 MOV 指令汇编格式对比
BL 指令跳转到目的地址,同时将 BL 指令的下条指令地址存入 LR 寄存器供程序返回 时使用,调用函数时可以使用 BL 指令,如:
BL 指令的 0~23bits 存放的是要跳转的相对地址,由于指令所在地址必须是 4 字节对齐 的,因此跳转的地址最低 2bits 必然是 0,因此 BL 指令 0~23bits 保存的是省略这最低 2bits 的地址,如果补全了这 2bits ,BL 指令就可以表示 26bits 的跳转地址。在这 26bits 中需要使 用 1bit 表示向前跳还是向后跳,那么剩下的 25bits 就可以表示 32MByts 的范围了,225=32M, 因此,我们在很多文档上可以看到 B 跳转指令只能跳转到±32MBytes 范围内的说明,就是 这个原因。

SL811H/S在基于ARM7的嵌入式硬件平台中的应用

SL811H/S在基于ARM7的嵌入式硬件平台中的应用
us d fr b t o tmo e a d sa e mo e i e o oh h s d n lv d n USB. e meh d whc e eo st e US d v n P b df i g Th t o i h d v lp h B r ei C y mo i n i y de c i tri lo d s us e Th n e a e c n b e n mbe de y tm i h e d a ts t h bewe n s rp o s as ic s d. e i t r c a e us d i e f d d s se wh c n e fs wi t e c
维普资讯

7 4・
《 测控技术) 06年 M L S 1H 1 R 7的嵌入式硬 件平 台中的应用
刘晔波 , 朱欣 华
( 东南大学 仪 器科学 与工程系 , 江苏 南京 2 0 9 ) 106
U B h s mo e a d sa e mo e An a ec mmu ia e i ik i o t d n C i lv d . S o t d n lv d . d i c n b o t n c td w t U d s h s mo e a d P n sa e mo e h n Ke r s S 8 ; mb d e y t m; y wo d : L 1 e e d d s s 1 e ARM; 3 4 O h s sa e mo e S C 4B X; o t lv d /
L U Yeb , Z n h a I — o HU Xi — u ( eat et f nt m n o c neadE g er g Suhat nvri , aj g2 09 , hn ) D pr n o s u et f i c n ni e n ,o t s U i sy N i 10 6 C ia m I r Se n i e e t n n

ARM调试问题总结

ARM调试问题总结

标题:ARM调试问题总结2010-04-30 15:47:52基于ADS的ARM调试有关问题总结1.在添加文件的过程中你可能已经发现了CodeWarrior IDE 为用户建立了三个Target,分别是“DebugRel”、“Realse”、“Debug”,这三个Target 分别表示三种调试方式。

DebugRel 表示在生成目标的时候会为每一个源文件生成调试信息;Debug 表示为每一个源文件生成最完全的调试信息;Release 表示不生成任何调试信息。

一般默认选择“DebugRel”。

同时从图6 可以发现每次添加文件的时候都会询问添加到哪个“Target”,一般默认三个都添加,点击确定。

2.我在编译程序的时候出现了这样的错误,请问是什么问题啊Error : (Fatal)L6002U: Could not open file D:\...\tmmgrsp\周力功\ARM嵌入式系统实验教程\FlashDown.mcpre:别用中文名路径,换成英文的;点击Project下的Remove Object Code..,然后在重新编译下就OK了。

3.刚买了一块2131开发板,不管怎样擦除都不能在AXD下仿真错误显示:Error, FLASH is protected by user configation!re:1:请使用EasyJTAG V1.06的版本;2:在JTAG配置中选中“当需要的时候擦除”。

4.在AXD中提示error 0x40001e00! FLASH Sector 0 write failed!re:1. 使用EasyJTAG写外部FLASH要注意,需使用16位总线方式,需要使用SST39VF106芯片.2. 如果是自己做的板子,需要先在内部RAM调试通过,保证EasyJTAG与板子已经连通.3. 如果有外部RAM,要先通过(测试)外部RAM来测试总线.5.在AXD中提示RDI Warning 00254:Unimplemented RDI message.re:是JTAG的问题.可以先使用ISP操作试试就知道了,如果能ISP,说明LPC2104 没有损坏,还能正常运行程序JTAG的nRST、TDI、TMS、RTCK等引脚注意要接上下拉电阻,以确保JTAG在上电时有一个稳定的初始状态,具体参看ARM公司给出的JTAG参考电路。

ARM题库(附答案)

ARM题库(附答案)

ARM题库(附答案)一、判断题(共100题,每题1分,共100分)1.循环冗余码校验的基本原理是将一个数据块看成一个位数很长的二进制数,然后用一个特定的数去除它,将余数作校验码附在数据块后一起发送。

A、正确B、错误正确答案:A2.引导程序一般由c语言编写,应用程序一般由汇编语言编写A、正确B、错误正确答案:B3.典型嵌入式操作系统是不包括Android的。

A、正确B、错误正确答案:B4.滤波电路采用了8个0.1uF的电容(C12-C19)并联,为CPU电源提供滤波功能。

A、正确B、错误正确答案:A5.小端对其是指多字节的数据在存储器中存储时是低地址存储高有效位。

A、正确B、错误正确答案:B6.当STM32的I/O端口为输入时,输出缓冲器被禁止A、正确B、错误正确答案:A7.S3C2410X是32位处理器A、正确B、错误正确答案:A8.STM32三种启动模式对应的存储介质均是芯片内置A、正确B、错误正确答案:A9.全双工制式是指通信双方均设有发送器和接收器,且信道划分为发送信道和接收信道A、正确B、错误正确答案:A10.嵌入式系统的特点包括专用性强,可靠性低,生命周期长等特点A、正确B、错误正确答案:B11.串行通信按照数据传送方向分为单工制式,半双工制式,全双工制式.A、正确B、错误正确答案:A12.Coryex-R系列的关键特性为高性能,实时,安全,经济实惠。

A、正确B、错误正确答案:A13.晶振一般叫作晶体谐振器,是一种机电器件。

A、正确B、错误正确答案:A14.STM32串口既可以工作在异步模式也可以工作在同步模式下。

A、正确B、错误正确答案:A15.STM32芯片CPU工作时最高温度为-40—85°CA、正确B、错误正确答案:A16.在中断系统的设计中,中断源产生中断请求,对应的中断标志位就会被置位。

在中断服务程序中,要将对应的中断标志位用软件清零。

A、正确B、错误正确答案:A17.程序运行过程中的资源可以是显示器,键盘,但不可以是一个数组或者变量A、正确B、错误正确答案:B18.GPIO_Mode_IPD表示下拉输出A、正确B、错误正确答案:A19.在计算机系统中,电源故障、内存出错、总线出错等是不可屏蔽中断。

ARM经典300问(271~291) 免费下载

ARM经典300问(271~291) 免费下载

Q:我用开发板自带的一个程序Debug 调试,然后AXD 提示:Warnning! interrupt vectors data is not correct!Program you downloaded can not run freely!我不知道其中中断向量的地址是如何算出来的,也就是说程序中的异常向量所指向的位置我不清楚.我买的《ARM 微控制器基础与实战》中提到这儿有一句话解释了下面的程序:在保留的异常向量位置填数据0xb9205f80,是为了使向量表中所有的数据32 位累加和为0.(没明白,0xb9205f80 是如何计算出来的!)VectorsLDR PC, ResetAddrLDR PC, UndefinedAddrLDR PC, SWI_AddrLDR PC, PrefetchAddrLDR PC, DataAbortAddrDCD 0xb9205f80LDR PC, [PC, #-0xff0]LDR PC, FIQ_AddrResetAddr DCD ResetUndefinedAddr DCD UndefinedSWI_Addr DCD SoftwareInterruptPrefetchAddr DCD PrefetchAbortDataAbortAddr DCD DataAbortNouse DCD 0IRQ_Addr DCD 0FIQ_Addr DCD FIQ_HandlerA:从mem 窗口看这些地址是什么数(32 位方式),然后加起来.第272 问:Q:我将光盘里的EINT1 中的:71config,init.s,LPC2106.htarget.ctarget.hvectors.seint1_led.c加入项目中,设置的编译环境为:debug, Release DebugRel 中的R0 base 为0x40000100;Rw base 为: 0x40003000;Image entry point 为0x40000100.编译通过,调试,f5 出现第一个默认断点,在全速执行,程序在while(1) ;循环,按k1 键led4 不闪烁,我想是没有进入中断,但我不知道这是为什么,另外我将r0base 设为0x40000100 是认为0x40000000 到0x40000100 之间要放置remanp 后的中断向量表,不知道这样做对否.A:如果设置robase 设为0x40000100,那么你要把向量表的代码复制到0x40000000,然后再REMAP 操作.另处用我们的EasyJTAG 暂时不能单步调试中断,否则会破坏VIC 的状态. 请用先设置断点,然后全速执行的方式调试.特别注意不能在0x18 处设置断点(别的仿真器也不能在这设置断点,否则破坏VIC 的状态).Q:贵公司网站上提供的可固化的中断程序中,是将中断向量表先拷贝到0X40000000,再REMAP 到FLASH 的底部(我的理解).我认为既然是固化到FLASH 里,把完成上述功能的程序去掉不是也可以吗即下面的程序段:; 实现REMAP 操作REMAPS MOV R2,#0x40000000 ; 复制中断向量代码,设置目标地址LDR R1,=Vectors ; 设置源地址LDMIA R1!,{R3-R10} ; 共复制16 个字(64 字节)STMIA R2!,{R3-R10}LDMIA R1!,{R3-R10}STMIA R2!,{R3-R10}LDR R2,=MEMMAP ; REMAP 操作MOV R1,#0x02STR R1,[R2]A:可以去掉,只是这样做可以动态改变向量表.第274 问:Q:在《ARM 微控制器基础与实践》中的157 页,在0X0000018 处加LDR PC,[PC,#-0XFF0] 指令,为什么就会将VICVectAddr 寄存器中保存的地址装入PCA:like this:VICVectAddr = 0xFFFFF0300x00000018+0x08-0xFF0 = 0xFFFFF030therefore PC = [FFFFF030]72A:为什么不能进入中断,init.s,target.c 都是贵公司的提供的启动代码!!!向量的初始化为:VectorsLDR PC, ResetAddrLDR PC, UndefinedAddrLDR PC, SWI_AddrLDR PC, PrefetchAddrLDR PC, DataAbortAddrDCD 0xB8A06F58LDR PC, [PC,#-0xff0]LDR PC, FIQ_AddrResetAddr DCD ResetUndefinedAddr DCD UndefinedSWI_Addr DCD SoftwareInterruptPrefetchAddr DCD PrefetchAbortDataAbortAddr DCD DataAbortNouse DCD 0IRQ_Addr DCD 0FIQ_Addr DCD FIQ_HandlerUndefinedSoftwareInterruptB SoftwareInterruptPrefetchAbortB PrefetchAbortDataAbortB DataAbortFIQ_HandlerSTMFD SP!, {R0-R3, LR}BL FIQ_ExceptionLDMFD SP!, {R0-R3, LR}SUBS PC, LR, #4主程序如下:void __irq IRQ_Handler(void){}73void __irq Time1_Handler(void){}int main(void){...T0PR = 99;T0MCR = 0x03;T0MR0 = 110592/2;T0TCR = 0x03;T1PR = 99;T1MCR = 0x03;T1MR0 = 70000;T1TCR = 0x03;T0TCR = 0x01;T1TCR = 0x01;VICIntSelect = 0x00000000; VICIntEnable = 0x00000030; VICVectCntl0 = 0x00000022; VICVectAddr0 = (int)IRQ_Handler; VICVectCntl1 = 0x0000002f; VICVectAddr1 = (int)Time1_Handler; while(1);}A:the Problem may be the channel selectionVICVectCntl0 = 0x00000022; may be VICVectCntl0 = 0x00000024;VICVectCntl1 = 0x0000002f; may be VICVectCntl1 = 0x00000025;第275 问:Q:断点如果设置在启动时钟节拍之后,在断点处停顿后在继续运行,程序运行就异常了,这是什么原因A:不是不中断,而是时钟走过头,还需很长时间才中断.target.c 如下修改即可避免:T0MCR = 0x01; 改为T0MCR = 0x03;函数Timer0 改为void Timer0(void){T0IR = 0x01;// T0MR0 += (Fpclk / OS_TICKS_PER_SEC); // 删除此句74VICVectAddr = 0; // 通知中断控制器中断结束OSTimeTick();}第276 问:Q:请教寄存器VICVectAddr 和VICVectAddr0~15 的使用区别,看文档没有明白,谢谢!A:VICVectAddr 在发生中断时,存放有服务程序的地址(来自VICDefVectAddr 或VICVectAddr0~15);而VICVectAddr0~15 是存放各个向量中断服务程序地址的寄存器,当发生向量中断时,相应的地址会自动装载到VICVectAddr 中.第277 问:Q:在一个程序中同时编入两个中断时,不知道如何将一个中断的优先级设定高于另一个中断.例如:外部中断和定时器的中断.A:VICVectCntl0~15 优先级递减,参看实验程序IRQ2_test.第278 问:Q:还有在AXD 环境下,单步执行怎么起不了作用,会跳到void IRQ_Exception(void)里面呢A:有中断时不能单步调试,否则VIC 工作异常.第279 问:Q:我想问向量表累加和是如何计算的A:前8 个字的32 位机器码相加.第280 问:Q:我把程序下载到FLASH 中发现MEMMAP 的值是01,可是我把程序下载到RAM 时发现MEMMAP的值是0;不过程序都能运行.我这个程序没有中断,是不是如果我的程序中有中断而且在RAM 中运行时就必须修改MEMMAP 同时拷贝向量表到0x40000000 呢如果程序中没有中断并在RAM 中运行时就可以不管MEMMAP 的值了阿A:是的.第281 问:Q:为什么在EINT1 中断实验程序中,中断函数里没有VICVectAddr=0x00;是因为它是非向量中断吗A:因为它根本没有使用VIC 的VICVectAddr 来判断中断服务程序入口.75第282 问:Q:当我作向量IRQ 中断实验时,将EINT0 设为最高优先级,EINT1 次之.我在IRQ_Eint1(void) 函数中加入一条while(1)指令,想作一下优先级差别的实验.我先让EINT1 中断,这时进入IRQ_Eint1(void)函数中,并产生死循环,然后我按下KEY3 想产生EINT0 中断,结果却没反应,我已经将EINT0 的优先级设成了最高,为什么不进入EINT0 中断函数A:有没有允许中断进入中断后处理器自动设置cpsr 中的中断允许位,禁止中断.第283 问:Q:执行FIQ 代码时,操作系统在做什么呢当执行FIQ 中断代码时,需要注意什么呢要对相关寄存器进行入栈吗那执行完了以后,又怎么返回到OS 里执行任务呢FIQ 可不可以调用OS 函数IRQ 呢A:1.FIQ 服务程序中断了OS 啊.2.FIQ 中断服务不在OS 管理范围内,所以不能访问任何与OS 相关的函数及变量.3.FIQ 其实就是普通的FIQ 中断服务函数而已,与普通的一样处理.4.受OS 管理的IRQ 可以调用OS 的系统功能函数.第284 问:Q:请问,在vectors.s 程序中中断向量操作如下:VectorsLDR PC, ResetAddrLDR PC, UndefinedAddrLDR PC, SWI_AddrLDR PC, PrefetchAddrLDR PC, DataAbortAddrDCD 0xb9205f80LDR PC, [PC, #-0xff0]LDR PC, FIQ_AddrResetAddr DCD ResetUndefinedAddr DCD UndefinedSWI_Addr DCD SoftwareInterruptPrefetchAddr DCD PrefetchAbortDataAbortAddr DCD DataAbortNouse DCD 0IRQ_Addr DCD 0FIQ_Addr DCD FIQ_Handler;未定义指令UndefinedB Undefined;软中断SoftwareInterruptB SoftwareInterruptPrefetchAbort76B PrefetchAbort;取数据中止DataAbortB DataAbort;快速中断FIQ_HandlerSTMFD SP!, {R0-R3, LR}BL FIQ_ExceptionLDMFD SP!, {R0-R3, LR}SUBS PC, LR, #4现我将它改为VectorsLDR PC, =ResetLDR PC, =UndefinedLDR PC, =SoftwareInterruptLDR PC, =PrefetchAbortLDR PC, =DataAbortDCD 0xb9205f80LDR PC, [PC, #-0xff0]LDR PC, =FIQ_Handler;未定义指令UndefinedB Undefined;软中断SoftwareInterruptB SoftwareInterruptPrefetchAbortB PrefetchAbort;取数据中止DataAbortB DataAbort;快速中断FIQ_HandlerSTMFD SP!, {R0-R3, LR}BL FIQ_ExceptionLDMFD SP!, {R0-R3, LR}SUBS PC, LR, #4程序编译可以通过,用AXD 调试时报告不能自由运行,可以仿真运行.按我的理解DCD 前面为地址(也就是指针),DCD 后面为4 个字节的内容(指针的值), LDR PC,ResetAddrLDR PC,=Reset,都是采用间接寻址,也就是将Reset 的地址放进PC,为什么"LDR PC, ResetAddr"地址从中间转一道就对了而"LDR PC, =Reset"就不对,既然不对为什么还可以仿真,而77脱机运行就不行A:因为异常向量表累加和不为0.详细看一看5.1.3 节或6.3 节.我记得以前也有一个类似的帖子可以参考.第285 问:Q:是不是FIQ 与IRQ 的使用上没有什么区别FIQ 自己独有的寄存器有什么用我是否可以把INT1,UART1 等中断设为FIQFIQ 的中断服务程序应该定位到什么位置A:没有本质的区别.FIQ 拥有独立的R8_fiq~R12_fiq,FIQ 中断时,其它模式相应的寄存器就可不入栈,从而加快FIQ 的处理.多个中断源共用还不如单独用IRQ.因为FIQ 比较适合在人命关天的情况下用.第286 问:Q:这是VECTORS.s 中的一段,里面的REMAP 操作都做了些什么好像是保护一类的操作. REMAP 和MEMMAP 各是什么含义如果我要同时使用两个外部中断,应当怎样写这一段REMAPS MOV R2,#0x40000000LDR R1,=VectorsLDMIA R1!,{R3-R10}STMIA R2!,{R3-R10}LDMIA R1!,{R3-R10}STMIA R2!,{R3-R10}LDR R2,=MEMMAPMOV R1,#0x02STR R1,[R2]MSR CPSR_c, #0x1fMOV PC, R0A:REMAP 是重映射的意思,MEMMAP 是存储器映射控制寄存器.MEMMAP = 0b01,不映射,程序由FLASH 开始.MEMMAP = 0b10,程序从RAM 开始,如果你的程序在RAM 中,必须使用这种方式.如同时使用两个中断,这一段也不用改.第287 问:Q:特定的异常出现时,处理器进入相应的异常模式.如出现IRQ 就进入IRQ 模式,那出现什么情况进入管理模式呢A:复位或SWI 中断.78第288 问:Q:请问什么时候需要通过软件中断进入管理模式A:如果你的程序是在用户模式下运行,那就可以通过软中断进入特权模式,修改CPSR 寄存器.如开关IRQ 中断(CPSR 的I 位).第289 问:Q:软件中断是用软件置位的方法产生中断请求,比如定时器0 中断请求.用软件中断的方法可以产生IRQ, FIQ 中断,对吗A:VIC 中的软件中断是这样,而swi 产生的异常,英文也为软件中断,它是不一样的.第290 问:Q:我现在在看ads 编译器文档中的swi 部分,我理解软中断就是一种预期发生的中断而一般中断是不可预期的,对吗A:可以这样说.第291 问:Q:为什么以下的程序进不了中断#include "config.h"#define HC595_CS 0x00000100#define LEDCON 0x00000400 // LED1~LED4 设置为输出void DelayNS(uint32 dly){uint32 i;for(; dly > 0; dly--)for(i = 0; i < 50000; i++);}void MSpiIni(){SPI_SPCCR = 0x52; // 设置SPI 时钟分频SPI_SPCR = 0xB0; // 配置MSTR = 1 CPOL = 1 CPHA = 0 LSBF = 0}/***********************。

ARM开发板学习中250个经典问答题集

ARM开发板学习中250个经典问答题集
第 4问:
Q:在程序移植的过程中,什么代码段处于什么样的模式,这可真是一个困扰人的大难题, 有没有一种标志或办法能够识别"代码段处于什么样的模式"
A:读取 CPSR ,任何时候都是可以读.
第 5问: Q:为什么保护现场时,总是保护 R0-R3,R12,为什么不保护R4-R11 A:请看一看"ARM-thumb 过程调用标准"这个文档.
第 21问: Q:请教:如何定义不被初始化变量A:让编译器不知道有这个内存地址即可. A:如用分散加载文件分配 RAM故意预留一部分 RAM 不分配,用它来存您不需要初始化 的东西.或者不调用编译器提供的启动代码,不过这样可能编程会麻烦一些.
第 22问: Q:我直接通过 JTAG 口下载 EasyArm板带的 Ext1_test程序到ARM中,出现中断向量的 告警: interrupt vector is not correct arm is not running freely. 果然复位后芯片不能运行.但是我用串口下载后芯片能正常工作,中断也行的. 并且我用 JTAG 仿真的话,芯片能正常工作,中断也行的,唯独 JTAG口下载不行. 不知道是什么原因? A:仿真器配置中要设置 Erase Flash when need.也可以这样试试: 1.可以先打开一个工程在 RAM中调试运行;2.stop程序;3.使用File->Load Image…重 新加载Ext1_test 生成的*.axf 文件. Q:仿真器配置中我是设置了 Erase Flash when need,但照你说的话,那不是在 RAM 下 调试吗在 RAM 下调试我是可以的,但是下载后出现 interrupt vector data is not correct. 我又看了几篇文章,是不是跟中断向量表的累加和不为零有关系啊A:是的,是向量表的 累加和不为零. 因为如果用ISP 下载能运行,说明向量表的累加和已为零,而用 JTAG 下载不能运行的 情况可能是 没有正常下载代码.先在 RAM中调试,目的是为了后面正确下载程序到FLASH.

ARM学习问题集及解决措施(2018-5-20)

ARM学习问题集及解决措施(2018-5-20)

symbol.\Obj\output.axf:
Error: L6218E: Undefined symbol
FSMC_NORSRAMCmd from tft_lcd.o). (referred
error: #247: function "DelayUs" has already been defined error: #109: must have function type expression (pointer-to-)
error: #18: expected a ")" L6200E: Symbol temp multiply defined (by wenshidu.o and main.o). Error:
L6218E: Undefined
如果是出现在 c 文件中, 多半是因为少了一个")",或 者错误行有编译器不识别的字符 变量你给付了两次值 你看看是不是那个外部变量你又给赋值了 main.c 申明, 其他.c 文件对应的.h 文件中用 extern 引用 tft_lcd 里面有没有添加 fsmcXXX.h 之类的头文件, 这个错误是说你使用的函数没有被Biblioteka 义。一般只要添 加相应的头文件即可
有一个同名的 DelayUs 已经被定义过了
意思是表达式需要一个(指针)函数参数
error: #159: declaration is incompatible with previous "wr_lcd" (declared at line 40) void a(void) //函数 a 的实体 { b(); //调用函数 b } void b(void) //函数 b 的实体 { ... }

ARM复习课后题答案(完整版)..

ARM复习课后题答案(完整版)..

1.国内嵌入式系统行业对嵌入式系统的定义是什么?如何理解答:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

从这个定义看以看出嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统要求进行合理的裁剪利用。

因此有人把嵌入式系统比作是一个针对特定的应用而量身定做的专用计算机系统。

2.当前最常见的源码开放的嵌入式操作系统有哪些,请举出两例,并分析其特点答:嵌入式linux和嵌入式实时操作系统uc/os-IILinux:(1)linux是源码开放的,每一个技术细节都是透明的,易于裁剪定制。

(2)目前嵌入式linux已经在多种嵌入式处理器芯片移植成功,有大量且不断增加的开发工具,这些工具为嵌入式系统开发提供了良好的开发环境。

(3)Linux内核小、功能强大、运作稳定、效率高。

Ucos:(1)源代码公开(2)可移植性。

(3)可固化(4)可裁剪(5)占先式(6)多任务(7)可确定性。

(8)系统服务第2章ARM技术与ARM体系结构3.arm处理器的工作模式有哪几种,其中哪些为特权模式,哪些为异常模式,并指出处理器在什么情况下进入相应的模式。

答:ARM 处理器共有7 种工作模式:用户模式:非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下执行。

在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作模式,如果有异常发生,处理器会自动切换工作模式FIQ 模式:也称为快速中断模式,支持高速数据传输和通道处理,当一个高优先级(fast)中断产生时将会进入这种模式。

IRQ 模式:也称为普通中断模式,:当一个低优先级中断产生时将会进入这种模式。

在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。

通常的中断处理都在IRQ 模式下进行。

SVC 模式:称之为管理模式,它是一种操作系统保护模式。

当复位或软中断指令执行时处理器将进入这种模式。

ARM 接口试题

ARM 接口试题

ARM 接口试题arm接口试题Arm接口测试题一、选择题(每题2分,共50分,包括单选和多选,多选、少选均不得分)1.手臂属于(a)[a]risc架构[b]cisc架构2.arm指令集为(c)位宽,thumb指令集为(b)位宽。

[a]8位[b]16位[c]32位[d]64位3.arm指令集(d)字节对齐,thumb指令集(b)对齐[a]1[b]2[c]3[d]44.复位后,arm处理器处于(c)模式,(b)状态[a] 用户[b]svc[c]系统[d]手臂[e]拇指5.arm处理器总共(e)个寄存器,system模式下使用(a)个寄存器,svc模式接下来,使用(b)寄存器。

[a]17个[b]18个[c]32个[d]36个[e]37个6.arm处理器中优先级别最高的异常为(e),(c)异常属于硬件产生的中断[a]fiq[b]swi[c]irq[d]svc[e]reset7.arm数据处理指令中有效的立即数是(a,c,e)[a]0x00ab0000[b]0x0000ffff[c]0xf000000f[d]0x08000112[e]0x00001f80[f]0xFFFFFF[g]0[ h]0xff0000008。

在atpcs法规中,建议的最大子功能参数为(d)[a]1[b]2[C]3[d]49,即程序状态寄存器(d)[a]r13[b]sp[c]spsr[d]cpsr10.在用arm汇编编程是,其寄存器有多个别名,通常pc 是指(d),lr是指(c),SP表示(b)[a]r12[b]r13[c]r14[d]r1511.cpsr寄存器中反映处理器状态的位是(d)[a]j位[b]i位[c]f位[d]t位12.下面属于arm子程序调用指令的是(d)[a] b[b]bx[c]bl[d]mov13.arm7属于(a)结构,arm9属于(b)结构。

[a] 冯诺依曼[b]哈佛大学14.arm7是(b)级流水线,arm9是(c)级流水线。

《微机原理与嵌入式系统基础--练习_答案》1

《微机原理与嵌入式系统基础--练习_答案》1

练习题(首先,在批改作业的过程中发现存在大量的抄袭问题,错误都是千篇一律,特此警戒)1、简述冯诺依曼体系结构计算机的要点和工作过程。

答:冯诺依曼体系结构计算机的要点:计算机中的信息(程序和数据)以二进制方式表示。

程序预存储,机器自动执行。

计算机由运算器、控制器、存储器、输入设备和输出设备五大部分组成。

计算机通过执行预存储在存储器中的程序来完成预定的运算。

程序由计算机的指令序列构成,计算机在处理器的控制下,首先从存储器读取一条待执行的指令到处理器中,接下来分析这条指令,而后发出该指令对应的电平脉码序列,即执行该指令。

并以此递归运行程序。

2、简述计算机各组成部分的功能。

答:♦中央处理单元(CPU):主要由运算器、控制器构成。

其中运算器主要用于完成诸如加、减、乘、除等算术运算和左右移位、与、或、非等逻辑运算;控制器主要用于完成机器指令的解析和执行,控制运算器进行相应的运算,控制数据在计算机各组成部分之间传送,控制计算机各组成部分有条不紊地协调工作等。

♦存储器(Memory)是计算机系统中用来存储程序和数据的信息记忆部件。

♦输入/输出设备:信息进出计算机的数据通道。

3、何谓总线?计算机中有哪几类总线?简述其用途。

答:计算机的总线(Bus)就是连接计算机硬件各部件,用于计算机硬件各部件之间信息传输的公共通道。

按照其传送信号的用途属性,总线可细分为:地址总线(Address Bus)、数据总线(Data Bus)和控制总线(Control Bus)三类。

♦地址总线(A_Bus):专用于在CPU、存储器和I/O端口间传送地址信息的信号线。

此类信号线传送的信息总是从CPU到存储器或I/O端口,它是单向信号线。

♦数据总线(D_Bus):专用于在CPU、存储器和I/O端口间传送数据信息的信号线。

此类信号线传送的信息可以是从CPU到存储器或I/O端口(“写”操作),也可能是从存储器或I/O端口到CPU (“读”操作),它是双向信号线。

基于SL811HST和S3C4510B的嵌入式USB主机与设备的设计

基于SL811HST和S3C4510B的嵌入式USB主机与设备的设计

基于SL811HST和S3C4510B的嵌入式USB主机与设备的
设计
冉光志;赵明生
【期刊名称】《微计算机信息》
【年(卷),期】2005(21)11Z
【摘要】本文介绍了基于USB接口芯片SL811HST和ARM微处理器S3C4510B 的嵌入式USB主机及设备的设计与实现.详细介绍了Linux平台下主机控制器驱动程序和USB设备固件与驱动程序的设计。

文中也简要介绍了USB规范及Linux 中的USB子系统。

【总页数】3页(P77-79)
【作者】冉光志;赵明生
【作者单位】清华大学
【正文语种】中文
【中图分类】TP336
【相关文献】
1.基于SL811HST和PIC18F452的USB主机系统的设计 [J], 郑翔;殷瑞祥
2.基于嵌入式操作系统的USB设备主机驱动程序的设计 [J], 段沛沛;赵明
3.基于S3C4510B的嵌入式USB的设计与实现 [J], 李信利;吕月娥
4.基于S3C4510B的嵌入式USB的设计与实现 [J], 李信利;吕月娥
5.基于SL811HST和S3C4510B的嵌入式USB主机与设备的设计 [J], 冉光志;赵明生
因版权原因,仅展示原文概要,查看原文内容请购买。

arm嵌入式技术原理与应用答案

arm嵌入式技术原理与应用答案

arm嵌入式技术原理与应用答案【篇一:嵌入式系统原理与开发课后答案】章嵌入式系统概述:1、什么是嵌入式系统?是简单列举一些生活中常见的嵌入式系统的实例。

p3嵌入式系统是用于检测、控制、辅助、操作机械设备的装置。

以应用为中心,一计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积和功耗等严格要求的专用计算机系统。

3、是比较嵌入式系统与通用pc的区别。

p3(1)嵌入式系统是专用的计算机系统,而pc是通用的计算机系统。

(2)技术要求不同,通用pc追求高速、海量的数据运算;嵌入式要求对象体系的智能化控制。

(3)发展方向不同,pc追求总线速度的不断提升,存储容量不断扩大;嵌入式追求特定对象系统的智能性,嵌入式,专用性。

4、嵌入式体统有哪些部分组成?简单说明各部分的功能与作用。

p6(1)硬件层是整个核心控制模块(由嵌入式微处理器、存储系统、通信模块、人机接口、其他i/o接口以及电源组成),嵌入式系统的硬件层以嵌入式微处理器为核心,在嵌入式微处理器基础上增加电源电路、时钟电路、和存储器电路(ram和rom等),这就构成了一个嵌入式核心控制模块,操作系统和应用程序都可以固化在rom 中。

(2)中间层把系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关。

一般包括硬件抽象层(hardware abstract layer,hal)和板级支持包(board support package,bsp)。

(3)软件层由实时操作系统(real time operating system,rtos)、文件系统、图形用户接口(graphical user interfaces,gui)、网络组件组成。

(4)功能层是面向被控对象和用户的,当需要用户操作是往往需要提供一个友好的人际界面。

5、嵌入式系统是怎么分类的?p7按照嵌入式微处理器的位数分类(4位、8位、16位、32位、64位);按照是实时性分类(硬实时系统式之系统对响应时间有严格的要求;软实时系统是对响应时间有一定要求);按照嵌入式软件结构分类(循环轮询系统、前后台系统、多任务系统);按照应用领域分类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最近做ARM +SL811HS HOST开发,遇到的问题,有的解决了,有的还在调试中,特此记录:
1、SL811HS 寄存器无法读写。

ARM的总线模式是16位和32位,所以在寻址时会自动忽略没有意义的地址线ADDR0(16位模式)
或ADDR0-ADDR1(32位模式)所以当SL811HS读写控制线A0 不能接在ADDR0(16位模式)
或ADDR0-ADDR1(32位模式),还有就是要注意ARM的Bank寻址使能输出nGCS的寻址范围。

2、HOST在设备枚举第一次获得设备描述符时发送第一个stup包,U盘设备超时。

前提是要保证数据包格式正确。

有下面几种说法:
1)、有些U盘设备比较慢,要在事务处理添加适当的延时。

(我实验未通过)。

2)、晶振问题,不能使用12M无源晶振,采用48M有源晶振。

(有人尝试成功,有人质疑)
3)、1ms的SOF没有设置正确。

4)、总线干扰。

5)、data0/data1没有正确切换。

3、UFI命令发送错误。

1)、命令必须是严格的31个字节,而且要注意所采用的处理器的字节序,注意调整31个
字节的数据顺序。

2)、处理器编译时的字对齐会将31个字节的非字对齐调整为32个字节,所以ARM上在定
义结构体时要注意添加__packed (ADS1.2)。

4、U盘扇区可以读取正确,无法写入。

出现的现象是:读取U盘扇区512个字节数据完全正确,但是写入时,发送write10命令
后返回ACK握手包,接着发送512个数据,分8次传输,每次都返回ACK 握手包,但是在
接收设备的CSW命令时设备返回超时握手包。

如果发送大于512个字节的数据,在第9次
发送数据就返回超时握手包。

尝试写入前改变data0/data1切换顺序,设备则返回NAK
握手包。

1)、data0/data1切换错误。

2)、1ms的SOF不正确。

3)、12M无源晶振不行,改48M有源晶振。

(有人使用12M晶振可行)4)、CBW-Data-CSW 之间添加适当的延时。

(可用亦可不用,不定)
5)、U盘本身的问题,换不同的U盘结果不一样。

针对问题2和问题4,最近终于搞定了,归结一点是务必保证硬件板对USB供电是5V而且要保证
电流足够大。

发送write10后,U盘设备解析命令,首先执行扇区的擦出除操作,因为U盘的
FLASH擦除需要的电流比较大,所以要保证USB进入的是5V供电,电压不稳定会导致U盘擦除
失败,导致写入错误。

对有些U盘工作需要比较大的电流,所以电流不够也会使得枚举时发送
SETUP错误,我上面的两个问题的根源就是供电问题!。

相关文档
最新文档