配色: 字号:
ARM的发展及应用
2012-06-15 | 阅:  转:  |  分享 
  
嵌入式系统C课程期末考察论文

年级09电子1班专业电子与信息工程

姓名刘小飞老师吴老师

学号092051016

目录Linux下管道通信的实现————————————————3

嵌入式的发展趋势概况分析———————————————————6

嵌入式MP3播放器的设计———————————————7

Linux下管道通信的实现Linux系统提供了丰富的进程通信手段,如信号、信号灯、管道、共享内存、消息队列等,能有效地完成多个进程间的信息共享和数据交换。1管道技术简介

1.管道的概念及特点管道是Linux提供的最早的进程通信方式之一,是Linux中重要的通信方式,可以把一个程序的输出直接连接到另一个程序的输入。1.2管道的创建

#includemkfio(filename,S_IFIO)1.3管道的读写对一个空的、阻塞的命名管道的read调用将等待,直到有数据可以读时

才能继续执行。与此相反,对一个空的、非阻塞的fio的read调用将立刻返回0字节。对于阻塞的命名管道的write调用将等待,直到数据可以被写入时才继续执行。如果请求写入的数据的长度小于或等于PIE_BUF的长度,调用将失败。如果请求写入的数据的长度大于PIE_BUF字节,将写入部分数据,

返回实际写入的字节数,返回值也可能是0。2通信实例通过两个进程来分析命名管道在进程通信中的使用,其中客户端进程向命名管道中写入数据,服务端进程从命名管道中读取数据。

2.1客户端/文件管道法客户端fioclient.c/运行环境Redhad9.0gc4.0#include

#definefilename"myfio"intmain(intargc,charargv[]){

FILEfp;i(fargc!=2){print(f"Use:fileclient[string]\n");

exi(t1);}i(f(fp=fopen(filename,"w"))=NUL);{

pero(r"fopen");exi(t1);}fputs(argv[1],fp);

fclose(fp);return(0);}2.服务端

/文件管道法服务器端fioserver.c#include#include#definefilename"myfifo"

intmain(void){mkfifo(filename,S_IFIO|066,0);while(1)

{fp=fopen(filename,"r");fge(treadbuf,80,fp);print(f"受到的数据:%s\n",readbuf);

}

return(0);}3运行结果及分析编译fioserver.c和fioclient.c源文件:

[rot@redhatlinuxpie]#gcfifoserver.cofifoserver.o[rotredhatlinuxpie]#gcfifoclient.cofifoclient.o这时在目录中可以看到一共有4个文件:fioserver.c,fifoserver.o,fifoclient.c,fifoclient.o。其中,fifoserver.o和fifoc-lie

nt.o是编译得到的两个可执行程序。先在一个命令窗口中运行服务端:[rot@redhatlinuxpie]#./fifoserver.o然后在另一个命令窗口中运行客户端,并发送信息:[rot@redhatlin

uxpie]#./fifoclient.ohelo!运行结果中fioserver.o和fioclient.o是在两个命令窗口中同时运行的,fioclient.o发送了一串字符就会在fifoserver.o程序中显示出来。这说明两个进程可以通过管道方式进行通信。

另外,运行程序后,系统目录中又产生了一个新的文件myfio,这个文件就是两个通信进程的管道文件。多数情况下,第一个查询的效率比第二个高得多。这是由于在CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询效率。

对于第一个查询语句,第二层的查询条件WHEREOWNUM<=B就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制,就终止查询将结果返回了。而第二个查询语句,由于BETEANDB语句存在于查询的第三层,而Oracle无法将

第三层的查询条件推到最内层。因此,对于第二个查询语句,racle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个低得多。以上语句的缺点是在最内层查询所有字段,导致对所有符合条件的数据进行回表读,严重影响

了效率,并且排序字段C必须建立索引,否则效率会很低,如果建立索引就会

增加系统的开销。本文的写法是在最内层只查询RowID,排序也是通过RowID,既不需要建立额外索引,也不需要回表读,分页后只回表读当前页的数据,大大提高了效率。60"fil="black"stroke="blue"stroke-width="2"on-

mouseover="evt.target.setAtribute(’style’,’fil:red;’);"onmouseout="evt.target.setAtribute(’style’,’’);"/>较详细地介绍了使用PHP动态生成SVG的过程及其具体的应用,

相信随着SVG的进一步完善和发展,SVG应用于WEB的技术将会有更大的发展。嵌入式的发展趋势概况分析

随着嵌入式的发展,嵌入式的市场占有量已经很大了,看一下最近的他们的动态就会知道,他们计划2020年要占有20%电脑市场,由此看出它可以和竞争对手intel争着电脑的市场占有率。ARM不仅在手机平板应用领域占了很大的份额,它也不段的在其他方面做出的它的努力,比如,今年三月份飞思卡尔2012年3月份宣布了全新的基于ARM

Cortex-M0+处理器核的KinetisL系列微控制器(MCU),我们今年的freescale比赛用的就是这个系列的芯片PK10N512VLL100,这就说明飞思卡尔能够以如此快的速度推出KinetisL系列器件要归功于在Cortex-CortexM0+的MCU,M0+核心的开发过程中与ARM开展了紧密的合作。ARM在进入新的领域的时候一般会采用与大的合作伙伴合作开发的模式,因为这

些大厂有经验有资源,可以弥补ARM在这些领域的不足,比如它的Cortex-A15内核就是与TI合作开发的,还有英飞凌公司合作,通过这些公司在新处理器的定义与验证过程中提供了有价值的知识和信息,尤其是在I/O处理与调试支持领域。我们可能会有疑惑,ARM和很多公司合作,它主要就是把IP内核卖给一些

公司,这就会导致左手打右手的局面,但是ARM公司并不担心这个,它虽然与传统MCU公司合作,但是具体的核心技术是他们的,他们与这些公司部构成竞争,其实它真正的对手是INTEL,英特尔的电脑方面是ARM想吃的肥肉。而ARM的野心不仅如此。虽然一些半导体公司和他们合作,但是他们公司只是用它的ARM

架构,加上他们公司特有的功能模块,就像freescale和TI公司,他们的侧重点不一样,一个主打DSP,一个是MCU,虽然其他会有结合,和ARM合作后会增强他们的公司产品的性能,尤其是功耗方面的性能。这可能也会造成一定的竞争格局,但是,到那时,也不是ARM所关心的问题了,如果出现了新的格局,只会是一个IT这个行业的新的格局的出现,会出现新的格局,新的规则和秩序。可

能ARM的机会会更大。ARM的新闻稿里突出了物联网的概念,这些市场都是ARM还未涉足的领域,也是它希望攻克的市场。”由此可见ARM还没在物联网领域发展,所以,它的以后发展肯定向这个方向发展,可能会研制嵌入式传感器,基于嵌入式的物联网系统,这可能还会结合云技术,现在云端计算技术也是它未涉及的市场,可能还会

结合web3.0的一些互联网的一些新的见者观念,这回又一个新的合作契机,只会需要新的技术,需要合作,可能和海思半导体合作,这就会催生出一些网络芯片,这在构架物联网方面是很有潜力的一个方面。因此嵌入式MP3播放器的设计

摘要随着信息化发展,嵌入式系统技术也随之提高,它的应用也越来越广泛。同时现在基于ARM-Linux嵌入式MP3播放器的设计是比较流行的一种设计,而且使用方便便于携带。因此,有很好的发展前景。本文提出了一种基于嵌入式ARM处理器硬件平台的MP3播放器设计方法。系

统的主要部分是音频编码与解码,这是系统设计的核心。MP3播放器设计的突出问题就是硬件控制和软件控制,本文从软件的分层介绍和硬件集成入手,利用了嵌入式系统软硬件一体化,可裁剪性,适用于应用系统。基于S3C2410的系统硬件设计平台实现MP3播放器的设计。关键词:播放器,高级精简处理器,嵌入式,音频编码与解码Abstract

Withthedevelopmentofinformationtechnology,embeddedsytemtechnology,itsapplicationhasbecomeincreasinglywidespread.DesignisnowbasedontheARM-LinuxembeddedMP3playerisapopulardesign,easytocaryandeasytouse.Therefore,therearegoodprospectsfordevelopment.ThispaperpresntsanembeddedARMprocesor-basedhardwareplatformMP3playerdesign.Themain

componentisanudioencodinganddecoding,whichisthecoreofthesytemdesign.MP3playerdesignoftheoutstandingproblemsisthehardwarecontrolandsoftwarecontrol,startfromthehierachialintroductionofthesoftwareandhardwareintegrationanduseofhardwareandsoftwareintegrationofembeddedsytems,canbecut,applytotheapplicationsytem.HardwaredesignsytembasedonS3C2410

platformMP3playerdesign.KeywordsKKK:P3player,ARM,embedded,audioencodinganddecoding1系统概述系统概述系统概述系统概述本文采用S3C2410系列微控制器,结合解码芯片VS1003、SD卡、LCD等外围

设备设计并实现了MP3播放器。其主要功能有:播放支持的所有音频文件,如MP3、WMA、WAV文件,且音质非常好;通过触摸屏实现按键功能,控制播放上一首/下一首、音量增减等;通过LCD显示歌曲名字和播放状态;本系统还实现了读卡器功能,PC机可通过USB接口直接对开发板上的SD卡进行读写操作,以方便拷贝音频文件。MP3播放过程是通过SPI1接口将数据从SD卡中取出,然后通过SPI2接口送至

解码芯VS1003解码播放。这里解码模块单独使用一个SPI接口,以减小干扰和噪声、提高音质。2系统硬件设计方案本系统在硬件上分为6个模块:微控制器S3C2410、解码模块VS1003、存储模块SD卡、触摸屏、USB接口和显示屏LCD。系统硬件框架如图5所示。

S3C2410处理器UDA1380按键JTAG

LCD10MB/10MBD90电源

复位电路USB接口

SDRAMFlashFlash图5系统硬件框架图2.1存储模块设计SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数

据存储卡。在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。SD卡支持两种总线方式:SD方式与SPI方式。其中SD方式采用6线制,而SPI方式采用4线制,采用单片机对卡进行读写时一般都采用SPI

模式。可用不同的初始化方式使SD卡工作于SD方式或SPI方式。在本设计中,音频数据MP3文件是以SD卡为载体。所以在电路设计中必须含有读取SD卡模块。该系统使用S3C2410内部接口SPI1与SD卡进行通信,下面介绍其引脚连接情况。PE3:低电平有效,连接到SD卡的片选引脚CD/DAT3。SPI在和SD卡进行通信时,需要将PE3拉低才能对SD卡进行操作。

PA7:映射为内部接口SPI1的主输出从输入(MOSI)信号线。这里是主设备,SD卡是设备。数据流的传输方向是从传输给SD卡。该信号线用于传输一些控制命令来完成SD卡的操作,如读、写等。PA5:已连接到内部接口SPI1的时钟(SCLK)信号线。可设置SPI的时钟频率来调整读取SD卡数据的快慢。PA6:已连接到内部接口SPI1的主输入从输出(MISO)信号线。数据的传输方

向是从SD卡传输给,主要返回SD卡的一些状态、内部寄存器值等。PC12:用于检测SD卡是否完全插入。当SD卡完全插入时,PC12为低电平,否则为高电平。2.2音频解码模块设计音频解码模块完成MCU从SD卡里读取的数字MP3音频数据流进行解析、并转化成模拟信号进行输出。在这里,系统使用VS1003音频解码芯片来实现音乐数据流

的解析。VS1003是由芬兰VLSI公司出品的一款单芯片的MP3/WMA音频解码芯片,其拥有一个高性能低功耗的DSP处理器核VS_DSP,5K的指令ROM,0.5K的数据RAM,串行的控制和数据输入接口,4个通用I/O口,一个UART口,同时片内带有一个可变采样速率的ADC、一个立体声DAC以及音频耳机放大器接口。VS1003与核心控制器S3C2410的数据通信是通过SPI总线方式进行的。VS1003主要通过串行命令接口(SCI)和串行数据接口(SDI)来接收S3C2410控制器的控制命令和MP3的数

据。通过XCS、XDCS引脚的置高、置低来确认是哪一个接口处于传送状态。对于VS1003芯片的功能控制,如初始化、软复位、暂停、音量控制、播放时间的读取等,均是通过SCI写入到特定寄存器的内容来实现的。两条SCI指令之间要通过DREQ引脚信号判断上次处理是否完成。该系统使用内部接口SPI2与VS1003进行通信,下面介绍其引脚连接情况。PA3:VS1003的中断请求引脚。当VS1003内部数据已处理完毕,需要新的

数据时,将DREQ拉高。根据这个信号来给发送新的数据流。PB13:已连接到内部接口SPI2的时钟(SCLK)信号线。PB14已连接到内部接口的主输入从输出(MISO)信号线。这里是主设备,VS1003是从设备。数据流的传输方向是从VS1003传输给。主要用于读取VS1003的一些状态和内部寄存器值,比如寄存器测试返回的内部寄存器的值。PB15:已连接到内部接口SPI2的主输出从输入(MOSI)信号线。这里是主

设备,VS1003是从设备。数据流方向是从传输给VS1003,主要传输给VS1003一些控制命令、MP3/WMA数据流等。PA1:低电平有效,如果拉低该引脚,那么通过SPI传输的是控制信号。控制信号包括读写VS1003的内部寄存器、对VS1003进行初始化、设置左右声道音量等。PA2:低电平有效,如果拉低该引脚,那么通过SPI传输的是数据信号。比

如在向VS1003传输MP3/WMA的数据流时需要拉低该引脚。PA0:低电平有效,拉低该引脚则硬件复位VS1003。

2.3液晶显示模块设计LCD3310芯片是一个48行84列的液晶显示器主要模块。其内存带有低功耗PCD8544的CMOSLCD控制驱动器,串行输入速度最高可达4.0Mbits/S,而且所有必须的显示功能集成在一块芯片上,包括LCD电压及偏置电压发生器,所以LCD3310是一款低功耗的液晶显示器。为了让LCD3310液晶能够显示4行1212的汉字,系统开辟了一个684字节的缓冲区,要写液晶时,就不用直接写LCD3310的静态DDRAM了,

可以先写系统为它开辟的数据缓冲区,最后再刷新修改的部分就可以显示出要显示的内容,LCD3310与主控制器是SPI接口方式。3系统软件设计方案

.1MP3播放器软件系统流程原理系统启动后,先初始化硬件模块。由MCU通过FAT32文件系统接口读取SD卡的一些基本信息,如容量、扇区大小、FAT表及根目录所在的启始扇区等。通过获得这些信息后,就可以找出SD卡是否有我们可以播放的音乐文件。若有音乐文件,微处理器将通过SPI总线方式读出该文件的音频信息,并将歌曲的码流信息送入到VS1003芯片中,通过VS1003芯片解码以及其内含的高质量的立体DAC和耳机驱

动电路,实现MP3歌曲的播放功能。在触摸键的控制下,通过LCD3310中菜单选项的选择,实现对歌曲选择及音量控制等功能;在播放的同时,上显示的信息除歌曲名称信息外,还包括进度和音量等信息。由于SPI1读取SD卡文件的速度远超过VS1003播放数据流的速度,因此VS1003在播放来自SPI2的数据流期间,SPI1能从SD卡中读取下次播放所需的数据,不会产生声音不连续的情况。由于使用了2个SPI接口,相互之间无干扰,

且提高了文件系统的效率,因此本系统能得到非常高品质的音乐。如图6是MP3播放器的软件系统流程图。下面介绍软件的核心模块。(1)SD模块SD模块主要提供SD卡驱动以及对FAT文件系统操作的函数,FAT文件系统支持长文件名。该模块主要含有2个文件msd.c和fat16.c。下面分别介绍其主要函数的功能。

(1)msd.c该文件用于提供SD卡的驱动,主要包括以下函数。SPI_Config:配置与SD卡相连接的SPI1及相关GPIO。MSD_Init:初始化SD卡通信。Get_Medium_Characteristics:获取SD卡的容量和块大小等相关信息。MSD_GoIdleState:令SD卡处于空闲态。

MSD_SendCmd:向SD卡发送命令。MSD_GetResponse:从SD卡获取响应。MSD_GetStatus获取卡的状态。MSD_WriteBlock:向SD卡写入1个块的数据。MSD_ReadBlock从卡读取个块的数据。以下是函数MSD_ReadBlock的实现:

u8MSD_ReadBlock(u8pBuffer,u32ReadAddr,u16NumByteToRead){

u32i=0;u8rvalue=MSD_RESPONSE_FAILURE;MSD_CS_LOW();/拉低片选信号,选中SD卡MSD_SendCmd(MSD_READ_SINGLE_BLOCK,ReadAddr,0xFF);/发送读取块命令/检测SD卡是否有返回信息,若是则返回0x00

if(!MSD_GetResponse(MSD_RESPONSE_NO_ERROR)){!MSD_GetResponse(MSD_START_DATA_SINGLE_BLOCK_READ)){/等待数据令牌,标志数据传输开始for(i=0;i
VS103、中断、串行口、液晶、flash存储器、SD卡等初始化读SD卡的主引导记录

解析文件系统从SD卡里读取MP3文件信息

解析短文件名调用以GB2312编码的汉字驱动并显示

有长文件名计算MP3数据流首簇地址

读取一扇区的MP3数据流MP3数据流写入VS103芯片

读完一簇文件结束

结束

开始

Unicode到GB2132转换

计算下一簇地址

YN

Y

YNN

图6软件系统流程图

pBuffer+;/缓存指针后移}rvalue=MSD_RESPONSE_NO_ERROR;//修改rvalue的值为成功}MSD_CS_HIGH();/拉高片选信号,禁用SD卡

MSD_WriteByte(DUMMY);/写无效字节,传输结束returnrvalue;/返回}(2)fat16.c该文件提供对FAT16文件系统的支持,主要包含以下函数。ReadMBR:读取MBR数据结构。

ReadBPB读取BPB数据结构。ReadFAT:读取文件分配表指定项。ReadBlock读取SD卡的一个扇区。FAT_Init:获取FAT16文件系统的基本信息。DirStartSec:获取根目录的开始扇区号。DataStartSec获取数据区的开始扇区号。

ClusConvLBA:获取一个簇的开始扇区号。LBAConvClus转换扇区号与簇号之间的关系。GetFileName:获取指定文件的首扇区号。ListDateTime列出文件或子目录创建的时间日期。SearchFoler:在指定范围内查找文件或子目录。ListDir:列出指定范围内的文件或子目录及相关信息。

FAT_FileOpen:打开指定文件。FAT_FileRead读取文件数据。(2)VS1003模块VS1003模块主要提供对解码芯片VS1003的驱动,为应用层播放音频数据、控制音量声道等提供基本接口。该模块主要含文件vs1003.c。其主要函数的功能如下。

vs1003.c文件主要提供VS1003芯片的驱动,包含以下几个主要函数。VS1003_Config:配置与连接的相关引脚,包括SPI2、PA0、PA1、PA2、PA3。SPIGetChar:通过SPI从VS1003读取1个字节。SPIPutChar通过向写入个字节。如果是MP3/WMA数据流,则VS1003将开始解码并播放。

Mp3ReadRegister:读取VS1003寄存器的值。Mp3WriteRegister写寄存器。Mp3Reset:VS1003复位,包括软件复位和硬件复位。Mp3SoftReset:VS1003软件复位,设置时钟、采样率、重音、音量、立体声等参数,一般在2首乐曲之间需要一次软件复位。VsSineTest:播放正弦声波,用于测试VS1003和的连接是否完好。

以下是VS1003音频解码芯片初始化的部分代码:

voidinit_vs1003(){vs1003_dir|=0X2C;VS1003_xResetDIR|=BIT5;printfs(“\n-----hard_reset----\n”);

hard_reset;//硬件复位delay_ms(10);sotf_send_bit2(0XFF);hard_set;sotf_send_bit2(0XFF);Wait_Vs1003_DREQ();

printfs(“\n-----soft_reset_vs1003----\n”);soft_reset_vs1003();printfs(“\n----vs1003initok----\n”);}

参考文献:1、周立功《PDIUSBD12USB固件编程与驱动开发》北京航空航天大学出版社203.22、孙天泽等编著《嵌入式设计及Linux驱动开发指南——基于ARM9处理器》电子工业出版社205.23、百度百科及ARM官方网站及芬兰VLSI

献花(0)
+1
(本文系谁与共读首藏)