数字fm电台设计开发 课程设计_第1页
数字fm电台设计开发 课程设计_第2页
数字fm电台设计开发 课程设计_第3页
数字fm电台设计开发 课程设计_第4页
数字fm电台设计开发 课程设计_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

昆明理工大学津桥学院ARM实作课程报告实作设计题目数字FM电台设计开发专业电子信息科学与技术年级2011级姓名学号指导教师王剑平日期20131120津桥学院ARM实际应用系统开发选题报告指导教师王剑平职称副教授学生年级11级学生专业电信开发题目数字FM电台设计开发选题的依据、目的、要求、工作量大小数字FM电台在日常生活中有广泛应用,本题目旨在帮助学生掌握数字电台的开发和应用。选题的主要内容和意义设计数字FM电台,任务(1)了解数字FM电台的基本工作原理。进行芯片选型、电路设计。(2)实现电台发射频率可调。要求(1)实现68MHZ107MHZ范围可调。(2)实现音频信号发射。(3)实时显示发射频率。课程所需材料清单及材料费预算(1)STM32开发板700元(2)数字FM电台模块50元;(3)液晶显示模块100元(4)其它辅料200元共计1050元拟采用方法及预期成果采用STM32主控芯片实现功能,液晶显示结果。采用无线耳机接受FM信号并进行测试。教师意见同意选题摘要数字FM电台在日常生活中有广泛应用,战舰STM32开发板上载了一颗FM收发芯片RDA5820。该芯片不但可以用来做用来做FM接收,实现音机功能;还可以用来做FM发射,实现电台的功能。在接下来的实作中本文将就如何利用RDA5820的发射功能在一定的频率上实现发射SD卡中的音乐和通过麦克风传音作出详细的阐述。【关键词】FMRDA5820发射电台ABSTRACTDIGITALFMRADIOISWIDELYAPPLIEDINDAILYLIFE,THEBATTLESHIPSTM32DEVELOPMENTBOARDTOUPLOADAFMTRANSCEIVERCHIPRDA5820THECHIPNOTONLYCANBEUSEDTODOTODOFMRECEIVER,ACHIEVESOUNDMACHINEFUNCTIONFMEMISSIONCANALSOBEUSEDTODO,TOREALIZETHEFUNCTIONOFTHERADIOINTHENEXTIMPLEMENTATIONINTHISARTICLEWILLDISCUSSHOWTOUSETHELAUNCHRDA5820FUNCTIONIMPLEMENTEDINCERTAINFREQUENCYLAUNCHTHEMUSICINSDCARDANDPASSTHROUGHAMICROPHONESOUNDTOMAKEADETAIL【KEYWORD】FMRDA5820LAUNCHRADIO目录津桥学院ARM实际应用系统开发选题报告I摘要IIABSTRACTII第1章绪论111课题背景112主要芯片介绍1121RDA5820介绍1122VS1053简介312374HC4052简介5124SD卡简介6125TFTLCD简介9第2章硬件设计及模块功能实现1021FM电台设计框图1022硬件设计10221RDA5820与STM32的连接电路10222VS1053解码芯片电路原理11223SD卡接口和STM32的连接12224TFTLCD显示模块1423模块功能实现15231SD卡模块指令15232TFTLCD模块控制16233VS1053的SPI数据传送和SCI寄存器18第3章软件设计2331FM电台软件设计流程图2332软件设计结构框图2433主函数介绍24331系统初始化24332FM信号发射设置25333TFTLCD显示基本信息25334音频源的选择2534IIC驱动RDA5820FM收发芯片2535SPI驱动VS1053音频解码器2736SD卡读写驱动283774HC4052音频选择2838TFTLCD显示驱动29第4章下载调试3141调试环境3142下载验证31结论34主要工作34心得体会34参考文献35第1章绪论11课题背景自20世纪90年代以来,无线通信在全球范围内取得了突飞猛进的发展。无论是军用或民用通信,在各种频段上出现了许多新的系统和模式,满足了社会上各种各样的需求。发射机作为无线通信设备的重要组成部分,其发展极大的促进了无线通信技术的发展。无线电技术诞生以来,信息传输和信息处理始终是其主要任务。为了有效地进行传输,必须将携带信息的低频电信号调制到几十MHZ几百MHZ以上的高频振荡信号上,再经天线发送出去。为减小各种因素引起的系统不稳定,增强系统的可靠性,系统必须包括自动增益控制、自动频率控制和自动相位控制在内的反馈控制电路。本文所讨论的就是一个利用锁相环组成的直接调频信号发射器。FM发射电台具有使接收机接收灵敏度高,抗干扰力强、音质清晰等特点,但往往在制作、调试过程中易出现电路易停振、抗干扰力差、失真等故障。该FM发射机电路工作频率稳定,抗干扰力强,制作调试简单。本设计是一个调频发射电台,调频就是频率调制,所谓频率调制就是原来等幅恒频的高频信号的频率,随着调制信号的幅度变化而变化,调频发射电台就是发送这些频率调制的无线电信号,经过解调变换成无限信号并发送信号的电子设备。本设计就是利用STM32开发板,设计一个数字FM发射电台系统。通过教师的悉心指导和自己的不断努力,最终完成了毕业设计的各项任务,成功设计一小功率调频发射电台,基本完成其各项功能。随着消费类电子的兴起和繁荣以及数字电子技术的发展,收音机逐渐数字化,集成化,而且成本越来越低,这使得在各种设备中嵌入收音机的现象更加普遍。广大从事消费类电子设计的厂商都不忘在诸如MP3、智慧手机、便携式VIDEO播放器等产品中嵌入FM接收部分。这样电台的建设就更加有意义了。高频电子线路本是一门较为复杂的电路。其中更有精髓的知识值的我们去学习。同时随着计算机技术与高频电子技术的发展,模拟电子技术,得到广泛应用,在模拟电子电路中尤其得到广泛应用,成为现代电子电器必不可少的电子技术。在高频电子线路中,LC振荡电路是无孔不入,无所不在。应用于发射机中,加上简单的电路及连线,就可以组成各种形式的、任意信号,广泛应用。小功率调频发射电台在使用中,控制方法科学、简单、明了,控制电路及连线简单、易行,工作稳定性好,从而得到广泛应用。在此,我们就调频发射电台的应用作较完整和系统的研究,促进小功率调频发射电台的正确使用。12主要芯片介绍121RDA5820介绍RDA5820是北京锐迪科推出的一款集成度非常高的立体声FM收发芯片。该芯片具有以下特点FM发射和接收一体支持65MHZ115MHZ的全球FM接收频段,收发天线共用支持IIC/SPI接口支持32768K晶振数字音量及自动AGC控制支持立体声/单声道切换,带软件静音功能支持I2S接口(输入/输出)内置LDO,使用电压范围宽(2755V)高功率32欧负载音频输出、可以直接驱动耳机集成度高、功耗低、尺寸小(4MM4MMQFN封装)、应用简单RDA5820应用范围很宽,在很多手机、MP3、MP4甚至平板电脑上都有应用。RDA5820的引脚图如图11所示RDA5820支持2种通信模式,SPI和IIC,在战舰STM32开发板上面,使用的是RDA5820的IIC模式。通过将图11的MODE脚接GND,RDA5820即进入IIC模式,此时SCLK充当IIC的SCL,SDIO充当IIC的SDA。RDA5820的IIC地址为0X11(不包含最低位),对应读为0X23,写为0X20。模式设置RDA5820的模式设置通过40H(寄存器地址0X40)寄存器的CHIP_FUNC30位来设置,RDA5820可以工作在RX模式、TX模式、PA模式和DAC模式等,本章我们只介绍RX模式和TX模式。图11RDA5820引脚图通过设置CHIP_FUNC300即可定义当前工作模式为FM接收模式。在该模式下,我们即可实现FM收音机功能。通过设置CHIP_FUNC301即可定义当前工作模式为FM发送模式。在该模式下,我们即可实现FM电台的功能。频点设置软件可以通过配置03H(寄存器地址0X30)寄存器来选择FM频道。搜台(SEEK)的步进长度(100KHZ、200KHZ或50KHZ)由SPACE10来选择,频道由CHAN90来选择,频率范围(76MHZ91MHZ、87MHZ108MHZ或76MHZ108MHZ或用户自定义65MHZ115MHZ范围内频段)由BAND10来选择。自定义的频段由寄存器53H(CHAN_BOTTOM)和54H(CHAN_TOP)来设置,单位为100KHZ,即定义65MHZ76MHZ,可设置BAND103(用户自定义频段),并且设置CHAN_BOTTOM0X028A,CHAN_TOP0X02F8。频点计算方法如下(该公式也适用于FM频点的读取)FMFREQSPACECHANFMBTM其中FMFREQ即我们需要的FM频率(MHZ),SPACE为我们设置的步进长度(KHZ),CHAN是我们设置的频点值,FMBTM则是我们在BAND里面所选频段的最低频率,当BAND0的实惠,FMBTM87MHZ;BAND1的时候,FMBTM76MHZ;BAND2的时候,FMBTMCHAN_BOTTOM01MHZ。例如,我们要设置FM频率为930MHZ,假设BAND0,SPACE100KHZ。那么我们只需要设置CHAN60即可。频点设置部分,FM接收和FM发送是共用的,对两者都适用。122VS1053简介VS1053是继VS1003后荷兰VLSI公司出品的又一款高性能解码芯片。该芯片可以实现对MP3/OGG/WMA/FLAC/WAV/AAC/MIDI等音频格式的解码,同时还可以支持ADPCM/OGG等格式的编码,性能相对以往的VS1003提升不少。VS1053拥有一个高性能的DSP处理器核VS_DSP,16K的指令RAM,05K的数据RAM,通过SPI控制,具有8个可用的通用IO口和一个串口,芯片内部还带了一个可变采样率的立体声ADC(支持咪头/咪头线路/2线路)、一个高性能立体声DAC及音频耳机放大器。VS1053的特性如下支持众多音频格式解码,包括OGG/MP3/WMA/WAV/FLAC(需要加载PATCH)/MIDI/AAC等。对话筒输入或线路输入的音频信号进行OGG(需要加载PATCH)/IMAADPCM编码高低音控制带有EARSPEAKER空间效果(用耳机虚拟现场空间效果)单时钟操作1213MHZ内部PLL锁相环时钟倍频器低功耗内含高性能片上立体声DAC,两声道间无相位差过零交差侦测和平滑的音量调整内含能驱动30欧负载的耳机驱动器模拟,数字,I/O单独供电为用户代码和数据准备的16KB片上RAM可扩展外部DAC的I2S接口用于控制和数据的串行接口(SPI)可被用作微处理器的从机特殊应用的SPIFLASH引导供调试用途的UART接口新功能可以通过软件和8GPIO添加VS1053相对于它的前辈VS1003,增加了编解码格式的支持(比如支持OGG/FLAC,还支持OGG编码,VS1003不支持)、增加了GPIO数量到8个(VS1003只有4个)、增加了内部指令RAM容量到16KIB(VS1003只有55KIB)、增加了I2S接口(VS1003没有)、支持EARSPEAKER空间效果(VS1003不支持)等。同时VS1053的DAC相对于VS1003有不少提高,同样的歌曲,用VS1053播放,听起来比1003效果好很多。VS1053的封装引脚和VS1003完全兼容,所以如果你以前用的是VS1003,则只需要把VS1003换成VS1053,就可以实现硬件更新,电路板完全不用修改。不过需要注意的是VS1003的CVDD是25V,而VS1053的CVDD是18V,所以你还需要把稳压芯片也变一下,其他都可以照旧了。VS1053通过SPI接口来接受输入的音频数据流,它可以是一个系统的从机,也可以作为独立的主机。这里我们只把它当成从机使用。我们通过SPI口向VS1053不停的输入音频数据,它就会自动帮我们解码了,然后从输出通道输出音乐,这时我们接上耳机就能听到所播放的歌曲了。图12VS1053封装图12374HC4052简介74HC4052是一款高速CMOS器件,74HC4052引脚兼容HEF4052B。74HC4052遵循JEDEC标准NO7A。74HC4052是双路4通道模拟多路选择器/多路分配器,带有公共选择逻辑。每个多路选择器包含4个独立输入/输出端(NY0至NY3)和1个公共输入/输出端(NZ)。公用通道选择逻辑包含2个数字选择端(S0和S1)和1个低有效使能端(E)。E为低时,4个开关的其中之一将被S0和S1选中(低阻态)。E为高时,所有开关都进入高阻态,直接无视S0和S1。VCC和GND是数字控制端(S0和S1,E)的供电引脚,74HC4052的VCC至GND范围为20V100V。74HC4052的模拟输入/输出端(NY0至NY3,NZ)在上限VCC和下限VEE之间摆动,VCCVEE应当不超过100V。作为一个数字多路选择器/多路分配器,VEE将被连接到GND上(一般是接地)宽模拟输入电压范围5V5V低导通阻抗VCCVEE45V时,80欧姆(典型)VCCVEE60V时,70欧姆(典型)VCCVEE90V时,60欧姆(典型)逻辑电平转换沟通5V逻辑和5V模拟信号典型的内置“先断后合”遵循JEDEC标准NO7AESD保护人体模式(HBM)EIA/JESD22A114E超过2000V机械模式(MM)EIA/JESD22A115A超过200V温度范围4085和4012574HC4052基本参数电压20100V传输延迟4NS5V74HC4052其他特性导通阻抗60OHMS逻辑电平CMOS功耗考量低功耗或电池供电应用74HC4052封装与引脚SO16,SSOP16,DIP16,TSSOP16表1174HC4052基本参数124SD卡简介SD卡(SECUREDIGITALMEMORYCARD)中文翻译为安全数码卡,它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理PDA和多媒体播放器等。SD卡由日本松下、东芝及美国SANDISK公司于1999年8月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。按容量分类,可以将SD卡分为3类SD卡、SDHC卡、SDXC卡。如下表12所示容量命名简称02GSTANDARDCAPACITYSDMEMORYCARDSDSC或SD2G32GHIGHCAPACITYSDMEMORYCARDSDHC32G2TEXTENDEDCAPACITYSDMEMORYCARDSDXC表12SD卡按容量分类SD卡和SDHC卡协议基本兼容,但是SDXC卡,同这两者区别就比较大了,本章我们讨论的主要是SD/SDHC卡(简称SD卡)。SD卡一般支持2种操作模式1,SD卡模式(通过SDIO通信);2,SPI模式;主机可以选择以上任意一种模式同SD卡通信,SD卡模式允许4线的高速数据传输。SPI模式允许简单的通过SPI接口来和SD卡通信,这种模式同SD卡模式相比就是丧失了速度。SD卡的引脚排序如下图14所示图14SD卡引脚排序图SD卡引脚功能描述如表13所示表13SD卡引脚功能表SD卡只能使用33V的IO电平,所以,MCU一定要能够支持33V的IO端口输出。注意在SPI模式下,CS/MOSI/MISO/CLK都需要加10100K左右的上拉电阻。SD卡有5个寄存器,如表14所示名称宽度描述CID128卡标识寄存器RCA16相对卡地址(RELATIVECARDADDRESS)寄存器本地系统中卡的地址,动态变化,在主机初始化的时候确定SPI模式中没有CSD128卡描述数据卡操作条件相关的信息数据SCR64SD配置寄存器SD卡特定信息数据OCR32操作条件寄存器表14SD卡相关寄存器SD卡初始化过程因为我们使用的是SPI模式,所以先得让SD卡进入SPI模式。方法如下在SD卡收到复位命令(CMD0)时,CS为有效电平(低电平)则SPI模式被启用。不过在发送CMD0之前,要发送74个时钟,这是因为SD卡内部有个供电电压上升时间,大概为64个CLK,剩下的10个CLK用于SD卡同步,之后才能开始CMD0的操作,在卡初始化的时候,CLK时钟最大不能超过400KHZ。接着我们看看SD卡的初始化,SD卡的典型初始化过程如下1、初始化与SD卡连接的硬件条件(MCU的SPI配置,IO口配置);2、上电延时(74个CLK);3、复位卡(CMD0),进入IDLE状态;4、发送CMD8,检查是否支持20协议;5、根据不同协议检查SD卡(命令包括CMD55、CMD41、CMD58和CMD1等);6、取消片选,发多8个CLK,结束初始化这样我们就完成了对SD卡的初始化,注意末尾发送的8个CLK是提供SD卡额外的时钟,完成某些操作。通过SD卡初始化,我们可以知道SD卡的类型(V1、V2、V2HC或者MMC),在完成了初始化之后,就可以开始读写数据了。SD卡读取数据,这里通过CMD17来实现,具体过程如下1、发送CMD17;2、接收卡响应R1;3、接收数据起始令牌0XFE;4、接收数据;5、接收2个字节的CRC,如果不使用CRC,这两个字节在读取后可以丢掉。6、禁止片选之后,发多8个CLK;以上就是一个典型的SD卡读数据过程,SD卡的写于读数据差不多,写数据通过CMD24来实现,具体过程如下1、发送CMD242、接收卡响应R1;3、发送写数据起始令牌0XFE;4、发送数据;5、发送2字节的伪CRC;6、禁止片选之后,发多8个CLK;以上就是一个典型的写SD卡过程。125TFTLCD简介TFTLCD即薄膜晶体管液晶显示器。其英文全称为THINFILMTRANSISTORLIQUIDCRYSTALDISPLAY。TFTLCD与无源TNLCD、STNLCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFTLCD也被叫做真彩液晶显示器。上一章介绍了OLED模块,本章,我们给大家介绍ALIENTEKTFTLCD模块,该模块有如下特点1,24/28/353种大小的屏幕可选。2,320240的分辨率(35分辨率为320480)。3,16位真彩显示。4,自带触摸屏,可以用来作为控制输入。本章,我们以28寸的ALIENTEKTFTLCD模块为例介绍,该模块支持65K色显示,显示分辨率为320240,接口为16位的80并口,自带触摸屏。图15ALIENTEK28寸TFTLCD外观图第2章硬件设计及模块功能实现21FM电台设计框图本文设计SD卡音源和MIC音源两种音源输入,经音频选择,CPU处理之后输出22硬件设计实验设计为FM发射模式,设计发射频率为922MHZ,开机显示发射频率,KEY_UP键选择音源输入等信息。按一下KEY_UP键即进入SD卡音源输入模式,这时KEY0M(下一曲)KEY2M(上一曲)起效,再按第二下进入MIC音源模式,这时KEY_DOWN键起效,可以用它来选择直接播放或者录音储存后播放模式。同时用DS0提示程序正在运行。所要用到的部分硬件资源如下1)指示灯DS02)KEY0、KEY1、KEY2和WK_UP等四个按键3)TFTLCD模块4)SD卡5)RDA58206)74HC40527)VS1053B221RDA5820与STM32的连接电路这里RDA5820用IIC总线,接在STM32的PB10和PB11两个脚上,下图中OUTL和OUTR接在RDA5820的LIN和RIN,OUTR和OUTL是来自音频选择器(74HC4052)的输出端,作为FM发送时的音源输入。图21RDA5820与STM32的连接图222VS1053解码芯片电路原理VS1053通过7根线同STM32连接,他们是VS_MISO、VS_MOSI、VS_SCK、VS_XCS、VS_XDCS、VS_DREQ和VS_RST。这7根线同STM32的连接关系如表21所示表21VS1053各信号线与STM32连接关系其中VS_RST是VS1053的复位信号线,低电平有效。VS_DREQ是一个数据请求信号,用来通知主机,VS1053可以接收数据与否。VS_MISO、VS_MOSI和VS_SCK则是VS1053的SPI接口他们在VS_XCS和VS_XDCS下面来执行不同的操作。从上表可以看出,VS1053的SPI是接在STM32的SPI1上面的。1)复位VS1053这里包括了硬复位和软复位,是为了让VS1053的状态回到原始状态,准备解码下一首歌曲。2)配置VS1053的相关寄存器这里我们配置的寄存器包括VS1053的模式寄存器(MODE)、时钟寄存器(CLOCKF)、音调寄存器(BASS)、音量寄存器(VOL)等。图22VS1053B音频解码模块原理图3)发送音频数据当经过以上两步配置以后,我们剩下来要做的事情,就是往VS1053里面扔音频数据了,只要是VS1053支持的音频格式,直接往里面丢就可以了,VS1053会自动识别,并进行播放。不过发送数据要在DREQ信号的控制下有序的进行,不能乱发。这个规则很简单只要DREQ变高,就向VS1053发送32个字节。然后继续等待DREQ变高,直到音频数据发送完。经过以上三步,我们就可以播放音乐了。223SD卡接口和STM32的连接我们用跳线帽将P10的SD_DT3、SD_CMD、SD_SCK、SD_DT0分别同P12的SD_CS、SPI2_MOSI、SPI2_SCK、SPI2_MISO连接起来,即实现SD卡的SPI模式连接。硬件连接示意图如图24所示图23SD卡接口与STM32连接原理图图24SD卡SPI方式硬件连接示意图将图中所示的4处,用跳线帽短接,接口实现SD卡与STM32的SPI连接。最后,你还得自备一个SD卡,将其插入板子下面的SD卡接口。224TFTLCD显示模块模块原理图如图25所示图25ALIENTEK28寸TFTLCD模块原理图TFTLCD模块采用217的254公排针与外部连接,接口定义如图26所示图26ALIENTEK28寸TFTLCD模块接口图从图26可以看出,ALIENTEKTFTLCD模块采用16位的并方式与外部连接,之所以不采用8位的方式,是因为彩屏的数据量比较大,尤其在显示图片的时候,如果用8位数据线,就会比16位方式慢一倍以上,我们当然希望速度越快越好,所以我们选择16位的接口。图1813还列出了触摸屏芯片的接口,关于触摸屏本章我们不多介绍,后面的章节会有详细的介绍。该模块的80并口有如下一些信号线CSTFTLCD片选信号。WR向TFTLCD写入数据。RD从TFTLCD读取数据。D15016位双向数据线。RST硬复位TFTLCD。RS命令/数据标志(0,读写命令;1,读写数据)。80并口在上一节我们已经有详细的介绍了,这里我们就不再介绍,需要说明的是,TFTLCD模块的RST信号线是直接接到STM32的复位脚上,并不由软件控制,这样可以省下来一个IO口。另外我们还需要一个背光控制线来控制TFTLCD的背光。所以,我们总共需要的IO口数目为21个。这里还需要注意,我们标注的DB1DB8,DB10DB17,是相对于LCD控制IC标注的,实际上大家可以把他们就等同于D0D15,这样理解起来就比较简单一点。TFTLCD显示需要的相关设置步骤如下1)设置STM32与TFTLCD模块相连接的IO。这一步,先将我们与TFTLCD模块相连的IO口进行初始化,以便驱动LCD。这里我们用到的是FSMC,FSMC将在1812节向大家详细介绍。2)初始化TFTLCD模块。其实这里就是上和上面OLED模块的初始化过程差不多。通过向TFTLCD写入一系列的设置,来启动TFTLCD的显示。为后续显示字符和数字做准备。3通过函数将字符和数字显示到TFTLCD模块上。23模块功能实现231SD卡模块指令SD卡的命令格式,如表22所示字节1字节25字节6765031071001COMMAND命令参数CRC1表22SD卡命令格式SD卡的指令由6个字节组成,字节1的最高2位固定为01,低6位为命令号(比如CMD16,为10000即16进制的0X10,完整的CMD16,第一个字节为01010000,即0X100X40)。字节25为命令参数,有些命令是没有参数的。字节6的高七位为CRC值,最低位恒定为1。SD卡的命令总共有12类,分为CLASS0CLASS11,下面几个比较重要的命令,如表23所示命令参数回应描述CMD00X00NONER1复位SD卡CMD80X08VHSCHECKPATTERNR7发送接口状态命令CMD90X09NONER1读取卡特定数据寄存器CMD100X0ANONER1读取卡标志数据寄存器CMD160X10块大小R1设置块大小(字节数)CMD170X11地址R1读取一个块的数据CMD240X18地址R1写入一个块的数据CMD410X29NONER3发送给主机容量支持信息和激活卡初始化过程CMD550X37NONER1告诉SD卡,下一个是特定应用命令CMD580X3ANONER3读取OCR寄存器表23SD卡部分命令上表中,大部分的命令是初始化的时候用的。表中的R1、R3和R7等是SD卡的回应,SD卡和单片机的通信采用发送应答机制,如图27所示图27SD卡命令传输过程每发送一个命令,SD卡都会给出一个应答,以告知主机该命令的执行情况,或者返回主机需要获取的数据。SPI模式下,SD卡针对不同的命令,应答可以使R1R7,R1的应答,各位描述如表24所示R1响应格式位76543210含义开始位始终为0参数错误地址错误擦除序列错误CRC错误非法命令擦除复位闲置状态表24R1响应各位描述232TFTLCD模块控制我们仅以ILI9320控制器为例进行介绍,其他的控制基本都类似。ILI9320液晶控制器自带显存,其显存总大小为172820(24032018/8),即18位模式(26万色)下的显存量。模块的16位数据线与显寸的对应关系为565方式,如图28所示图2816位数据与显存对应关系图最低5位代表蓝色,中间6位为绿色,最高5位为红色。数值越大,表示该颜色越深。接下来,我们介绍一下ILI9320的几个重要命令,因为ILI9320的命令很多,我们这里不可能一一介绍,有兴趣的大家可以找到ILI9320的DATASHEET看看。里面对这些命令有详细的介绍。这里我们要介绍的命令列表如表25所示表25ILI9320常用命令表R0,这个命令,有两个功能,如果对它写,则最低位为OSC,用于开启或关闭振荡器。而如果对它读操作,则返回的是控制器的型号。这个命令最大的功能就是通过读它可以得到控制器的型号,而我们代码在知道了控制器的型号之后,可以针对不同型号的控制器,进行不同的初始化。因为93XX系列的初始化,其实都比较类似,我们完全可以用一个代码兼容好几个控制器。R3,入口模式命令。我们重点关注的是I/D0、I/D1、AM这3个位,因为这3个位控制了屏幕的显示方向。AM控制GRAM更新方向。当AM0的时候,地址以行方向更新。当AM1的时候,地址以列方向更新。I/D10当更新了一个数据之后,根据这两个位的设置来控制地址计数器自动增加/减少1,其关系如图29所示图29GRAM显示方向设置图通过这几个位的设置,我们就可以控制屏幕的显示方向了,这种方法虽然简单,但是不是很通用,比如不同的液晶,可能这里差别就比较大,有的甚至无法通用比如9341和9320就完全不通用。R7,显示控制命令。该命令CL位用来控制是8位彩色,还是26万色。为0时26万色,为1时八位色。D1、D0、BASEE这三个位用来控制显示开关与否的。当全部设置为1的时候开启显示,全0是关闭。我们一般通过该命令的设置来开启或关闭显示器,以降低功耗。R32,R33,设置GRAM的行地址和列地址。R32用于设置列地址(X坐标,0239),R33用于设置行地址(Y坐标,0319)。当我们要在某个指定点写入一个颜色的时候,先通过这两个命令设置到改点,然后写入颜色值就可以了。R34,写数据到GRAM命令,当写入了这个命令之后,地址计数器才会自动的增加和减少。该命令是我们要介绍的这一组命令里面唯一的单个操作的命令,只需要写入该值就可以了,其他的都是要先写入命令编号,然后写入操作数。R80R83,行列GRAM地址位置设置。这几个命令用于设定你显示区域的大小,我们整个屏的大小为240320,但是有时候我们只需要在其中的一部分区域写入数据,如果用先写坐标,后写数据这样的方式来实现,则速度大打折扣。此时我们就可以通过这几个命令,在其中开辟一个区域,然后不停的丢数据,地址计数器就会根据R3的设置自动增加/减少,这样就不需要频繁的写地址了,大大提高了刷新的速度。233VS1053的SPI数据传送和SCI寄存器VS1053的SPI数据传送VS1053的SPI支持两种模式1,VS1002有效模式(即新模式)。2,VS1001兼容模式。这里我们仅介绍VS1002有效模式(此模式也是VS1053的默认模式)。表26是在新模式下VS1053的SPI信号线功能描述表26VS1053新模式下SPI口信号线功能VS1053的SPI数据传送,分为SDI和SCI,分别用来传输数据/命令。SDI和前面介绍的SPI协议一样的,不过VS1053的数据传输是通过DREQ控制的,主机在判断DREQ有效(高电平)之后,直接发送即可(一次可以发送32个字节)。这里我们重点介绍一下SCI。SCI串行总线命令接口包含了一个指令字节、一个地址字节和一个16位的数据字。读写操作可以读写单个寄存器,在SCK的上升沿读出数据位,所以主机必须在下降沿刷新数据。SCI的字节数据总是高位在前低位在后的。第一个字节指令字节,只有2个指令,也就是读和写,读为0X03,写为0X02。一个典型的SCI读时序如图210所示图210SCI读时序从图210可以看出,向VS1053读取数据,通过先拉低XCS(VS_XCS),然后发送读指令(0X03),再发送一个地址,最后,我们在SO线(VS_MISO)上就可以读到输出的数据了。而同时SI(VS_MOSI)上的数据将被忽略。看完了SCI的读,我们再来看看SCI的写时序,如图211所示图211SCI写时序图211中,其时序和图210基本类似,都是先发指令,再发地址。不过写时序中,我们的指令是写指令(0X02),并且数据是通过SI写入VS1053的,SO则一直维持低电平。细心的读者可能发现了,在这两个图中,DREQ信号上都产生了一个短暂的低脉冲,也就是执行时间。这个不难理解,我们在写入和读出VS1053的数据之后,它需要一些时间来处理内部的事情,这段时间,是不允许外部打断的,所以,我们在SCI操作之前,最好判断一下DREQ是否为高电平,如果不是,则等待DREQ变为高。VS1053的SCI寄存器VS1053的所有SCI寄存器如表27所示SCI寄存器寄存器类型复位值缩写描述0X00RW0X0800MODE模式控制0X01RW0X000CSTATUSVS0153状态0X02RW0X0000BASS内置低音/高音控制0X03RW0X0000CLOCKF时钟频率倍频数0X04RW0X0000DECODE_TIME解码时间长度(秒)0X05RW0X0000AUDATA各种音频数据0X06RW0X0000WRAMRAM写/读0X07RW0X0000WRAMADDRRAM写/读的基址0X08R0X0000HDAT0流的数据标头00X09R0X0000HDAT1流的数据标头10X0ARW0X0000AIADDR应用程序起始地址0X0BRW0X0000VOL音量控制0X0CRW0X0000AICTRL0应用控制寄存器00X0DRW0X0000AICTRL1应用控制寄存器10X0ERW0X0000AICTRL2应用控制寄存器20X0FRW0X0000AICTRL3应用控制寄存器3表27SCI寄存器首先,我们介绍一下CLOCKF寄存器,这个寄存器用来设置时钟频率、倍频等相关信息,该寄存器的各位描述如表28所示表28CLOCKF寄存器各位描述此寄存器,重点说明SC_FREQ,SC_FREQ是以4KHZ为步进的一个时钟寄存器,当外部时钟不是12288M的时候,其计算公式为SC_FREQXTALI8000000/4000式中为XTALI的单位为HZ。表28中CLKI是内部时钟频率,XTALI是外部晶振的时钟频率。由于我们使用的是12288M的晶振,在这里设置此寄存器的值为0X9800,也就是设置内部时钟频率为输入时钟频率的3倍,倍频增量为10倍。接下来是MODE寄存器,该寄存器用于控制VS1053的操作,是最关键的寄存器之一,该寄存器的复位值为0X0800,其实就是默认设置为新模式。表29是MODE寄存器的各位描述表29MODE寄存器各位描述这个寄存器,我们这里只介绍一下第2和第11位,也就是SM_RESET和SM_SDINEW。其他位,我们用默认的即可。这里SM_RESET,可以提供一次软复位,建议在每播放一首歌曲之后,软复位一次。SM_SDINEW为模式设置位,这里我们选择的是VS1002新模式本地模式,所以设置该位为1(默认的设置)。接着我们看看BASS寄存器,该寄存器可以用于设置VS1053的高低音效。该寄存器的各位描述如表210所示表210BASS寄存器各位描述通过这个寄存器以上位的一些设置,我们可以随意配置自己喜欢的音效(其实就是高低音的调节)。VS1053的EARSPEAKER效果则由MODE寄存器控制,请参考表29。接下来,我们看看DECODE_TIME这个寄存器。该寄存器是一个存放解码时间的寄存器,以秒钟为单位,我们通过读取该寄存器的值,就可以得到解码时间了。不过它是一个累计时间,所以我们需要在每首歌播放之前把它清空一下,以得到这首歌的准确解码时间。HDAT0和HDTA1是两个数据流头寄存器,不同的音频文件,读出来的值意义不一样,我们可以通过这两个寄存器来获取音频文件的码率,从而可以计算音频文件的总长度。最后我们介绍一下VOL这个寄存器,该寄存器用于控制VS1053的输出音量,该寄存器可以分别控制左右声道的音量,每个声道的控制范围为0254,每个增量代表05DB的衰减,所以该值越小,代表音量越大。比如设置为0X0000则音量最大,而设置为0XFEFE则音量最小。注意如果设置VOL的值为0XFFFF,将使芯片进入掉电模式第3章软件设计31FM电台软件设计流程图32软件设计结构框图33主函数介绍331系统初始化该模块实现对系统各模块的初始化工作,以便后面程序使用这些模块时正常工作。以下是所有初始化函数DELAY_INIT/延时函数初始化NVIC_CONFIGURATION/设置NVIC中断分组22位抢占优先级,2位响应优先级UART_INIT9600/串口初始化为9600LCD_INIT/显示屏初始化KEY_INIT/按键初始化FONT_INIT/初始化字库AUDIOSEL_INIT/初始化音源选择USMART_DEVINIT72/USMART初始化MEM_INITSRAMIN/初始化内部内存池VS_INIT/初始化VS1053EXFUNS_INIT/为FATFS相关变量申请内存F_MOUNT0,FS0/挂载SD卡F_MOUNT1,FS1/挂载FLASHUSMART_DEVINIT72/初始化USMARTRDA5820_INIT/初始化FM收发332FM信号发射设置该模块实现对RDA5820配置,根据需要这里将模式设置为发射,频率配置为936,发射功率设置为最大。以下是所有相关配置函数的调用RDA5820_BAND_SET0/设置频段为87108MHZRDA5820_SPACE_SET0/设置步进为100KHZRDA5820_TXPGA_SET3/信号增益设置为3RDA5820_TXPAG_SET63/发射功率为最大RDA5820_TX_MODE/发送模式FREQSET9360/默认为936MHZRDA5820_FREQ_SETFREQSET/设置频率333TFTLCD显示基本信息该模块部分主要在TFTLCD上显示必要的信息,提示用户如何操作。以下是程序内容POINT_COLORRED/设置字体为红色SHOW_STR60,10,200,16,“电台实验“,16,0SHOW_STR60,30,200,16,“调频922MHZ“,16,0SHOW_STR60,50,200,16,“,16,0LCD_SHOWSTRING60,70,200,16,16,“2013/11/13“SHOW_STR60,90,200,16,“KEY0MKEY2M“,16,0SHOW_STR60,110,200,16,“KEY_UPMODESET“,16,0334音频源的选择该模块部分选择FM发射的音源,通过按键KEY_UP来切换音源(SD卡MP3和MIC麦克风之间的切换),默认为SD卡MP3音源。以下是两个音源控制的函数调用MP3_PLAY/SD卡MP3音源RECODER_PLAY/麦克风音源34IIC驱动RDA5820FM收发芯片该模块部分实现了用IIC驱动RDA5820,从而实现了RDA5820的各种设置。以下是IIC控制RDA5820寄存器读写的具体函数VOIDRDA5820_WR_REGU8ADDR,U16VAL/写RDA5820寄存器IIC_STARTIIC_SEND_BYTERDA5820_WRITE/发送写命令IIC_WAIT_ACKIIC_SEND_BYTEADDR/发送地址IIC_WAIT_ACKIIC_SEND_BYTEVAL8/发送高字节IIC_WAIT_ACKIIC_SEND_BYTEVAL/发送低字节IIC_WAIT_ACKIIC_STOP/产生一个停止条件U16RDA5820_RD_REGU8ADDR/读RDA5820寄存器U16RESIIC_STARTIIC_SEND_BYTERDA5820_WRITE/发送写命令IIC_WAIT_ACKIIC_SEND_BYTEADDR/发送地址IIC_WAIT_ACKIIC_STARTIIC_SEND_BYTERDA5820_READ/发送读命令IIC_WAIT_ACKRESIIC_READ_BYTE1/读高字节,发送ACKRES1/声音通道选择通道0MP3通道1收音机通道2PWM音频通道3无声38TFTLCD显示驱动该模块实现TFTLCD屏幕的显示驱动,这里只简单列举以下基本函数,不作具体展开VOIDLCD_INITVOID/初始化VOIDLCD_DISPLAYONVOID/开显示VOIDLCD_DISPLAYOFFVOID/关显示VOIDLCD_CLEARU16COLOR/清屏VOIDLCD_SETCURSORU16XPOS,U16YPOS/设置光标VOIDLCD_DRAWPOINTU16X,U16Y/画点VOIDLCD_FAST_DRAWPOINTU16X,U16Y,U16COLOR/快速画点U16LCD_READPOINTU16X,U16Y/读点VOIDDRAW_CIRCLEU16X0,U16Y0,U8R/画圆VOIDLCD_DRAWLINEU16X1,U16Y1,U16X2,U16Y2/画线VOIDLCD_DRAWRECTANGLEU16X1,U16Y1,U16X2,U16Y2/画矩形VOIDLCD_FILLU16SX,U16SY,U16EX,U16EY,U16COLOR/填充单色VOIDLCD_COLOR_FILLU16SX,U16SY,U16EX,U16EY,U16COLOR/填充指

温馨提示

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

评论

0/150

提交评论