基于LPC2378的数字音频设计_第1页
基于LPC2378的数字音频设计_第2页
基于LPC2378的数字音频设计_第3页
基于LPC2378的数字音频设计_第4页
基于LPC2378的数字音频设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、西安欧亚学院本科毕业论文(设计)1 绪论1.1 技术背景嵌入式设备不仅可以单独使用,还可以网络连接方式使用。为实现网络信息的高速处理,由于8/16位微处理器工作速度较难满足要求,所以嵌入式设备往往采用32位RISC嵌入式处理器作为核心部件。然而其中ARM核嵌入式处理器的应用独占鳌头,它在32位RISC处理器市场上的占有率已经超过75%,使用ARM芯片构造嵌入式系统正成为嵌入式系统设计的一个非常重要的分支部分。ARM公司是知识产权供应商,其本身不生产芯片,靠转让设计许可,由合作伙伴公司来生产各具特色的芯片,世界著名半导体公司Intel、Philips、Atmel、ST、Analog Device

2、、TI、Samsung、OKI等都在生产ARM核嵌入式处理器,为嵌入式系统设计提供了丰富的选择余地。近年来 ,随着微电子技术、计算机科学技术、通信技术以及网络技术的发展,嵌入式系统应用技术已经渗透到了各个领域。由于被嵌入对象的复杂度有非常大的变化范围,及对嵌入式系统本身在其性能、体系结构等方面的多样化要求,导致了嵌入式系统应用的多样性。作为嵌入式系统核心的嵌入式微处理器必须应对嵌入式应用面临的挑战 ,而ARM(Advanced RISC Machines)嵌入式微处理器 ,以其完整的体系结构发展系列,以及耗电少,成本低,功能强,16位(Thumb)/32位(ARM)指令集等优点,在网络、通讯、

3、信息家电、工业控制、航空航天等高端领域得到广泛应用,如我们身边的汽车电子、保安设备、无线通信、便携式产品、数字机顶盒、游戏机、数码相机、数字电视、GPS、智能手机等产品,就是嵌入式系统的典型应用。PHILIPS公司生产的32位ARM微控制器LPC2300系列微控制器,支持10/100 Ethernet、全速(12Mbps)USB 2.0和CAN 2.0 B;具有高达512KB的ISP/IAP Flash、58KB的SRAM10位A/D、D/A转换器、IRC振荡器、丰富的外设接口等,特别是SD存储卡接口和I2S接口,在信息产品中得到广泛应用。 1.2 选题意义目前,嵌入式系统的应用日益普及,遍及

4、各个应用领域,国际上形成了ARM公司领军,为了进一步改善实验教学手段,提高教学水平和科研创新能力,从08年开始,学院专门成立嵌入式系统研发小组,开发用于教学、工程应用的型多功能用户板。09年3月,针对型用户板存在的问题,本着“完善设计、扩展功能”的设计思路,又开发设计了型多功能用户板,包括:8位、16位、32位多功能用户板;从2010年又承担了省教育厅的嵌入式系统培训基地项目,开发功能更多、更高端的嵌入式系统教学设备。35I2S总线是飞利浦公司为数字音频设备数据传输而制定的一种总线标准,广泛应用于各种多媒体系统。在各种声卡中,大部分声卡的AD、DA芯片使用的都是这种总线,能方便的实现与带有I2

5、S总线的AD、DA芯片相连接。声卡既可以用来播放声音,也可以用来录音,这相当于我们的DA和AD,事实上,直接利用I2S我们能做的工作远不止这些,包括可以进行数据通讯的操作等。我选择基于ARM的数字音频处理与播放系统的设计的题目,希望通过对嵌入式的学习,能为日后的运用打下良好的基础。1.3 本课题的设计思路本题目是基于ARM的LPC2378多功能用户板进行设计开发的。在IAR开发环境中,将主机与JTAG相连,通过传输线接到目标板上,在I2S接口的连接下,直接将数据信号传输到音频外设中。连接方式如图1-1所示:图1-1 整体连接方式2 各功能模块的介绍2.1 LPC2378的介绍LPC2378芯片

6、是飞利浦公司生产的的32位ARM核芯片,是目前广泛应用的主流芯片之一。2.1.1 技术特性具有512KB片内Flash和58KB的SRAM存储器,工作主频72MHz;具有在系统编程(ISP)和在应用编程(IAP)功能,每256字节编程仅需1ms,整片擦除只需400ms。LPC2378包含1个10/100 Ethernet MAC接口、1个USB 2.0全速(12Mbps)设备、2路CAN 2.0B通道、1个通用DMA控制器、8个通用10位A/D转换器和1个10位的D/A转换器。Ethernet MAC在独立的AHB总线上有16KB的SRAM和一个相关的DMA控制器。USB控制器含有4KB的US

7、B SRAM和可存取的DMA,并支持32个端点的控制、中断、批量和同步数据传输模式。因此丰富的串行通信接口增强了设计的灵活性,提供了更大的缓冲区,以及具有更高的处理能力。LPC2378有4个UART(1个带有IrDA)端口、3个I2C总线接口、3个SPI/SSP接口和1个I2S接口。此外,LPC2378还含有1个SD/MMC存储卡接口。LPC2378具有4个32位捕获/比较定时器。1个用于三相电机控制的PWM单元;1个带有2KB电池SRAM的低功耗实时时钟;1个看门狗定时器和1个可用作主系统时钟的4MHz内部RC振荡器。LPC2378的每个外设都具有一个独立的时钟分频器,可实现低功耗设计;并且

8、,P0口和P2口的每个管脚都可用作外部中断管脚;微控制器中有104个通用I/O口线,每个口线可在高达18MHz的速率下触发。LPC2378支持实时仿真和嵌入式跟踪支持,采用标准的ARM测试/调试JTAG接口,可方便实现芯片开发。2.1.2 LPC2378芯片结构在本次的设计中,用到LPC2378这个芯片,其芯片结构如图2-1所示:图2-1 LPC2378整机结构图 LPC2378芯片结构如上图所示,它包含一个支持仿真的 ARM7TDMI-S CPU,片内存储器控制器接口的ARM7局部总线,中断控制器接口的AMBA高性能总线(AHB)和连接片内外设功能的外设总线(VPB,ARM AMBA总线的兼

9、容超集)。LPC2378将 ARM7TDMI-S处理器配置为小端(little-endian)字节顺序。AHB外设分配了2M字节的地址范围,它位于4G字节ARM存储器空间的最顶端。每个AHB外设都分配了16k字节的地址空间。LPC2378 的外设功能(中断控制器除外)都连接到VPB总线。AHB到VPB的桥将VPB总线与AHB总线相连。VPB外设也分配了2M 字节的地址范围,从3.5GB地址点开始。每个VPB 外设在VPB地址空间内都分配了16k字节地址空间。2.2 I2S的介绍2.2.1 I2S总线规范音响数据的采集、处理和传输是多媒体技术的重要组成部分。众多的数字音频系统已经进入消费市场,例

10、如数字音频录音带、数字声音处理器。对于设备和生产厂家来说,标准化的信息传输结构可以提高系统的适应性。I2S(InterIC Sound)总线是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,用于音频设备之间的数据传输,广泛应用于各种多媒体系统。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。I2S总线拥有三条数据线进行数据传输:一条双向数据传输线,一条命令(声道)选择线和一条时钟线。在数据传输过程中,发送端(transmitter)和接收端(receiver)具有相同的时钟信号,发送端

11、作为主机(Master)时,产生位时钟信号,命令(声道)选择信号和数据。2.2.2 I2S总线的信号I2S总线具有3个信号,分别是SCK、WS和SD信号:1. 串行时钟SCK信号,也叫位时钟(BCK),即每发送1位数字音频数据,SCK上都有1个脉冲。SCK的频率=2×采样频率×采样位数。在数据传输过程中,I2S总线上的发送器和接收器都可以作为系统的主机来提供系统的时钟频率;2. 帧时钟WS信号,即命令(声道)选择,用来切换左右声道的数据。WS的频率为采样频率,由系统主机提供。WS为“0”表示传输左声道的数据,WS为“1”表示传输右声道的数据;3. 串行数据信号SD信号,用来

12、传输二进制补码表示的音频数据。I2S传输格式规定:数据最高位(MSB)总是被最先传输,而1次能够发送的数据取决于I2S格式的有效位数。2.2.3 I2S信号时序图2-2 信号时序图1. SCK是模块内的同步信号,从模式时由外部提供,主模式时由模块内部自己产生。在I2S总线中,任何设备都能通过提供必需的时钟信号成为系统的主导装置,但是从属装置通过外部时钟信号来得到它的内部时钟信号,这也就是表明必须重视主导装置和数据以及命令选择信号之间的传播信号延迟,总的延迟主要由两部分组成: l 外部时钟和从属装置的内部时钟之间的延迟;l 内部时钟和数据信号以及命令选择信号之间的延迟。 对于数据和命令信号的输入

13、,外部时钟和内部时钟的延迟不在占主导地位,它只是延长了有效的建立时间(setup time)。延迟的主要部分是由发送端的传输延迟和设置接收端需要的时间。 T是时钟周期,Tr是允许最小时钟周期,T>Tr只有这样发送端和接收端才能满足数据传输速率的要求。 对所有的数据速率来说,发送端和接收端都能发出一个具有固定的传号空号比(markspace ratio)的时钟信号,所以tLC和tHC是由T所定义的。 tLC和tHC必须大于0.35T,这样信号在从属装置端就可以被检测到。 延迟(tdtr)和最快的传输速度(由Ttr定义)是相关的,快的发送端信号在慢的时钟上升沿可能导致tdtr不能超过tRC而

14、使thtr为零或者负。只有tRC不大于tRCmax的时候(tRCmax>0.15T),发送端才能保证thtr大于等于0。 为了允许数据能够在下降沿被记录,时钟信号上升沿及T相关的时间延迟应该给接收端充分的建立时间(set-up time)。 数据建立时间(set-up time)和保持时间(hold time)不能小于指定接收端的建立时间和保持时间。 2. WS是声道选择信号,表明了数据发送端所选择的声道,当:l WS0,表示选择左声道;l WS1,表示选择右声道。 WS可以在串行时钟的上升沿或者下降沿发生改变,在从机端,WS在时钟信号的上升沿发生改变。 SD是串行数据,在I2S中以二进

15、制补码的形式在数据线中传输,首先传输最高位(MSB)。不管I2S格式的信号有多少位有效数据,数据的最高位一直出现在LRCK变化(也就是一帧开始)之后的第2个SCLK脉冲处。因此可以使得接收端与发送端的有效位数可以不同。假如接收端能处理的有效位数少于发送端,那么可以放弃数据帧中多余的低位数据;假如接收端能处理的有效位数多于发送端,则可以自行补足剩余的位。这种同步机制能够使得数字音频设备的互连更加方便,也不会造成数据之间错位。 I2S具有不同的数据传输格式。根据SDATA数据相对于LRCK和SCLK的位置不同,分为左对齐(很少使用)、I2S格式和右对齐(也叫日本格式、普通格式)。为了保证数字音频信

16、号的正确传输,发送端和接收端应该采用相同的数据格式和长度,I2S格式的数据长度可以不同。 当系统字长比数据发送端字长长的时,数据传输的时候就会出现截取的现象,也就是说:如果接收端接收的数据位大于规定字长的话,则规定字长最低位(LSB)以后的所有位将会被忽略;另一方面,假如接收的字长比它规定的字长短的话,则空余出来的位将会以0填补。通过这种方式可以使音频信号的最有效位得到传输进而能保证正确的听觉效果。2.2.4 工作模式I2S总线的工作模式,可根据数据流向和控制时钟源分类:从数据的接收和发送的角度来说,它可以分为接收端(Transmitter)和发送端(Receiver)。根据时钟信号和声道选择

17、信号源模式,的产生的角度来说,它又可以分为主机(Master)和从机(Slaver)。I2S就存在以下三种不同的模式,其中产生时钟信号和声道选择信号的是主机。数据接收端产生SCK、WS信号的为主机,从而数据传输端成为从机,可以进行录音,如图2-3所示:图2-3 I2S的工作模式一 当有多个数据接收端和多个数据传输端的时候,很难确定谁是主机,因此就出现了另一种模式,即一个控制器专门负责产生时钟和声道选择信号。如图2-4所示:图2-4 I2S的工作模式二l 在I2S传输协议中,其数据信号、时钟信号以及控制信号是分开传输的;l 使用三条传输线:串行数据线(SD)、左右声道选择线(WS)、同步时钟信号

18、线(SCK)。2.2.5 I2S的传输模式I2S总线接口有3种传输模式:正常传输模式、DMA传输模式和传输/接收模式。1. 正常传输模式I2S控制寄存器中有一个FIFO预备标志位(ready flag bite)用于FIFO发送和接收,当FIFO准备好发送数据,如果发送FIFO非空,FIFO状态(准备好)标志将被设置为1;如果发送FIFO为空,FIFO状态标志设为0;当FIFO接收满,接收FIFO状态标志被设置为0,这些标志可以决定CPU读写FIFO的时间。串行数据就是通过这种方式被发送或接收的。2. DMA传输模式当DMA传输模式中,I2S的发送和接收FIFO操作都是由DMA控制器完成,在发

19、送和接收模式中,由FIFO准备好标志来自动产生DMA服务请求。3. 传输/接收模式这种模式下,I2S数据可以同时发送和接收音频数据。2.3 音频模块2.3.1 音频模块的介绍 音频模块采用的是硬件平台中的SSI接口控制CS4340,进行音频的播放。SSI接口是同步串行接口,它有独立的发送器、时钟发生器和桢同步功能的接收器。24位高质量立体声CODEC芯片CS4340用于音频的DAC。文件数据由同步串行接口读入芯片CS4340,芯片按组(包含左右声道)进行数据的转换,再由左右声道输出,其输出在音频运算放大器的作用下,可以提供立体声驱动输出。在此次设计中,把整个设计分成3个模块:控制模块;数据发送

20、模块;数据接收模块。数据发送和接收模块都工作于从模式,分别可以独立工作,通过控制模块的控制处于不同的状态。2.3.2 模块的连接关系整个设计中,控制模块、数据发送模块、数据接收模块的连接关系如下图2-5所示。 图2-5 各模块的连接模式图2.3.3 控制模块的设计控制部分主要是通过TX_RX_SEL和MA_SL_SEL信号来决定是自己产生 SCK和WS,还是接收总线上的SCK和WS。外部时钟信号(CLK)、复位信号(RESET)用来控制整个系统所处状态和实现系统复位。从外部引入的系统时钟信号(CLK)由晶振产生,本设计中使用的晶振频率是18.432MHz,故系统时钟频率为18.432MHz。主

21、模式中,系统时钟经过分频处理后,生成I2S的内部传输时钟SCK和声道选择信号WS。本次设计中使用的声音的采样频率为48kHz,则声道选择信号WS的频率必须也为48kHz。由于传输左右2个声道的数据为16 bit,故SCK的频率为:48kHz×16×21.536MHz。如果需要传输20 bit、24 bit或32 bit的左右声道的数据,可以提高SCK的频率,由上式可以计算出需要的SCK的频率。根据WS、SCK与系统时钟频率的关系,可以得出由系统时钟频率产生WS和SCK的分频系数。2.3.4 控制模块中双向端口的设计在控制模块中SCK、WS、SD信号都是输入输出双向端口,根据

22、外部信号TX_RX_SEL 、MA_SL_SEL信号的控制,决定端口的输入输出方向。如下图2-6所示:图2-6 TX_SD向外发送数据图当TX_SD向外发送数据时,TX_RX_SEL为高电平,输出缓冲打开,去驱动外部的SD,而另一端则关闭输入缓冲,令缓冲输入到内部RX_SD上的电平为高阻态。图2-7 RX_SD接收外部数据图 当RX_SD接收外部数据时,TX_RX_SEL为低电平,输入缓冲打开,接收外部SD的数据,另一端则关闭输出缓冲,令输出到外部SD上的电平为高阻态。 通过上面的设计,就可以保证在某一时刻只有一端在驱动总线,而不会造成数据冲突。2.3.5 数据发送模块的设计在这个设计中,数据

23、的发送模块是一个非常重要的模块,模块图如下图2-8所示。图2-8 数据的发送模块图2.3.6 各信号的时序关系SCK是时钟信号,WS是片选信号,SD是数据信号,它们的时序关系如图2-9所示。图2-9 信号的时序关系图2.3.7 数据接收模块的设计与数据发送模块相对应的是数据接收模块。其设计如图2-10所示。 图2-10 数据的接收模块图WS 信号的产生方式与发送模块一样。计数模块的计数值在本设计中为模16,当计数达到16时,EN信号变成低电平,使计数器停止计数,同时也使串并转换模块停止接收数据。WS、SCK、SD信号的进入同样需要经过RX_EN信号的使能来决定与控制模块的连接或断开。3 开发环

24、境及工具3.1 开发环境IAR EWARM3.1.1 简介IAR公司是全球领先的嵌入式系统开发工具的公司,其中完全集成了开发嵌入式系统所需要的C/C+编译器、汇编器、链接器、文件管理器、文本编辑器、工程管理器。IAR公司独具特色的C-SPY调试器,不仅可以在系统开发初期进行无目标硬件的纯软件仿真,而且可以结合IAR公司推出的J-Link硬件仿真器,实现用户系统的实时在线仿真调试。IAR的Embedded Workbench系列源级浏览器(Source Browser)功能利用符号数据库使用户能快速浏览源文件,也可以通过详细的符号信息来优化变量存储器。文件查找功能可以在指定的某些种文件中进行全局

25、文件的搜索。并且提供了对第三方工具软件的接口,允许用户启动指定的应用程序。IAR无缝集成了所有必要组件,确保开发的流程流畅而不间断。开发环境的界面如下图3-1所示: 图3-1 IAR开发环境界面图上图中是对程序编译成功后,进行下载和调试后产生的界面。展现的窗口分别是:工程窗口、反汇编窗口、寄存器窗口、符号寄存器、局域窗口、存储器窗口。3.1.2 IAR的主要特性1. 顶目管理特性IAR EW 是一个能够支持多种微处理器开发的集成开发环境,针对用户特定的目标系统,用创建项目的方式来进行管理和开发,其项目管理功能强大,用户只要创建一个工作区(Workspace),就可以在其中开发一个或多个项目。各

26、个项目中可以包含不同的组(Group)和文件(File)模块,并且可以为每个项目进行选项设置。在项目开发过程中任何修改都会被记录,从而保证修改设计时可以获得所有需要的模块。通过目标创建(Make)选项可以很方便地实现对一个IAR EW 项目进行完整的编译和链接,直接产生最终的应用目标文件,而且可执行文件中不包含已过期的模块。2. 调试器特性IAR C-SPY 调试器是IAR公司专门为嵌入式系统应用开发的一种高级语言调试器。IAR C-SPY 调试器使用户能进行C/C+和汇编语言源代码调试、反汇编调试或二者混合调试。采用源代码调试是验证用户应用程序逻辑性正确与否的最快捷、最便利的方式;而反汇编调

27、试则针对应用程序的错误段,并对硬件进行精确控制。在混合显示模式中,调试器显示相应的C/C+源代码及其它对应的反汇编代码清单。3. C/C+编译器特性。IAR C/C+编译器提供灵活的变量分配能力,可直接采用C/C+语言编写中断函数,具有针对不同CPU保持可移性的“#pragma”编译命令,支持IAR 扩展嵌入式C+特性,例如模板、名称空间、多重虚拟外设、固定操作符(static_cast、const_cast和reinterpret_cast)以及标准模板库(STL)等。支持特殊目标语言的扩展,例如特殊函数的输入、扩展关键字、指示、预设标志、同步函数等。IAR C/C+编译器运行速度快,采用面

28、向存储器的设计避免了暂存文件及覆盖技术。编译时进行严格的扩展类型检查,链接时进行严格的模块接口类型检查。IAR C/C+编译器采用最优化技术产生高效的目标代码,可选择以代码大小或速度快慢进行目标代码优化。多种输出格式选择,有重定位二进制、汇编源代码和可选的汇编器列表文件等。提供容易理解的错误和警告信息。生成与C-SPY高级调试兼容的扩展调试信息。4. 汇编器特性IAR 汇编器是一种功能强大的可重定位的宏汇编器,支持Intel/Motorola格式的宏,并且含有多种指示符和表达式。它具备一个内部C语言预处理器,支持条件汇编,与其他IAR系统软件一起集成在IAR EW 环境之中。3.1.3 集成开

29、发环境的界面特色1. 分层次的工程组织;2. 同一工作空间中允许存放多个工程;3. 可停靠的窗口和多视图;4. 源代码浏览;5. 创建和维护库的工具; 6. 可以和源代码控制系统相集成; 7. 文本编辑器。3.2 JTAG的基本原理3.2.1 JTAG简介H-JTAG 是一款简单易用的的调试代理软件,功能和流行的MULTI-ICE 类似。H-JTAG 包括两个工具软件:H-JTAG SERVER 和H-FLASHER。其中,H-JTAG SERVER 实现调试代理的功能,而H-FLASHER则实现了FLASH 烧写的功能。常见的JTAG有:H-JTAG、J-LINK、FTDI等。H-JTAG

30、的基本结构图和实物图如下图3-2所示:图3-2 H-JTAG 软件结构图3-3 H-JTAG实物图3.2.2 性能介绍JTAG是一种很先进的嵌入式系统开发设备,遵从国际标准测试协议。主要用于芯片内部测试及对系统进行仿真、调试。JTAG的主要功能可以分为两大类:一类用于测试芯片的电气特性,用来检测芯片是否有问题;另外一类用于Debug,起到对各类芯片以及其外围设备进行调试的作用。其中一个含有JTAG Debug接口模块的CPU,若时钟正常,则可以通过JTAG接口访问CPU的内部寄存器、挂在CPU总线上的设备以及内置模块的寄存器。JTAG的工作原理为:在器件内部定义一个TAP,通过专用的JTAG测

31、试工具对内部节点进行测试和调试。H-JTAG支持所有基于ARM7 和ARM9的芯片的调试,而且支持大多数主流的ARM调试软件,如ADS、RVDS、IAR和KEIL。通过这些灵活的接口配置,H-JTAG 可以支持WIGGLER,SDT-JTAG 和用户自定义的各种JTAG 调试小板。而且,附带的H-FLASHER 烧写软件还支持常用片内片外FLASH 的烧写。使用H-JTAG,用户能够方便的搭建一个简单易用的ARM 调试开发平台。3.2.3 H-JTAG调试/烧写结构H-JTAG 支持ARM 公司的RDI 接口。通过RDI 接口,H-JTAG 能够支持大多数主流的ARM 调试软件。调试的结构如图

32、3-4所示:图3-4 H-JTAG 调试结构图调试软件(AXD/RVDS/IAR/KEIL)通过RDI 接口与H-JTAG SERVER 进行交互。H-JTAG SERVER通过与并口相连的 JTAG调试板控制目标调试板。H-JTAG还提供了灵活的JTAG接口设置。通过设置,H-JTAG能支持不同类型的JTAG 调试板,例如流行的WIGGLER和SDT-JTAG,用户也可以根据自己的需要使用自定义的JTAG 调试板。除了调试,用户还可以通过H-FLASHER将程序和数据烧写/下载到FLASH芯片中去。目前,H-FLASHER支持的常见的片内和片外FLASH芯片。由于软件的更新和升级,H-FLA

33、SHER支持的芯片类型也会不断的增加。在进行FLASH 烧写时,H-FLASHER 与H-JTAG SERVER的连接如下图3-5所示:图 3-5 H-FLASHER 与H-JTAG SERVER 的连接图烧写 FLASH时,H-FLASHER与H-JTAG 的连接交互和在调试时候的情况十分类似。H-FLASHER通过RDI接口与H-JTAG SERVER进行交互,来访问和控制目标开发板。根据用户提供的配置文件,H-FLASHER最终完成FLASH 烧写工作。3.2.4 JTAG连接及其应用通过JTAG串口线将PC机与ARM板连接起来,如图3-6所示。图3-6 JTAG的连接图3.2.5 H-

34、JTAG 菜单介绍1. FILE 菜单,如图3-7所示:图3-7 H-JTAG FILE 菜单EXIT 退出H-JTAG。2. OPERATIONS 菜单,如图3-8所示:图3-8 H-JTAG OPERATIONS菜单RESET TARGET 复位调试目标;DETECT TARGET 检测调试目标;KILL CONNECTION 断开当前连接。3. FLASHER 菜单,如图3-9所示:图3-9 H-JTAG FLASHER 菜单START FLASHER 启动 H-FLASHER;AUTO DOWNLOAD 启用/禁用自动FLASH 下载。4. SCRIPT 菜单,如图3-10所示:图3-

35、10 H-JTAG SCRIPT 菜单INIT SCRIPT 设置初始化脚本;AUTO INIT 启用/禁用自动初始化。5. SETTINGS 菜单,如图3-11所示:图3-11 H-JTAG SETTINGS 菜单JTAG SETTINGS JTAG 设置;PORT SETTINGS 并口设置;TARGET SETTINGS 调试目标设置;TARGET MANAGER 芯片 ID 管理器;TAP CONFIGURATION TAP 设置。6. OPTIONS 菜单,如图3-12所示:图3-12 H-JTAG OPTIONS 菜单OPTIONS WINDOW 打开选项设置主窗口;DISABLE

36、 SEMIHOSTING 禁用 SEMIHOSTING 功能;DISABLE VECTOR CATCH 禁用中断向量捕获功能;AUTO SYSTEM RESET 启用/禁用自动系统复位;REPORT DATAABORT 报告数据异常。3.2.6 H-JTAG 工具栏介绍H-JTAG 工具栏包括了菜单中使用频率比较高的大部分操作,方便用户使用。H-JTAG 的工具栏如下图3-13所示:图3-13 H-JTAG工具栏工具栏上每个按钮的功能定义如下: 复位调试目标; 检测调试目标; 断开当前连接; 启动 H-FLASHER; 设置初始化脚本; 调试目标设置; 芯片ID管理器; JTAG 设置; 并口

37、设置; 打开选项设置窗口; 退出 H-JTAG。3.2.7 JTAG的调试界面图3-14 调试界面一图3-15 调试界面二图3-16 调试界面三以上三张图即为JTAG的调试和参数的设置,然后点击load,选择lpc2378.hfc,即完成了对JTAG的基本设置。但是不同的参数设置对本设计的进行有着不同的影响,所以,一旦在设计中出现因为参数设置的影响而导致在调试中出现问题,就先要想到在这些调试界面上修改参数。4 系统设计 4.1 硬件设计4.1.1 电路图通过对系统软件部分的实现,程序能正常的运行出来,现将本次系统设计的硬件部分进行分析,其电路原理图如图4-1所示。图4-1 硬件设计电路图4.1

38、.2 简单说明基于上图4-1所示,AK4343是一音频模块,管脚11,13,14分别是I2S控制及数据总线的串行数据信号SD信号,帧时钟WS信号,串行时钟SCK信号。管脚23,24指的是音频信号可以进行线路输入,即对数字音频进行录音。管脚19,20指的是可以通过喇叭对音频信号进行输出。管脚31,32指的是音频信号可以通过DAC输出。芯片的左边即管脚15,16,21,22是加入的数字电源。芯片的右边即管脚2,3,4是加入的模拟电源。4.2 软件设计4.2.1 底层程序设计底层程序设计实际上就是ARM核的初始化,在任何程序设计中,底层程序的设计是必须要完成的。以下所提到的流程图和源程序都是部分流程

39、图和部分源程序。4.2.2 核初始化流程图图4-2 核初始化流程图4.2.3 部分程序源代码void TargetResetInit(void) /* 存储器加速模块配置*/ MAMCR = 0; / 存储器加速控制器禁用#if Fcclk < 20000000 / 条件语句:若系统时钟小于20M时 MAMTIM = 1; / 存储器加速功能模块部分使能#else / 否则#if Fcclk < 40000000 / 条件语句:若系统时钟小于40M时 MAMTIM = 2; / 存储器加速功能模块全部使能#else / 否则 MAMTIM = 3; / 不采用存储器加速功能#end

40、if #endif MAMCR = 2; / 使能存储器加速模块全部功能#if USE_USB PCONP |= 0x80000000; / USB时钟使能#endif /* 系统各外设时钟选择 */#if (Fpclk / (Fcclk / 4) = 1 / 条件语句:若满足 (Fpclk / (Fcclk / 4) = 1 PCLKSEL0 = 0x00000000; / 则外设时钟设置:系统时钟(Fcclk) = 4倍的外设时钟(Fpclk) PCLKSEL1 = 0x00000000;#endif / 结束条件语句#if (Fpclk / (Fcclk / 4) = 2 / 条件语句:

41、若满足 (Fpclk / (Fcclk / 4) = 2 PCLKSEL0 = 0xAAAAAAAA; / 则外设时钟设置:系统时钟= 2倍的外设时钟 PCLKSEL1 = 0xAAAAAAAA;#endif / 结束条件语句#if (Fpclk / (Fcclk / 4) = 4 / 条件语句:若满足 (Fpclk / (Fcclk / 4) = 4 PCLKSEL0 = 0x55555555; / 则外设时钟设置:系统时钟=外设时钟 PCLKSEL1 = 0x55555555;#endif / 结束条件语句 /* PLL(锁相环)配置,并从内部时钟(IRC)切换至主振荡器(OSC) */

42、ConfigurePLL(); /* GPIO初始化 */ GPIOResetInit(); /* 向量中断管理器(VIC)初始化 */ init_VIC(); return; / 函数返回void ConfigurePLL ( void ) DWORD MValue, NValue; / 变量定义 if ( PLLSTAT & (1 << 25) ) / PLL连接判跳:若连接 PLLCON = 1; / 则,PLL使能 PLLFEED = 0xaa; / 馈送寄存器顺序赋值:0xaa PLLFEED = 0x55; / 馈送寄存器顺序赋值:0x55 PLLCON = 0

43、; / 否则,PLL禁用 PLLFEED = 0xaa; / 馈送寄存器顺序赋值:0xaa PLLFEED = 0x55; / 馈送寄存器顺序赋值:0x55 SCS |= 0x20; / 晶体振荡器(OSC)使能 while( !(SCS & 0x40) ); / 等待晶体振荡器(OSC)稳定 CLKSRCSEL = 0x1; / 选择晶体振荡器(OSC,12M)作为PLL时钟源 PLLCFG = PLL_MValue | (PLL_NValue << 16); / PLL倍频/分频系数设置 PLLFEED = 0xaa; / 馈送寄存器顺序赋值:0xaa PLLFEED

44、= 0x55; / 馈送寄存器顺序赋值:0x55 PLLCON = 1; / PLL使能 PLLFEED = 0xaa; / 馈送寄存器顺序赋值:0xaa PLLFEED = 0x55; / 馈送寄存器顺序赋值:0x55 CCLKCFG = CCLKDivValue; / 设置系统时钟(CCLK)分频值:1,3,5.255 #if USE_USB / 若应用USB模块 USBCLKCFG = USBCLKDivValue; / USB时钟设置:usbclk=288 MHz/6=48 MHz #endif / 结束条件语句 while (PLLSTAT & (1 << 26)

45、 = 0); / PLL锁定检验:未锁等待 MValue = PLLSTAT & 0x00007FFF; / PLL倍频设置 NValue = (PLLSTAT & 0x00FF0000) >> 16; / PLL分频设置 while (MValue != PLL_MValue) && ( NValue != PLL_NValue) ); /倍频/分频值达标等待 PLLCON = 3; / 使能并连接PLL PLLFEED = 0xaa; / 馈送寄存器顺序赋值:0xaa PLLFEED = 0x55; / 馈送寄存器顺序赋值:0x55 while

46、( (PLLSTAT & (1 << 25) = 0) ); / 等待PLL连接 return; / 返回4.2.4 I2S程序流程图 图4-3 主环路流程图图4-4 I2S初始化流程图4.2.5 I2S程序源代码 static DWORD i; /变量定义 TargetResetInit(); / 核初始化 /* Configure temp register before reading 发送/接收缓存寄存器配置 */ for ( i = 0; i < BUFSIZE; i+ ) / 清缓存器 I2STXBufferi = i; / 发送缓赋值 I2SRXBuff

47、eri = 0; / 接收缓清零 if ( I2SInit() = FALSE ) / I2S 初始化 while ( 1 ); / 若初始化失败,死循环 while ( I2SWriteLength < BUFSIZE ) / 发送数据长度判跳 while (I2SSTATE >> 16) & 0xFF) = TXFIFO_FULL); / 发送字长=8判跳 I2STXFIFO = I2STXBufferI2SWriteLength+; / 发送缓写数据 I2STXDone = 1; / 写发送结束标志 /* 等待发送/接收完成后,进行数据比较 */ while (

48、 !I2SRXDone | !I2STXDone ); / 等待发送/接收结束 for ( i=1; i<BUFSIZE; i+ ) / 数据比较 if ( I2SRXBufferi != I2STXBufferi-1 ) while ( 1 ); / 数据无效时死循环 _irq _nested _arm void I2SHandler (void) DWORD RxCount = 0; / 变量定义 _enable_interrupt(); / 中断使能 if ( I2SSTATE & 0x01 ) / I2S中断标识位判跳 RxCount = (I2SSTATE >&g

49、t; 8) & 0xFF; / 接收字长处理映射 if ( (RxCount != RXFIFO_EMPTY) && !I2SRXDone ) / 接收结束判跳 while ( RxCount > 0 ) / 接收计数器判0 if ( I2SReadLength = BUFSIZE ) / I2S读数据长度判跳 I2SDAI |= (0x01 << 3) | (0x01 << 4); / 接收数据格式设置: 停止接收&同步复位 I2SIRQ &= (0x01 << 0); / 禁止接收中断 I2SRXDone =

50、 1; / 置位接收结束标识 break; else I2SRXBufferI2SReadLength+ = I2SRXFIFO; / 接收缓数据映射 RxCount-; / 接收计数器-1 VICADDRESS = 0; / 中断地址清零DWORD I2SInit( void ) DWORD DAIValue, DAOValue; / 数字音频输入/输出控制变量定义 PCONP |= (1 << 27); / I2S电源控制:上电 PINSEL0_bit.P0_6 = 1; / P0.6设为I2SRX_SDA PINSEL0_bit.P0_7 = 1; / P0.7设为I2STX

51、_CLK PINSEL0_bit.P0_8 = 1; / P0.8设为I2STX_WS PINSEL0_bit.P0_9 = 1; / P0.9设为I2STX_SDA PINSEL1_bit.P0_23 = 2; / P0.23设为I2SRX_CLK PINSEL1_bit.P0_24 = 2; / P0.24设为I2SRX_WS I2STXRATE = 0x13; / 发送时钟速率设置 I2SRXRATE = 0x13; / 接收时钟速率设计 DAOValue = I2SDAO; / 数字音频输出控制寄存器数据传送 /* Switch to master mode, TX channel, no mute*/ /*切换至主(发送)模式,非静音 */ DAOValue &= (0x01 << 5)|(0x01 << 15); /选择主模式(发送通道)/非静音 DAIValue = I2SDAI; / 数字音频输入控制寄存器数据传送 DAIValue &= (0x01 << 15); I2SDAO = (0x01 << 4) | (0x01 << 3) | DAOValue; /

温馨提示

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

最新文档

评论

0/150

提交评论