基于ARM的音频控制_第1页
基于ARM的音频控制_第2页
基于ARM的音频控制_第3页
基于ARM的音频控制_第4页
基于ARM的音频控制_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于ARM的音频控制自动化系的工程训练5是学生在4年学习中的最后一次软硬件开发的工程训练,利用2周时间完成。本次工程训练以深圳芯控科技有限公司生产的一款基于ARM9的嵌入式开发平台EM-SBC2410为硬件开发平台,通过搭建嵌入式Linux的软件开发平台,完成基于ARM的音频控制的软硬件设计。通过此设计,使学生掌握以ARM为控制核心的嵌入式开发板的运用、领略到基于ARM9-Linux软硬件平台开发的主要过程、方法和步骤,最终完成一个基于ARM9的小型嵌入式作品。学生要完成这一工程训练项目,必须学完“单片机原理及其应用”和“嵌入式系统原理及其应用”二门课程及其完成“基于单片机的直流电动机控制”或

2、“基于单片机的数字钟设计”的实训项目,并综合应用这三门课程的软硬件知识,解决实践中的实际软硬件开发问题。 目的要求:3.1.1 基本目的本次工程训练通过“嵌入式系统原理及其应用”课程的学习,掌握嵌入式系统开发的基础知识;通过对EM-SBC2410的学习,了解嵌入式开发板的使用及其嵌入式系统的主要开发要点;综合应用嵌入式Linux的C语言编程技巧,结合音频控制原理,实现基于ARM的音频控制。3.1.2 基本要求为了使学生深入理解嵌入式系统的整个开发过程,本设计采用5个过程实现基于ARM的音频控制,此5个过程分别为:EM-SBC2410开发板的硬件资源及其附带的软件资源的使用阶段、嵌入式Linux

3、的开发环境的搭建阶段、基于ARM的音频控制的需求分析及其制定设计思路阶段、硬件设计及其制作阶段、软件设计及其调试阶段、作品联调运行及其维护阶段。要求学生按照5个阶段开发过程展开,以求给学生一个整个嵌入式开发的全过程。本工程训练除了要求学生掌握运用ARM控制音频的全过程,还要求学生能够掌握以ARM为控制核心的嵌入式开发板的运用及其嵌入式Linux的C语言的编程技巧。3.2 基本知识介绍运用EM-SBC2410的硬件开发平台进行基于ARM的音频控制的软硬件设计,用到了“嵌入式系统原理及其应用”这门课程、嵌入式Linux开发的相关知识、EM-SBC2410用户手册及其音频控制原理等知识。嵌入式系统原

4、理及其应用中主要掌握ARM的体系结构及其编程,以及嵌入式系统开发的流程。嵌入式Linux开发的相关知识主要掌握嵌入式Linux开发环境的搭建及其嵌入式Linux的交叉开发流程。EM-SBC2410用户手册主要掌握如何利用基于ARM9的开发板的硬件资源进行设计的过程。下面简单介绍除“嵌入式系统原理及其应用”这门课程外,此设计中要使用的一些重要知识。3.2.1 EM-SBC2410开发板简介图1 EM-SBC2410开发板深圳芯控科技有限公司生产的EM-SBC2410开发板在尽可能小的板面上(120mm*90mm),如图1所示,它集成了64M SDRAM、64M Nand Flash、2M Boo

5、t Flash、RJ-45网卡(100M)、USB Host、USB slave、标准串口、SD卡插槽、用户按键和一些用户灯等设备接口,并且使用2.0mm插针槽引出CPU的大部分信号引脚,不仅可以作为嵌入式电脑系统的一个主板模块,而且适合于项目或产品的原型设计。此设计在基于EM-SBC2410为硬件开发平台,实现基于ARM的音频控制,最终实现mp3格式音频文件的播放和控制。3.2.2嵌入式Linux开发的相关知识嵌入式Linux简介 linux是一个日益成熟的操作系统,现在已经拥有大量的用户,它是由芬兰的大学生linus torvalds开发的,任何人都可以复制,修改,套装发行,销售,但不许发

6、行时加入限制,而且必须公布源代码,以保障任何人都可以无偿取得所有可执行文件及其源代码。比较著名的linux发行版本有redhat Linux ,SUSE Linux ,Turbo Linux ,Ubuntu Linux等。国内的有北京中科红旗软件技术有限公司发布的红旗linux,深圳蓝点软件有限公司发布的蓝点linux,北京冲浪公司制作的xterm linux 等。嵌入式 Linux是以Linux为基础的嵌入式操作系统,它是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统,具有开放源代码、内核小、效率高、性能稳定,裁剪性好和对网络中最常用的TCP/IP协

7、议有最完备的支持等优点,被广泛应用在移动电话、个人数字助理(PDA)、媒体播放器、消费性电子产品以及航空航天等领域中。 2、嵌入式Linux 的交叉开发模式Linux 交叉开发采用宿主机和目标机的模式进行。宿主机是一台运行 Linux(如:RedHat)的 PC 机,目标机即 EM-SBC2410开发板。开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,这种代码并不能在宿主机上执行,而只能在目标机上执行。然后把可执行文件下载到目标机上运行。调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。宿主机和目标板的处理器一般都不相

8、同,宿主机为 Intel 处理器, 而目标板如 EM-SBC2410为 SAMSUNG S3C2410。Linux 交叉开发包括 Linux 内核的开发和 Linux 应用程序的开发应用程序的开发。有两种方式: = 1 * GB3 Linux 内核的开发:图2所示为本设计的开发环境以及开发流程。在主机的 RedHat Linux 操作系统下安装 Linux 发行包以及交叉编译器 arm-linux-gcc。然后对 Linux 进行配置(make menuconfig)并选择适合本开发板的相关配置,配置完成后进行编译生成 Linux 映像文件zImage。然后将该文件下载到目标板并执行。图2 L

9、inux的开发流程 = 2 * GB3 Linux 应用程序的开发Linux 应用程序的开发在宿主机一端的操作与内核开发类似,都使用 arm-linux-gcc 编译器应用程序,不同的是,编译生成 elf 格式的文件而不是 Linux 映像文件。编译生成的应用程序可以通过多种方式进行调试,下面介绍几种我们的系统中可以使用的方式: Linux 应用程序以文件的方式直接将 elf 格式的文件加入到 Linux 文件系统中,然后更新整个文件系统,然后运行目标机 Linux 系统并运行应用程序。 运行目标机 Linux 系统,然后在目标机 Linux 系统中通过一些工具软件将宿主机中的应用程序通过以太

10、网下载到目标机 Linux 系统,如 NFS、FTP、TFTP 等。 在宿主机端将 Linux 应用程序拷贝到 U 盘,然后运行目标机 Linux 系统,然后在目标机 Linux 系统中通过挂载 U 盘,然后在 U 盘运行应用程序。3、嵌入式Linux 的开发流程嵌入式 linux 开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过以下过程: 建立开发环境。操作系统一般使用 REDHATLINUX,版本7到9都可以,选择定制安装或全部安装,通过网络下载相应的 GCC 交叉编译器进行安装(比如 arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的交叉编译

11、器。 配置开发主机。配置 MINICOM,一般参数为波特率 115200,数据位 8 位,停止位 1,无奇偶校验,软硬件控制流设为无。在 WINDOWS 下的超级终端的配置也是这样。(本设计使用dnw.exe超级终端软件)MINICOM 软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具; 配置网络,主要是配置 NFS 网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。 建立引导装载程序 BOOTLOADER,从网络上下载一些公开源代码的 BOOTLOADER,如 U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT 等,根据自己具体芯片进行

12、移植修改。有些芯片没有内置引导装载程序,比如三星的 ARM7、ARM9 系列芯片,这样就需要编写烧写开发板上flash 的烧写程序,网络上有免费下载的 WINDOWS 下通过 JTAG 并口简易仿真器烧写 ARM 外围 flash 芯片的程序,也有 LINUX 下公开源代码的 J-FLASH 程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果你购买了厂家的仿真器当然比较容易烧写 flash 了,但是其中的核心技术是无法了解的。这对于需要迅速开发应用的人来说可以极大地提高开发速度。 下载别人已经移植好的 LINUX 操作系统,如 UCLI

13、NUX、ARM-LINUX、PPC-LINUX 等,如果有专门针对你所使用的 CPU 移植好的 LINUX 操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带 MMU 的 CPU 可以使用模块方式调试驱动,对于UCLINUX 这样的系统只能编译进内核进行调试。 建立根文件系统,从 下载使用 BUSYBOX 软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc 目录下,包括:/etc/init.d/rc.S、/etc/profile、/e

14、tc/.profile 等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用 mkcramfs 、genromfs 等工具产生烧写映象文件。 建立应用程序的 flash 磁盘分区,一般使用 JFFS2 或 YAFFS 文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性 flash(NOR 型)512K32M,有的系统使用非线性 flash(NAND 型)8512M,有的两个同时使用,需要根据应用规划 flash 的分区方案。 开发应用程序,可以下载到根文件系统中,也可以放入 YAFFS、JFFS2 文件

15、系统中,有的应用程序不使用根文件系统,而是直接将应用程序和内核设计在一起。3.2.3 EM-SBC2410音频接口及其控制原理Samsung S3C2410X带有I2S音频总线,因此EM-SBC2410使用一片I2S接口的PHILIPS解码芯片UDA1341,通过该芯片和相应的软件,用户可以播放mp3以及wav格式的音频文件,双声道的声音可以从背面的耳塞插孔直接接至耳塞或音箱,音频输入接口可以录音。此设计通过音频放大电路的设计,结合相应的控制程序,实现mp3歌曲的播放。IIS(Integrate Interface of Sound)即集成音频接口,在上个世纪80年代首先被Philips公司用

16、于消费产品的音频设备,是一种面向多媒体计算机的串行数字音频总线协议。S3C2410X内置了一个IIS总线控制器,该控制器实现到一个外部8/16位立体声音频编解码接口。支持IIS总线数据格式和MSB-justified数据格式,能够和其他厂商提供的多媒体编解码芯片配合使用。S3C2410X中有两条串行数据线,一条是输入信号数据线,一条是输出信号数据线,以同时发送和接收数据。该IIS接口能够读取IIS总线上的数据,同时也为FIFO数据提供DMA的传输模式,这样能够同时传送和接收数据。IIS接口有3种工作方式: 正常传输模式,正常模式下使用IISCON寄存器对FIFO进行控制。如果传输FIFO缓存为

17、空,IISCON的第7位被设置为“0”,表示不能继续传输数据,需要CPU对缓存进行处理。如果传输FIFO缓存非空,IISCON的第7位被设置成“1”,表示可以继续传输数据。同样,数据接收时,如果FIFO满,标识位是“0”,此时,需要CPU对FIFO进行处理,如果FIFO没有满,那么标志位是“1”,这个时候可以继续接收数据。 DMA模式,通过设置IISFCON寄存器可以使IIS接口工作于这种模式下。在这种模式中,FIFO寄存器组的控制权掌握在DMA控制器上,当FIFO满了,由DMA控制器对FIFO中的数据进行处理。DMA模式的选择由IISCON寄存器的第4位和第5位控制。 传输/接收模式,这种模

18、式下,IIS数据可以同时接收和发送音频数据。IIS总线控制器结构如图8.2所示,各功能说明如下: 两个5比特预除器IPSR,IPSA_A用于产生IIS总线接口的主时钟,IPSA_B用做外部CODEC时钟产生器。 16字节FIFO,在发送数据时数据被写进TxFIFO,在接收数据时数据从RxFIFO中读取。 主IISCLK产生器SCLKG,在主模式下,有主时钟产生串行位时钟。 通道产生器和状态机CHNC,IISCLK和IISLRCK有通道状态机产生并控制。 16比特移位寄存器(SFTR),在发送数据时,并行数据经由SFTR变成串行数据输出;在数据接收时,串行数据由SFTR转变成并行数据。 IIS相

19、关寄存器如表1所示。表1 IIS相关寄存器UDA1341是PHILIPS公司的一款经济型音频CODEC,用于实现模拟音频信号的采集和数字音频信号的模拟输出,并通过IIS数字音频接口,实现音频信号的数字化处理。图3 IIS总线控制器结构图如图3所示,S3C2410X的IIS总线时钟信号SCK与UDA1341TS的BCK连接,字段选择连接在WS引脚上。UDA1341TS提供两个音频通道,分别用于输入和输出,对应的引脚连接为:IIS总线的音频输出I2SSDO对应于UDA1341TS的音频输入;IIS总线的音频输入I2SSDI对应于UDA1341TS的音频输出。UDA1341TS的L3接口相当于一个混

20、音器控制接口,可以用来控制输入/输出音频信号的音量大小、低音等。L3接口的引脚L3MODE、L3DATA、L3CLOCK分别连接到S3C2410的GPB2、GPB3、GPB4三个通用数据输出引脚上,实现混音控制。3.2.4基于ARM的音频控制的放大部分的硬件电路设计 图4 音频放大电路此音频放大电路采用LM386集成芯片,LM386是低电压应用的音频功率放大集成电路,可使用电池为供电电源,输入电压范围可由4V-12V,具有静态电流小、输出端直流电压自动跟踪、电压增益可调、外围元件少等优点。为了能产生立体声,本设计采用双通道音频放大电路,如图4是其中的一个通道,输入由音频线引出,输出接扬声器。3

21、.3完成工程训练的主要仪器、设备、工作环境硬件:EM-SBC2410 嵌入式开发板、PC 机 Pentium 500 以上, 硬盘 40G 以上。软件:PC 机操作系统 REDHAT LINUX 9.0MINICOMARM-LINUX 开发环境(注意:建议使用Intel芯片组的主板,否则Jtag连接会出现不稳定问题。)3.4工程训练的主要内容 结合给学生布置的基于ARM的音频控制系统设计与开发题目,提出要求,可以包括以下内容:(1) 对基于ARM的音频控制的需求进行分析掌握音频控制原理。(2) 了解EM-SBC2410开发板的资源,学会EM-SBC2410开发板的硬件资源及其附带的软件资源的使

22、用。(3) 结合音频控制原理,制定设计思路。(4) 了解嵌入式开发的整个设计流程并搭建嵌入式Linux的开发环境(5) 结合作品的要求,对硬件电路进行设计并制作(6) 在搭建的嵌入式Linux的开发环境中进行软件设计并调试通过(7) 软硬件联调,使作品正常运行(8) 对基于ARM的音频控制提出新的其他要求。3.5工程训练的实际步骤或操作方法工程训练的实际步骤或操作方法要根据具体的设计课题来制定,本设计的具体操作步骤及方法如下:在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的 PC 机作宿主开发机,对于嵌入式 Linux,宿主机上的操作系统一般使用 Redhat Linux。本设计

23、使用Redhat 9.0,选择定制安装或全部安装,然后安装相应的 GCC 交叉编译器(比如 arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的交叉编译器。1、REDHAT LINUX 9.0 的安装首先在一台 PC 上安装Vmware 6.5虚拟机环境,然后在虚拟机上安装 RedHat LINUX9.0,选择 Custom 定制安装,在选择软件 Package 时最好将所有包都安装,需要空间约 2.7G,如果选择最后一项:everything,即完全安装,将安装 3 张光盘的全部软件,需要磁盘空间大约 5G。因此建议提前为 REDHAT LINUX 的安装预留大

24、约 515G 的空间,具体视用户的硬盘空间大小来确定,在安装完 Redhat 后还要安装Linux 的编译器和开发库以及 ARM-Linux 的所有源代码,这些包安装后的总共需要空间大约为 800M。2、VMware Tools的安装在虚拟机中安装完RedHat LINUX9.0操作系统之后,接下来需要安装VMware Tools。VMware Tools相当于VMware虚拟机的主板芯片组驱动和显卡驱动、鼠标驱动,在安装VMware Tools后,可以极大提高虚拟机的性能,并且可以让虚拟机分辨率以任意大小进行设置,还可以使用鼠标直接从虚拟机窗口中切换到主机中为。其安装过程如下: = 1 *

25、GB3 从VM菜单下选择安装VMware Tools,此时就会有VMware-tools文件映像到CDROM中; = 2 * GB3 把“VMwareTools-6.5.0-118166.i386.rpm和VMwareTools-6.5.0-118166.tar.gz”文件复制 /tmp 目录中,然后选择一种安装方式。在此我选VMwareTools-6.0.2-59824.tar.gz。 = 3 * GB3 进入/tmp目录,解压# tar -zxvf VMwareTools-6.5.0-118166.tar.gz = 4 * GB3 进入/tmp vmware-tools-distrib目录

26、中,输入 ./vmware-install.pl进行安装,在安装过程中根据提示进行选择,在此我一路选择回车即可。3、交叉编译器的安装在安装交叉编译器前,首先要实现在Linux中能够共享Windows中的文档,即能够把开发板所需的交叉编译器拷贝到Linux中,然后才能进行安装。点击VMsettingsoptionsShared Folders,通过add进行F: SBC共享目录的添加。添加的共享目录会在/mnt/hgfs目录中。交叉编译器和内核就放在SBC中。其安装的过程如下: = 1 * GB3 在根目录下新建SBC-linux的文件名,把共享目录SBC中的内容复制到该目录下,然后在该目录下执

27、行命令tar -zxvf arm-linux-toolchains.tgz,并把2.95.3这个目录复制到/usr/local/arm目录中。 = 2 * GB3 为了可以方便的使用arm-linux-gcc编译器系统,把交叉编译器设置为全局变量,进入/etc,执行vi /etc/profile ,在pathmunge /usr/local/sbin后添加pathmunge /usr/local/arm/2.95.3/bin,保存退出。 = 3 * GB3 测试交叉编译器是否安装成功,首先在SBC-linux目录下执行命令tar zxvf SBC2410II.tgz,并把SBC2410II目录

28、复制到/SBC-linux目录中,然后进入目录/SBC-linux/ SBC2410II/examples/hello后执行arm-linux-gcc o hello hello.c ,在hello目录下会生成hello.o的目标文件。4、以“hello,world”程序为例熟悉整个开发过程 = 1 * GB3 在 PC 上编辑以下源代码,并保存为 hello.c#include int main(void) printf(hello, Nanchang University College of Science and Technology!n); return 0; = 2 * GB3 编

29、译 hello 使用以下命令编译:arm-linux-gcc o hello hello.c将生成 hello 可执行文件。 = 3 * GB3 下载并运行把U盘插入 PC 的 USB,把/SBC-linux/ SBC2410II/examples/hello目录中的Hello.o目标文件复制到U盘中。然后把优盘拔下来插入到 SBC-2410X 的 USB HOST 端口,打开dnw.exe终端,连接好超级终端(其中波特率设置为115200bps,com设置为PC机上相对应的端口),启动EM-SBC2410开发板,按照以下命令操作:#mount /dev/sda1 /mnt; 挂接优盘#cp

30、/mnt/hello /bin; 把 hello 复制到 bin 目录 #hello; 执行 hello在终端上将出现“hello, Nanchang University College of Science and Technology!”字样。然后输入#umount /mnt命令退出U盘。(千万记住不要直接拔下U盘,否则有可能会对U盘造成损坏。)5、基于ARM的音频控制的放大部分的硬件电路设计及制作按要求进行音频控制的放大部分的电路设计,利用protel软件画出原理图并生成PCB图,利用自己的PCB图,根据印制电路制版的整个工艺过程(在工程训练3及其工程训练4中已经过严格的训练),制作出

31、最后的PCB板。PCB板制作完毕后,在自己的的PCB板上进行电路的焊接并调试成功。6、音频设备驱动程序的实现在Linux下,音频设备驱动程序的实现与文件系统的操作密切相关。Linux将各种设备以文件的形式给出统一的接口,如何对各种音频设备进行操作是在Linux上进行音频编程的关键,通过内核提供的一组系统调用,应用程序能够访问声卡驱动程序提供的各种音频设备接口,这是在Linux下进行音频编程的最简单也是最直接的方法。UDA1341驱动程序位于:/SBC-linux/SBC2410II/kernel/drivers/sound/s3c2410-uda1341.c,该设备驱动程序比较多,其主要模块包

32、括:UDA1341驱动的初始化、打开音频设备、缓存区设计、ioctl系统调用和音频数据的播放和录制。7、媒体播放器的移植Mplayer是Linux下强大的媒体播放器,对媒体格式广泛支持,最新的版本可以支持Divx、H.264、MPEG4等最新的媒体格式,可以实时在线播放视频流,是目前嵌入式媒体播放器的首选。其媒体播放器的移植过程如下: = 1 * GB3 安装和编译Mplayer的源代码可以从其主页 HYPERLINK http:/www.mplayerhq.hu http:/www.mplayerhq.hu下载。打开Mplayer官方网站的主页,可以看到“download”链接,单击即进入下

33、载页面。在该页面里可以看到“daily CVS snapshot source”的下载部分,这部分链接指向了每天提交到CVS服务器里最新的Mplayer源代码包,鼠标单击一下开始下载。对下载的文件Mplayer-current.tar.bz2解压缩:#tar zvvf Mplayer-current.tar.bz2在解压缩得到的Mplayer-0.93目录下有一个脚本文件mkall,这个文件是一个编译脚本,在该目录下直接执行:#./mkall该脚本将配置并编译mplay, 下面是该脚本所进行的配置和编译命令:./configure cc=usr/local/arm/2.95.3/bin/arm

34、-linux-gcc-target=arm-linuxwith-extralibdir=/usr/local/2.95.3/bin/arm-linux-gcc/lib with-extraincdir=usr/local/2.95.3/bin/arm-linux/include/-disable-sd1 enable-static -disable- dvdnav disable-tv disable-gui disable-mpdvdkit enable-linux-devfsmake编译成功后,将在Mplayer-0.93目录下生成mplayer文件,该文件为mplayer媒体播放程序。

35、= 2 * GB3 下载运行播放mp3歌曲(shanghaitan.mp3),在终端上输入#madplay /root/Documents shanghaitan.mp3在终端上将出现:MPEG Audio Decoder 0.15.0 (beta) - Copyright (C) 2000-2003 Robert Leslie et al. Title: 上海滩 Artist: 叶丽仪 Year: 2000 Genre: Goa按Ctrl+C退出。8、挂U盘播放mp3格式的歌曲往U盘中拷入keai.mp3和quan.mp3两首歌曲,输入命令:#mount /dev/sda1 /mnt; 挂接

36、优盘#madplay /mnt keai.mp3在终端上将出现:MPEG Audio Decoder 0.15.0 (beta) - Copyright (C) 2000-2003 Robert Leslie et al. /mntinput: read: Is a directory keai.mp3按Ctrl+C退出。输入命令:#madplay /mnt quan.mp3在终端上将出现:MPEG Audio Decoder 0.15.0 (beta) - Copyright (C) 2000-2003 Robert Leslie et al. /mntinput: read: Is a d

37、irectory quan.mp3 Title: 全是爱 Copyright (C) QQ音乐 Artist: 凤凰传奇 Album: 最炫民族风 Year: 2009 Genre: Other9、软硬件的联调把自己制作的音频放大电路接入EM-SBC2410开发板的音频接口,在终端上重复执行步骤7和步骤8,将听到所播放的歌曲。3.6 工程训练总结工程训练按上述要求完成基于ARM的音频控制,最终能正常播放U盘中的mp3歌曲,要根据各专业的要求和格式,做出工程训练报告。学生完成的工程训练报告,由带教老师批改,给出成绩,如成绩合格者可获2个学分。3.7 参考文献1、深圳芯控科技有限公司编,EM-SB

38、C2410用户手册,2008年6月2、黄丽娜、管佩森、陈彩可著,Red Hat Linux 9.0基础教程,清华大学出版社,20043、马忠梅、李善平、康慨,叶楠著,ARM&Linux嵌入式教程,北京航天航空出版社,20044、于明、范书瑞、曾祥烨编著,ARM9嵌入式系统设计与开发教程,电子工业出版社,2006年9月附录资料:不需要的可以自行删除ARM经典40问答第1问:Q:请问在初始化CPU堆栈的时候一开始在执行mov r0, LR这句指令时处理器是什么模式A:复位后的模式,即管理模式。第2问: Q:请教:MOV中的8位图立即数,是怎么一回事 0 xF0000001是怎么来的 A:是循环右移

39、,就是一个0255 之间的数左移或右移偶数位的来的,也就是这个数除以4一直除, 直到在0-255的范围内它是整数就说明是可以的! A:8位数(0-255)循环左移或循环右移偶数位得到的,F0000001既是0 x1F循环右移4位,符合规范,所以是正确的。这样做是因为指令长度的限制,不可能把32位立即数放在32位的指令中。移位偶数也是这个原因。可以看一看 HYPERLINK t _blank arm体系结构(ADS自带的英文文档)的相关部分。第3问: Q:请教: HYPERLINK t _blank arm微控制器基础与实战2.2.1节关于第2个操作数的描述中有这么一段:#inmed_8r常数表

40、达式。该常数必须对应8位位图,即常熟是由一个8位的常数循环移位偶数位得到。 合法常量:0 x3FC,0,0 xF0000000,200,0 xF0000001. 非法常量:0 x1FE,511,0 xFFFF,0 x1010,0 xF0000010. 常数表达式应用举例: LDR R0,R1,#-4 ;读取 R1 地址上的 HYPERLINK / t _blank 存储器单元内容,且 R1 = R1-4 针对这一段,我的疑问: 1. 即常数是由一个8位的常数循环移位偶数位得到,这句话如何理解 2. 该常数必须对应8位位图,既然是8位位图,那么取值为0-255,怎么0 x3FC这种超出255的数

41、是合法常量呢 3. 所举例子中,合法常量和非法常量是怎么区分的 如0 x3FC合法,而0 x1FE却非法0 xF0000000,0 xF0000001都合法,而0 xF0000010又变成了非法 4. 对于汇编语句 LDR R0,R1,#-4,是先将R1的值减4结果存入R1,然后读取R1所指单元的 值到R0,还是先读取R1到R0,然后再将R1减4结果存入R1 A:提示,任何常数都可用底数*2的n次幂 来表示。 1. HYPERLINK t _blank arm结构中,只有8bits用来表示底数,因此底数必须是8位位图。 2. 8位位图循环之后得到常数,并非只能是8位。 3. 0 xF00000

42、10底数是9位,不能表示。 4. LDR R0, R1, #-4 是后索引,即先读,再减。 可以看一看 HYPERLINK t _blank arm体系结构对相关寻址方式的说明。第4问: Q:在程序移植的过程中,什么代码段处于什么样的模式,这可真是一个困扰人的大难题,有没有一种标志或办法能够识别代码段处于什么样的模式 A:读取 CPSR ,任何时候都是可以读。第5问: Q:为什么保护现场时,总是保护 R0-R3,R12,为什么不保护R4-R11A:请看一看 HYPERLINK t _blank arm-thumb过程调用标准这个文档。第6问: Q:请问 mov R1,#0 x00003DD0

43、错误: out of the range of operation是怎么回事情 我就是想IODIR=0 x00003dd0,汇编就是 LDR R0,=IODIR MOV R1,#0 x00003dd0 STR R1,R0 编译时候说是超出操作范围 A:使用ldr,mov的操作数为8位位图数。第7问: Q:在 HYPERLINK t _blank arm7TDMI(-S)处理器内部有37个用户可见的寄存器: 问题:用户可见应该怎样理解 这37个寄存器是否是37个不同的物理寄存器, 例如R8与R8_fiq应该是两个不同的物理寄存器吧 A:用户可见是指用户可以通过程序操作的。R8与R8_fiq是两个

44、不同的寄存器。第8问: Q: USR模式,SVC模式,IRQ模式分别有哪些限制 A:对于外设操作限制与芯片设计有关。USR模式不能设置CPSR寄存器。 用户模式下无SPSR寄存器,代码可以为 HYPERLINK t _blank arm,Thumb.第9问: Q:请问在初始化堆栈时就决定了工作模式是什么意思 如何决定工作模式的 A:设置CPSR寄存器。第10问: Q:请问: HYPERLINK t _blank arm汇编程序设计中所谓的文字池作何理解 A:可以理解为常量数组,文字池中保存的是常量,这些常量可以是正常的常量,也可以是地址。第11问: Q:为什么在中断向量表中不直接LDR PC,

45、异常地址.而是使用一个标号,然有再在后面使用DCD定义这个标号 A:因为LDR指令只能跳到当前PC 4kB范围内,而B指令能跳转到32MB范围,而现在这样在LDR PC, xxxx这条指令不远处用xxxxDCD定义一个字,而这个字里面存放最终异常服务程序的地址,这样可以实现4GB全范围跳转。 Q: LDR 不是可以全空间跳转的吗 HYPERLINK t _blank arm微控制器基础与实战程序清单5.3. A: LDR伪指令通过设置指令缓冲池才能实现全范围跳转,而LDR指令则只能实现4KB范围跳转。第12问: Q: ARM7TDMI-S和 HYPERLINK t _blank arm7TDM

46、I有何区别 A: ARM7TDMI-S是ARM7TDMI的可综合(synthesizable)版本(软核)。 对应用工程师来说,除非芯片生产厂商对ARM7TDMI-S进行了裁减,否则ARM7TDMI-S与ARM7TDMI没有太大的区别,其编程模型与 HYPERLINK t _blank arm7TDMI一致。第13问: Q: DCD伪指令的疑惑。 StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1) * 4 这句话是什么意思 DCD后面的程序标号或数字表达式是何意 A:它的内容是初始化递减堆栈的最高地址,看 HYPERLINK t _blank

47、arm微控制器基础与实战2.3.2节。 第2章 编译器与语言第14问: Q:00254: Unimplemented RDI message是什么错误提示 我的设置连接都正常,是不是芯片烧了 A:是JTAG的问题。可以先使用ISP操作试试就知道了,如果能ISP,说明LPC2104没有损坏,还能正常运行程序。第15问: Q:请教:我在调试程序的时候在AXD中出现这样的提示信息: RDI Warning 00159:could not open specified device port. 我是根据配套教程的步骤设置的。 A:请按照光盘easy HYPERLINK t _blank arm_dri

48、vereadme.txt安装驱动程序。第16问: Q:我用实验程序运行经常出现下列信息! 程序不能 HYPERLINK / t _blank 下载到目标板。 Warnning! interrupt vectors data is not correct! Program you downloaded can not run freely! A:1.仿真器配置一定要正确,即Easy HYPERLINK t _blank arm Configuration设置窗口中的FLASH项中选择Erase Flash when need; 2.向量表累加和要为0; 3.可以先在RAM调试一个程序(运行),然

49、后STOP,再使用File-Load Image加载要 HYPERLINK / t _blank 下载到FLASH的调试文件。第17问: Q:在ADS中是否可以进行软件调试基于UCOS-II的程序 A:ADS软件调试只能调试 HYPERLINK t _blank arm的内核,不能调试外设。但是取消 PLL 锁定检测后,可以调试任务切换,最终到空闲任务上。开始移植时软件仿真是最好的工具。第18问: Q: HYPERLINK t _blank armulate软件是干什么的 2104不是用EasyJTAG.dll来仿真吗 A:软件仿真只能仿真 HYPERLINK t _blank arm 核。第

50、19问: Q:有关LPC2106.INC的问题。我无法在project引用lpc2106.inc文件,只能引用lpc2106.h文件, 这是什么原因 且当我的主程序用汇编编写时,不能引用lpc2106.h,用lpc2106.inc则无法加入project,请问汇编器应如何设置 A:不用加2106.inc只要该文件在你的工程文件夹中,就可以直接在汇编程序的开始处加 include 2106.inc. 注意:该文件是汇编文件定义的头文件,定义内部寄存器。第20问: Q:入口点是什么意思 我在使用LPC2106上移植UCOS-II,每次MAKE时总是提示我 Image does not have a

51、n entry point,可是我是把光盘的vetctors.s 复制过来的,而且仔细看了看,已经声明了ENTERY,这是怎么回事A:需要在ADS中设置入口。第21问: Q:请教:如何定义不被初始化变量 A:让编译器不知道有这个内存地址即可。 A:如用分散加载文件分配RAM故意预留一部分RAM不分配,用它来存您不需要初始化的东西。或者不调用编译器提供的启动代码,不过这样可能编程会麻烦一些。第22问: Q:我直接通过JTAG口 HYPERLINK / t _blank 下载EasyArm板带的Ext1_test程序到 HYPERLINK t _blank arm中,出现中断向量的告警: inte

52、rrupt vector is not correct HYPERLINK t _blank arm is not running freely. 果然复位后芯片不能运行。但是我用串口 HYPERLINK / t _blank 下载后芯片能正常工作,中断也行的。 并且我用JTAG仿真的话,芯片能正常工作,中断也行的,唯独JTAG口 HYPERLINK / t _blank 下载不行。 不知道是什么原因 A:仿真器配置中要设置Erase Flash when need.也可以这样试试: 1.可以先打开一个工程在RAM中调试运行; 2.stop程序; 3.使用File-Load Image重新加载

53、Ext1_test生成的*.axf文件。 Q:仿真器配置中我是设置了Erase Flash when need,但照你说的话,那不是在RAM下调试吗 在RAM下调试我是可以的,但是下载后出现interrupt vector data is not correct. 我又看了几篇文章,是不是跟中断向量表的累加和不为零有关系啊 A:是的,是向量表的累加和不为零。 因为如果用ISP下载能运行,说明向量表的累加和已为零,而用JTAG下载不能运行的情况可能是 没有正常下载代码。先在RAM中调试,目的是为了后面正确下载程序到FLASH.第23问: Q:用Scatter怎样将某个函数或文件定位在Flash的

54、某个位置 第24问: Q:我在仿真时遇到这样的提示: Error, Flash is protected by user configation! 怎么写到flash里面呢 A:看配套 HYPERLINK t _blank arm微控制器基础与实战附录一。第25问: Q:我在移植实验中想到了两个问题,如下: 1.Debug和Release以及DebugRel有什么不同,为什么在作2104移植实验时,要用Release 2.在Release中为什么要将RW Base设置为0 x40000040 我将其设置为0 x40003000, 为什么不能工作 A:都只是一个问题,内存空间的使用,因为跑OS要

55、比较大的内存空间,所以要腾出点地方。第26问: Q:请问没有MMU的 HYPERLINK t _blank arm芯片是否支持使用malloc()函数动态分配内存 A:是否支持malloc()函数与芯片没有多大关系,主要与编译器有关。 Q:再问:如果没有操作系统支持呢 A:也支持。第27问: Q:在I2C实验程序中,我想查看数据缓冲区DataBuf的值,怎么查看 A:watch窗口或鼠标停留在要查看的变量名上。 Q:我查询的是写入DataBuf缓冲区的值,鼠标在上面根本就不会出现他的值,即使在watch中加入, 结果也是name not found. A:变量被优化,调试时可以把该变量定义为全

56、局变量查看。第28问: Q:仿真软件和2104开发板连接不上 DBE Warning 00041: !An unspecified Debug Toolbox call failed 电源和开发板都连好,错误和没接开发板一样,驱动也安装了,安装时按确定键时,软件很长时间才有如上反应,请帮忙 A:1.并口是否正常 2.在其它操作系统(如98)下或其它台式PC下试试。第29问: Q:如何生成32位hex文件 我在Release Setting- HYPERLINK t _blank arm fromELF-Output Format中设置为Intel 32bit HEX,可是好像没有生成hex文件

57、 A:试试这种方法: Target-Target Setting- ost Link中选择 HYPERLINK t _blank arm fromELF加上你上面设的应该不成问题。第30问: Q:请问关于settings中r0 base rw base的意思 A:ro:read only,rw:read and write.第31问: Q:编译成功后的信息第一行,code,R0 data,RW data,ZI data,debug分别代表什么 A:R0 只读段,即程序代码空间; RW 可读/写段,即数据变量空间; ZI 清零变量段,即需要清零初始化的数据变量空间。第32问: Q:如何在ADS里面看任务执行的一些情况 比如堆栈。 A:多任务环境下的堆栈,内存等信息需要调试软件的支持才可以实现。 ucos下有一个统计功能的模块可以间接实现部分功能。第33问: Q:请问向fl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论