ARM体系课程设计实验报告.docx

上传人:b****7 文档编号:8691429 上传时间:2023-02-01 格式:DOCX 页数:12 大小:102.28KB
下载 相关 举报
ARM体系课程设计实验报告.docx_第1页
第1页 / 共12页
ARM体系课程设计实验报告.docx_第2页
第2页 / 共12页
ARM体系课程设计实验报告.docx_第3页
第3页 / 共12页
ARM体系课程设计实验报告.docx_第4页
第4页 / 共12页
ARM体系课程设计实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

ARM体系课程设计实验报告.docx

《ARM体系课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《ARM体系课程设计实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

ARM体系课程设计实验报告.docx

ARM体系课程设计实验报告

5.3液晶显示模块设计--------------------------------------------5

6.1VS1003的初始化--------------------------------------------6

6.2MP3文件数据写入---------------------------------------------8

7.1SD模块-----------------------------------------------------10

7.2VS1003模块-------------------------------------------------14

7.3图形人机交互模块-------------------------------------------16

 

绪论

随着消费类电子产业的蓬勃发展,越来越多的嵌入式电子产品走进了千家万户。

电脑的形态也不再局限于以前的PC机,各式各样的嵌入式系统出现在了众多的行业和应用中,其中ARM和Linux结合的产品在市场上最受青睐。

ARM由于其低功耗、高性能、小体积、低成本受到了越来越广泛的重视,成为众多公司产品开发的主流硬件。

而Linux则因其开放的源代码,可裁剪的内核,便利的开发环境,各硬件平台的通用性,逐渐成为嵌入式开发的主流操作系统。

本课题的嵌入式MP3设计就是基于ARM和linux平台的。

本课题实现了一个完整的嵌入式系统,选用zq2410开发板为目标平台,linux作为目标操作系统,在这样的软硬件环境下研究实现MP3播放器。

文章首先综述了嵌入式系统开发方法,介绍了ARM处理器及其特点,Linux操作系统,嵌入式系统的开发模式以及如何搭建交叉开发环境,然后介绍了所选硬件平台zq2410目标板的各种资源,在系统软件开发中,介绍Uboot、Linux的裁剪和移植,根文件系统的制作以及核心驱动程序的开发,应用程序开发中,介绍了MP3的原理,移植MadplayMP3播放器,最后成功对Madplay播放器实现了综合控制。

 

关键词:

嵌入式ARMLinux驱动程序MP3

 

第1章课程设计的目标

1、了解嵌入式Linux的工作原理,掌握嵌入式Linux的移植方法。

2、了解主流BootloaderUboot的工作原理。

3、掌握嵌入式Linux字符设备驱动程序开发方法。

4、掌握嵌入Linux下应用程序的开发、编译、调试、执行技术。

5、掌握MP3播放程序madplay的移植与测试。

拟解决的关键问题:

●嵌入式linux的移植裁剪

●LED驱动程序设计及测试

●MadPlayMP3播放程序移植及测试

 

第2章课程设计的意义

《ARM体系结构》课程设计为学生提供了一个理论与实践相结合的机会。

既锻炼了学生动手能力,又会加深理解学生在课堂所学习的理论知识。

通过课程设计可以将课本上的理论知识和实际应用有机的结合起来,培养学生又动脑,又动手,独立思考分析问题的能力,提高学生运用所学知识解决实际问题的综合素质。

《ARM体系结构》课程设计的主要目标是:

(1)掌握ARM相关的指令集、流水线技术、存储及异常处理方式;

(2)掌握构建嵌入式系统软硬件平台的基本技能;

(3)具备基本嵌入式系统下C语言、汇编语言编程能力、嵌入式操作系统基本调试的能力。

第3章需求分析

采用STM32系列微控制器,结合解码芯片VS1003、SD卡、LCD等外围设备设计并实现了MP3播放器。

其主要功能有:

播放VS1003支持的所有音频文件,如MP3、WMA、WAV文件,且音质非常好;通过触摸屏实现按键功能,控制播放上一首/下一首、音量增减等;通过LCD显示歌曲名字和播放状态;本系统还实现了读卡器功能,PC机可通过USB接口直接对开发板上的SD卡进行读写操作,以方便拷贝音频文件。

MP3播放过程是STM32通过SPI1接口将数据从SD卡中取出,然后通过SPI2接口送至解码芯VS1003解码播放。

这里解码模块单独使用一个SPI接口,以减小干扰和噪声、提高音质。

 

第4章概要设计

本系统在硬件上分为6个模块:

微控制器STM32F103、解码模块VS1003、存储模块SD卡、触摸屏、USB接口和显示屏LCD。

系统硬件框架如图5所示。

系统硬件框架图

4.1存储模块设计

SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡。

在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。

SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。

SD卡支持两种总线方式:

SD方式与SPI方式。

其中SD方式采用6线制,而SPI方式采用4线制,采用单片机对SD卡进行读写时一般都采用SPI模式。

可用不同的初始化方式使SD卡工作于SD方式或SPI方式。

在本设计中,音频数据MP3文件是以SD卡为载体。

所以在电路设计中必须含有读取SD卡模块。

该系统使用STM32内部接口SPI1与SD卡进行通信,下面介绍其引脚连接情况。

PE3:

低电平有效,连接到SD卡的片选引脚CD/DAT3。

SPI在和SD卡进行通信时,需要将PE3拉低才能对SD卡进行操作。

PA7:

映射为STM32内部接口SPI1的主输出从输入(MOSI)信号线。

这里STM32是主设备,SD卡是设备。

数据流的传输方向是从STM32传输给SD卡。

该信号线用于传输一些控制命令来完成SD卡的操作,如读、写等。

PA5:

已连接到STM32内部接口SPI1的时钟(SCLK)信号线。

可设置SPI的时钟频率来调整读取SD卡数据的快慢。

PA6:

已连接到STM32内部接口SPI1的主输入从输出(MISO)信号线。

数据的传输方向是从SD卡传输给STM32,主要返回SD卡的一些状态、内部寄存器值等。

PC12:

用于检测SD卡是否完全插入。

当SD卡完全插入时,PC12为低电平,否则为高电平。

4.2音频解码模块设计

音频解码模块完成MCU从SD卡里读取的数字MP3音频数据流进行解析、并转化成模拟信号进行输出。

在这里,系统使用VS1003音频解码芯片来实现音乐数据流的解析。

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

VS1003与核心控制器MSP430F149的数据通信是通过SPI总线方式进行的。

VS1003主要通过串行命令接口(SCI)和串行数据接口(SDI)来接收MSP430F149控制器的控制命令和MP3的数据。

通过XCS、XDCS引脚的置高、置低来确认是哪一个接口处于传送状态。

对于VS1003芯片的功能控制,如初始化、软复位、暂停、音量控制、播放时间的读取等,均是通过SCI写入到特定寄存器的内容来实现的。

两条SCI指令之间要通过DREQ引脚信号判断上次处理是否完成。

该系统使用STM32内部接口SPI2与VS1003进行通信,下面介绍其引脚连接情况。

PA3:

VS1003的中断请求引脚。

当VS1003内部数据已处理完毕,需要新的数据时,将DREQ拉高。

STM32根据这个信号来给VS1003发送新的数据流。

PB13:

已连接到STM32内部接口SPI2的时钟(SCLK)信号线。

PB14:

已连接到STM32内部接口SPI2的主输入从输出(MISO)信号线。

这里STM32是主设备,VS1003是从设备。

数据流的传输方向是从VS1003传输给STM32。

主要用于读取VS1003的一些状态和内部寄存器值,比如寄存器测试返回的内部寄存器的值。

PB15:

已连接到STM32内部接口SPI2的主输出从输入(MOSI)信号线。

这里STM32是主设备,VS1003是从设备。

数据流方向是从STM32传输给VS1003,主要传输给VS1003一些控制命令、MP3/WMA数据流等。

PA1:

低电平有效,如果拉低该引脚,那么通过SPI传输的是控制信号。

控制信号包括读写VS1003的内部寄存器、对VS1003进行初始化、设置左右声道音量等。

PA2:

低电平有效,如果拉低该引脚,那么通过SPI传输的是数据信号。

比如在向VS1003传输MP3/WMA的数据流时需要拉低该引脚。

PA0:

低电平有效,拉低该引脚则硬件复位VS1003。

4.3液晶显示模块设计

LCD3310芯片是一个48行84列的液晶显示器主要模块。

其内存带有低功耗PCD8544的CMOSLCD控制驱动器,串行输入速度最高可达4.0Mbits/S,而且所有必须的显示功能集成在一块芯片上,包括LCD电压及偏置电压发生器,所以LCD3310是一款低功耗的液晶显示器。

为了让LCD3310液晶能够显示4行12*12的汉字,系统开辟了一个6*84字节的缓冲区,要写液晶时,就不用直接写LCD3310的静态DDRAM了,可以先写系统为它开辟的数据缓冲区,最后再刷新修改的部分就可以显示出要显示的内容,LCD3310与主控制器是SPI接口方式。

 

第5章相关技术说明

5.1VS1003的初始化

如其它芯片一样,初始化对于VS1003来说同样是极其重要的。

初始化的过程大致是这样的:

1.硬件复位:

接XRESET拉低。

2.延时,将XDCS、XCS、XRESET置高。

3.向MODE中写入0X0804。

4.等待DREQ为高。

5.设置VS1003的时钟:

SCI_CLOCKF=0x9800,3倍频。

6.设置VS1003的采样率:

SPI_AUDATA=0xbb81,采样率48k,立体声。

7.设置重音:

SPI_BASS=0x0055。

8.设置音量:

SCI_VOL=0x2020。

9.这一步被很多人忽视,向VS1003发送4个字节的无效数据,用以启动SPI发送。

实现代码如下:

voidMp3Reset(void){

XRESET=0;

delay(100);

XDCS=XCS=XRESET=1;

wr_commad(0x00,0x08,0x04);

delay(10);

DREQ=1;

while(!

DREQ);

wr_commad(0x03,0x98,0x00);

delay(10);

wr_commad(0x05,0xbb,0x81);

delay(10);

wr_commad(0x02,0x00,0x55);

delay(10);

wr_commad(0x0b,VOL_VALUE,VOL_VALUE);//音量

delay(10);

spi_write(0);

spi_write(0);

spi_write(0);

spi_write(0);

}

在进行了正确的初始化后,还要着重检查一下VS1003的模拟部分是否正常将VS1003的所有DVDD、AVDD管脚以及XRESET、TEST(第32个引脚)接+3.0V,然后测量RCAP引脚,它应该是1.3V左右,否则芯片模拟部分未正常工作。

5.2MP3文件数据写入

以上的对VS1003的初始化与测试都通过后,现在就可以给它发送MP3文件了。

但是这时就又出现一个新的问题。

MP3文件通常是比较大的,小的也要1M~2M,如果使单片机内部的FlashRom的话,容量是远远不够的。

需要有一种大容量的存储器来作为MP3文件的载体。

在笔者的调试系统中采用了SD卡(256M)、U盘(1G)与移动硬盘(40G)来存储MP3文件。

关于SD卡与U盘的读写方法可以参看相关章节。

这些大容量的存储设备通常也是按照扇区来进行读写的,但在实际的应用中更多的是结合FAT32等文件系统来进行文件读写。

文件系统部分可以参照《FAT32的存储机制及其在单片机中的实现》。

这里抛开存储介质不谈,只谈数据的写入方法。

其实写入数据的方法十分简单。

主要就是看DREQ信号,在VS1003的FIFO能够接受数据的时候输出高电平。

每次可以写入32个字节的数据。

而DREQ变低时,单片机就要停止数据的发送。

具体的写数据的方法如下:

1.将XDCS拉低。

2.等待DREQ为高。

3.通过SPI写入数据。

4.在文件没有结束前不断重复2与3操作。

5.在所有的数据都发送完毕后,最后发送2048个无效字节,用以清除VS1003的数据缓冲区。

6.将XDCS置高。

实现代码如下:

XDCS=0;

for(j=621;j<2783;j++){

for(k=0;k<8;k++){

MMC_get_data_LBA(j,64,get);

for(i=0;i<64;i++){

DREQ=1;

while(!

DREQ);

spi_write(get[i]);

//delay(60000);

}

}

}

for(temp=0;temp<2048;temp++){

DREQ=1;

while(!

DREQ);

spi_write(0);

}

XDCS=1;

 

第6章详细设计

 

//**************声音调节********************//

if(voice_global==1&PWMMR2!

=0)

PWMMR2-=PWMMR0/10;

elseif(voice_global==2&PWMMR2!

=9*(PWMMR0/10))

PWMMR2+=PWMMR0/10;

else;

//***************上一曲下一曲********************//

if(b_n_global==3)

{

if(flag_b_n==0)

flag_b_n=1;

elseif(flag_b_n==4)

flag_b_n==1;

else

flag_b_n++;

}

if(b_n_global==4)

{

if(flag_b_n==0)

flag_b_n=4;

elseif(flag_b_n==1)

flag_b_n==4;

else

flag_b_n--;

}

if(flag_b_n==0)

{

for(i=temp;i

{

PWMMR0=Fpclk/HCMM1[i];

PWMLER=0x05;

Delay(HCMM_L1[i]);

}

temp=0;

}

elseif(flag_b_n==1)

{

for(i=temp;i

{

PWMMR0=Fpclk/HCMM1[i];

PWMLER=0x05;

Delay(HCMM_L1[i]);

}

temp=0;

}

elseif(flag_b_n==2)

{

for(i=temp;i

{

PWMMR0=Fpclk/HCMM2[i];

PWMLER=0x05;

Delay(HCMM_L2[i]);

}

temp=0;

}

elseif(flag_b_n==3)

{

for(i=temp;i

{

PWMMR0=Fpclk/HCMM3[i];

PWMLER=0x05;

Delay(HCMM_L3[i]);

}

temp=0;

}

elseif(flag_b_n==4)

{

for(i=temp;i

{

PWMMR0=Fpclk/HCMM4[i];

PWMLER=0x05;

Delay(HCMM_L4[i]);

}

temp=0;

}

else

{

for(i=temp;i

{

PWMMR0=Fpclk/HCMM1[i];

PWMLER=0x05;

Delay(HCMM_L1[i]);

}

temp=0;

}

/*if(b_n_msg==4)

for(i=temp;i

{

PWMMR0=Fpclk/HCMM1[i];//设置输出频率

PWMLER=0x05;//更新匹配值后,必须锁存

Delay(HCMM_L1[i]);//延时,控制播放速度

}*/

}

}

 

第七章总结

通过这次课程设计,使我对以前完全陌生的ARM软件有了初步的接触,我学到了如何在ARM中实现基本的MP3播放功能。

原先我对嵌入式系统并没有很深刻的了解,在做完课程设计后,我对数码管、蜂鸣器及流水灯的结构和功能有了更进一步的了解,并且知道了一些相关函数的功能与运用,真正的把所学的东西运用到了实际中,更好的把课本知识与实际相结合,对我以后的学习有很大帮助。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1