基于ARM的mp3数字音频播放系统软件

上传人:1777****777 文档编号:38302042 上传时间:2021-11-06 格式:DOC 页数:58 大小:918.51KB
收藏 版权申诉 举报 下载
基于ARM的mp3数字音频播放系统软件_第1页
第1页 / 共58页
基于ARM的mp3数字音频播放系统软件_第2页
第2页 / 共58页
基于ARM的mp3数字音频播放系统软件_第3页
第3页 / 共58页
资源描述:

《基于ARM的mp3数字音频播放系统软件》由会员分享,可在线阅读,更多相关《基于ARM的mp3数字音频播放系统软件(58页珍藏版)》请在装配图网上搜索。

1、吉吉 林林 农农 业业 大大 学学学学 士士 学学 位位 论论 文文 题目名称: 基于 ARM 的 mp3 数字音频播放系统软件 学生姓名: 胡靖宇 (12083116) 院 系: 信息技术学院 专业年级: 08 级电子信息科学与技术 指导教师: 职 称: 2012 年 5 月 10 日目录摘要.IABSTRACT . II1 绪论1.1 课题来源和背景 . (1)1.2 课题研究的现状与意义 . (2)1.3 数字音频解码算法的实现方法 . (2)1.4 本论文所做工作和以及需解决的关键问题 . (3)2 系统总体设计方案及其硬件环境2.1 总体设计目标. (4)2.2 系统总体设计方案 .

2、 (4)2.3 系统设计硬件环境 . (6)2.4 软件开发平台简介 . (9)2.5 小结. (10)3 UC/OS-II 操作系统移植3.1 UC/OS-II 简介. (11)3.2 移植要求. (12)3.3 UC/OS-II 内核机制. (13)3.4 UC/OS-II 的移植步骤. (15)3.5 小结. (20)4 数字音频播放系统软件设计与实现4.1 系统的启动. (21)4.2 USB 通信的设计流程. (25)4.3 FLASH 文件系统结构及其存储管理. (37)4.4 MP3 播放流程设计. (42)4.5 人机界面的设计 . (47)4.6 小结. (50)5 总结与展

3、望5.1 全文总结. (52)5.2 进一步的展望. (52)致谢.(54)参考文献.(55)基于 ARM 的 mp3数字音频播放系统软件姓 名:胡靖宇 专 业:电子信息科学与技术指导教师:李建摘摘 要要 随着超大规模集成电路和数字电子技术的发展,以 MP3 为代表的消费类电子产品广泛的应用在我们的生活中,数字音频技术得到了长足的发展,而 ARM 技术也是当前研究的热点之一。与传统的数字产品相比,利用 ARM 技术开发的产品有其自己的特点,结合 ARM 微处理器和操作系统,使 MP3 播放器的数字音频处理更加灵活,播放性能更加优化,同时使得整个系统的功能更加的全面。本文结合数字音频技术和 AR

4、M 嵌入式系统两个前沿技术,以 SG850 微处理器为核心,提出了基于 ARM 嵌入式的 MP3 数字音频播放系统解决方案。本文以基于 ARM 嵌入式的 MP3 数字音频系统的软件设计与实现过程为主要内容,阐述了其相关技术和具体实现流程,其中重点分析了 uC/OS-II 操作系统的移植以及在其基础上的 USB 通信的实现过程和 MP3 播放的处理流程。在操作系统移植方面,在研究 uC/OS-II 的内核机制的基础上,分析与处理器相关的代码文件并进行了相关的修改,给出了 uC/OS-II 的具体移植步骤;在 USB 通信方面,将播放系统视作海量存储设备,利用 BULK_ONLY 传输协议来实现设

5、备与主机的 USB 通信,且采用了 Flash 存储管理机制解决了传输数据存储丢失的问题;在 MP3 播放处理方面,研究 DMA 内存管理机制,设计了双缓冲模式,给出了 MP3 播放处理流程,实现了大数据量音频数据的播放。测试结果表明,本文所实现的 MP3 音频播放系统达到了预期的目标,同时因为在系统架构上的技术优势,系统可以方便的进行功能扩充。 关键词:数字音频;ARM;uC/OS-II 操作系统; 移植;USB 通信;SG850ARMARM basedbased onon thethe MP3digitalMP3digital audioaudio broadcastingbroadcas

6、ting systemsystem softwaresoftwareName:Hu Jing-yuMajor:Electronics Tutor:Li jianAbstract:With the development of ultra-large-scale integrated circuits and digital electronic technology, MP3 as the representative consumer of the electronics products are widely used in our daily life. Digital Audio Te

7、chnology achieves a considerable development, in which ARM technology is one of the hot one currently. Compared with the traditional digital products, the one by using of ARM technology has its own features. Combining ARM microprocessors and operating systems, MP3 Player Digital Audio processing is

8、more flexible and Performance Optimization is more modified, furthermore, the whole system function is more comprehensive. On the basis of the two advanced technology-Digital Audio Technology and ARM Embedded System, as well as SG850 microprocessoras the core, the present study puts forward the solu

9、tions of MP3 digital audio playing system embedded by ARM. Regarding the design and implementation process of MP3 Digital Audio playing System software based on the ARM Embedded as the main content, this paper describes the related technologies and its specific processes, in which focuses on the ana

10、lysis of the transplantation of the uC/OS-II operating system and the undertaken process of USB Communication on the foundation of this system as well as the manipulation process of MP3 player. In the transplantation of operating system, based on the study of uC/OS-II kernel mechanism, the present s

11、tudy analyzes the code documents related with the Processing equipment and makes the relevant amendments which providing the specific steps of the transplantation of uC/OS-II. In USB communication, regarding the broadcast system as mass storage devices, by the utility of transmission equipment of BU

12、LK_ONLY, it achieves the agreement with the host USB communication. Moreover, this study has resolved the problem of the loss of data transmission by the usage of Flash memory management mechanisms. In MP3 player disposal, this thesis investigates the DMA memory management mechanisms and designs the

13、 double-buffer mode, which proposes the treatment process of MP3 player and achieves the playing of a large volume of audio data.This paper indicates that, the chievement of MP3 audio playing system is the practical products are obtained the desired goals. Meanwhile, as the technical superiority of

14、the systems construction, the system can easily expand the functionality.Keyword: Digital Audio-frequency; ARM; uC/OS-II Operate System; Transplantation;the Communication of the USB Interface; SG8501 绪论1.1 课题来源和背景本课题由深圳迪斯比科技有限公司提供,属于公司合作项目。现代社会正步入一个信息化的时代,信息技术以前所未有的速度广泛地应用于社会生活的各个方面,改变着人们的工作、生活和学习方式

15、,并对社会的政治、经济、军事、文化等各个领域产生深远影响。信息化发展水平已成为衡量一个国家、一个城市现代化水平和综合实力的重要标志。信息技术在保持和提高一个国家的经济发展和社会发展方面,已成为重要因素,信息技术是经济发展的关键,也将会引起社会生活的明显变化。进入 20 世纪 80 年代以来,随着超大规模集成电路和数字电子技术的发展,数字通信设备、计算机、光器件和视听产品得到了革命性的发展,使人们进入了数字信息时代。在数字化潮流的驱动下,消费类电子产品已被视为继信息产品之后,推动市场成长的重要力量。在提高消费类电子产品的性能与个性化需求的驱动下,企业界纷纷加大研发投入,不断融入新的技术。在数字音

16、频技术方面, WAV、MPEG 和 WMA 相继出现的同时,MP3 也正如暴风雪一般横扫整个音乐界,可见数字音频领域的研究有着非常广阔的前景1。本文采用了 ARM 微处理器作为整个音频播放系统的控制和管理单元。ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术。1991 年 ARM 公司成立于英国剑桥,是一家既不生产芯片也不销售芯片的公司,主要出售芯片设计技术的授权。目前,采用 ARM 技术知识产权(IP)核的微处理器,即我们通常所说的 ARM 微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、

17、无线系统等各类产品市场,基于 ARM 技术的微处理器应用约占据了 32 位的 RISC 微处理器 75以上的市场份额,ARM 技术正在逐步渗入到我们生活的各个方面2。本课题的出发点即为研究数字音频技术在 ARM 嵌入式系统中的应用,结合数字音频和 ARM 嵌入式系统这两个前沿技术,设计一个基于 ARM 嵌入式系统的数字音频播放系统。1.2 课题研究的现状与意义与传统的通用计算机,数字产品相比,利用 ARM 嵌入式系统技术开发的产品有其自己的特点,结合 ARM 微处理器和操作系统,使数字音频处理更加灵活,数字音频的播放性能更加优化,同时使得整个系统的功能更加的全面3。在硬件上影响数字音频播放器性

18、能的两个主要因素是中央处理器和解码芯片。对于软件解码方式,没有解码芯片,系统硬件采用单芯片模式;对于硬件解码方式,系统硬件采用含数字音频解码芯片的双芯片模式。其中双芯片的好处在于分离解码芯片与控制芯片,这样能够带来更为出色的解码效果,但价格昂贵;单芯片为了简化结构牺牲了音质,但这样产品的性价比高,适合中国的国情4。当今国内市场上的数字音频播放器根据生产厂商的不同主要分为国内和国外两种。其中国内厂商生产的数字音频播放器大多数出于对成本的考虑,在中央处理器只是使用了一些简单的单片机或专用的单机处理芯片,解码芯片也是使用类似 STMicroelectronics 或者 Sigmate 的中低端解码芯

19、片,这种设计使得产品的功能简单、效果不佳;而国外厂商生产的数字音频播放器一般定位在高端产品,大多数使用昂贵的专用处理芯片,采用 Philips 或者 Telechips 的高端解码芯片,这样虽然使得产品的整体性能有较大的提高,但昂贵的价格使我们望而却步5。基于以上分析,本课题提出了一个比较优化的解决方案,在此采用的 SG850 是基于 ARM7 微处理器的单芯片形式,这里虽然采用了单芯片的硬件简化形式,但由于 ARM 微处理器芯片相比一般单片机具有更加强大的处理能力,以及其集成了音频 DSP,使得整体设计方案的性能达到非常优化,同时更加适合符合市场需求。1.3 数字音频解码算法的实现方法各种不

20、同的编解码算法方案是根据不同的应用制定的,算法方案的实现方式也就与应用场合密切相关。从总体上来讲,音频压缩算法有三种实现的方案:(1) 软件实现这种方法使用于计算机上的音频应用和组合多种娱乐功能的便携式设备中,只需要进行音频数据的软件编解码过程。编解码算法可以用各种编程语言实现,然后按照需要进行相应的解码或者存储、传输操作。计算机之间交互音频数据、播放歌曲时,就使用的这种软件实现方法。 (2) 硬件实现这种方法使用于应用设备上的算法实现。硬件电路根据算法原理对原始音频数据进行相应的处理变换,以获得所需要的数据格式。在算法比较简单的情况下,硬件实现的速度非常快。(3) 软硬件实现这类方法一般是针

21、对在具体应用设备上,需要进行比较复杂的音频算法实现的情况。应用设备要求实现相应的处理,但纯粹的硬件实现复杂度和技术难度都比较高,因此在硬件上嵌入处理器,处理器中实现算法的软件编程,从而实现整个应用系统的功能需求。这样,具体使用哪种实现方案,需要根据具体情况来确定。本论文实现的音频播放器解码采用软硬件实现方案,以 SG850 作为核心控制器的播放器,解码采用软件解码6。1.4 本论文所做工作以及需解决的关键问题本文的主要工作包括 uc/OS-II 操作系统在 ARM 微处理器上的移植和 ARM 嵌入式 MP3 音频播放系统的软件设计与实现。在本文内容安排上,首先对 MP3 音频播放系统进行总体方

22、案设计,介绍系统开发硬件环境,以及确定开发平台;接着介绍了 uC/OS-II 操作系统移植;然后分为 USB 通信,Flash 文件系统结构及其存储管理,人机界面以及音频解码四个部分,详细分析了各个环节的软件设计,提出解决方案;最后对该课题设计作总结并展望它的未来发展趋势。综观整个课题设计,其中拟解决的关键问题有以下四个:(1) uC/ OS-II 嵌入式操作系统在 ARM 微处理器上的移植;(2) 实现数字音频文件上传下载的管理,与上位机(PC 机)之间的 USB 通讯;(3) 实现音频数据在 Flash 上的存储管理,包括数据暂存技术和坏块管理技术;(4) 结合 ARM 微处理器,实现 M

23、P3 数字音频格式文件的软件解码播放。在加速度计信号传感器接收电路及信号处理方面,尽管已经有很多人做过研究,但大都是直接接收从传感器送来的模拟信号,通过硬件的方法滤波、放大、锁相、消除干扰等一系列处理来实现。随着时间的发展,硬件在某些方面的不足逐渐暴露出来,例如电路一旦固定、难以更改;无法进行微调;价格昂贵等。为了克服这些不足,本课题尝试将传感器传来的模拟信号经过一些相关处理后送入嵌入式微控制器,再通过软件的方法进行处理,这样,就可以让软件分担一部分硬件的功能,用于弥补因完全采用硬件处理所产生的不足,提高灵活性,降低成本。第二章 系统总体设计方案及其硬件环境2.1 总体设计目标MP3 数字音频

24、播放器以嵌入式微处理器 SG850 为核心进行设计,要求:(1) 能够通过 USB 与 PC 机进行通信下载音频文件;(2) 能够播放全码流率的 MP3 格式;(3) 具有键盘输入、LCD 显示和存储播放控制功能。2.2 系统总体设计方案基于 ARM 嵌入式系统的音频播放系统从总体上可以分为硬件模块和软件模块两个部分。硬件作为底层支持,主要起着数据存储、任务实施等功能;而软件部分主要包括操作系统、USB 通信模块、音频解码模块和人机界面模块等,主要协调硬件系统,起着任务管理、数据通信、音频播放等功能。本文主要针对 MP3 音频播放系统的软件进行研究。2.2.1 软件总体设计方案系统软件模块主要

25、包括:(1) Bootloader 引导程序7(2) 操作系统软件(3) USB 固件及文件系统模块8(4) Flash 存储管理模块(5) 数字音频解码模块(6) 人机界面模块Bootloader 引导程序是整个程序结构的最底层,它运行在操作系统和文件系统之前,结束于进入操作系统内核之后,主要作用是对 SG850 进行硬件初始化,异常处理程序初始化910,外部存储器空间初始化,准备好 C 语言运行环境,并完成存储空间的重映射,然后将控制权交给操作系统内核。uC/OS- II 嵌入式操作系统是整个软件系统的核心,它负责调度各个任务的当前状态,在 uC/OS-II 嵌入式操作系统之上的是四个用户

26、创建的任务,包括 LCD 显示任务、USB 通讯任务、MP3 数字音频解码录音任务和按键扫描任务,本文所要完成的软件设计主要包括 uC/OS-II 嵌入式操作系统的移植和上述四个任务的程序设计。软件结构框图如图 2.1 所示:图 2.1 软件结构框图2.2.2 系统软件工作流程介绍系统上电后,Bootloader 首先进行操作系统内核、文件系统加载,在操作系统运行成功后启动多任务的调度。具体系统工作流程如图 2.2 所示。在本文中,键盘是本系统的唯一输入设备,它负责控制各任务之间的通信。作为系统的主任务,不同的按键产生不同的消息,系统进行相应的任务调度,响应用户的操作意图。当按 power 键

27、一下时候,传递系统开机消息,系统进行任务切换,调用 LCD 任务,进入主菜单模式;开机状态任何模式长按 power 键 2 秒钟,产生关机消息,调用 LCD 任务,LCD 显示关闭,CPU 时钟关,进入关机状态;在主菜单模式 1 分钟/3 分钟/5 分钟无任何按键操作且没有 MP3 放/录音任务,产生关机消息,自动进入关机状态;在任何情况下 1 分钟无任何按键操作,调用 LCD 任务,LCD 显示关闭,LCD 背光关;当按播放键时,系统调度 LCD 任务和 MP3 播放任务;当设备通过 USB 口连接主机时,系统调度 USB 任务,与主机进行数据通信。图 2.2 系统工作流程框图2.3 系统设

28、计硬件环境2.3.1 SG850 微处理器内部结构及其特点SG850 系列芯片是北京 SiGma(希格玛)公司推出的针对 16/32 位嵌入式微处理器,集成了音频 DSP,该 MCU (Micro Controller Unit,微处理器)专为数字多媒体系统而设计,具有低成本和高性能的特点,其结构如图 2.3 所示。图 2.3 SG850 内部结构图SG850 内置 ARM 公司设计的 16/32 位 ARM7TDMI 微处理器核,可执行 32 位的 ARM 指令,也可执行 16 位的 THUMB 指令,集成了多种外围部件,主要有以下一些主要特点:(1) 32 位低功耗轻巧型 RISC 内核,

29、0.9MIPS/MHz,支持小端模式,以及地址重定位;(2) 片内集成 64KB SRAM,包含 32KB 紧耦合 SRAM;(3) 96K 内置 ROM, 可以存放语音 DSP 固件和相关 API,驱动等;(4) 支持 MP3 解压功能,包含 1.2K-32KB 语音解压,ADPCM 编解码算法固件;(5) 支持多种代码启动方式(可设置为从 NAND FLASH, NOR FLASH/ROM 等接口启动);(6) 支持 4 通道 DMA 控制器;(7) 可支持 4 个外部中断,20 个内部中断,2 个可设置的中断优先级;(8) 为节省系统功耗,支持睡眠和 IDLE 工作模式,支持 IO 和中

30、断等唤醒功能;(9) 主 PLL 输入时钟 224M,输出 464MHz 软件可调;可分频出 48MHZ USB时钟;(10) 8/16 位存储器接口,支持 SRAM,NOR-FLASH,ROM,NAND FLASH 等存储器,访问周期可软件设置;(11) 自带 DMA 功能的 LCD 控制器,可支持单色/彩色 320240 LCD;(12) 支持 USB1.1 接口;(13) 2 个 I2S 主/从控制器、UART 接口、I2C 主模式;(14) 10 位 DAC 和 PWM 语音输出电路;(15) 10 位 4 通道 ADC;(16) 2 个 16 位预分频 TIMER;(17) 支持实时

31、时钟 RTC 功能,闹钟功能,看门狗功能;(18) 支持低电压安全探测功能。2.3.2 硬件总体结构图对整个系统需要支持的功能分析可知,硬件模块包括:(1) 主处理器(2) DC-DC 电源及电压监控电路(3) 存储器,包括 FLASH、SDRAM 等(4) 通信接口,包括串口功能,USB 口功能(5) 其他。包括 LCD 及键盘功能、I2S、JTAG硬件结构框图如图 2.4 所示图 2.4 系统硬件结构框图 主处理器是整个系统的核心部件,起着系统控制,运算处理等重要的作用,系统选择的是 SiGma(希格玛)公司为数字多媒体系统而设计的 SG850 微处理器,具有低成本和高性能的特点,该处理器

32、内核是 ARM 公司的 ARM7TDMI。DC-DC 电源模块的作用主要是给系统各部件提供不同要求的电压,系统用到的电压等级有:5V、3.3V。多电压等级就需要多种不同的 DC-DC 电压转换芯片,本系统选择了开关电源和线性电源混合的供电方式。电压监控电路的目的是监视主处理器供电电压,一旦由于各种原因,电压波动超过了一定范围,将会产生复位信号,使主处理器进入复位状态,以免错误执行操作。FLASH 存储器用于存放 Bootloader 程序、操作系统内核、文件系统和音频数据。串口的作用是调试程序时候与 PC 机上超级终端联合使用,在程序中设置串口通信信息,在PC 机端可以看到相应的调试信息;US

33、B 口用于与 PC 机通信,下载或者上传音频数据1112。LCD 用于显示系统菜单及曲目信息1314,I2S 用于播放 MP3 格式音频数据;JTAG 接口用于下载程序以及系统编程调试15。2.4 软件开发平台简介2.4.1 ARM ADS 集成开发环境ARM ADS 全称为 ARM Developer Suite16。是 ARM 公司推出的新一代 ARM 集成开发工具。现在 ADS 的最新版本是 1.2,它取代了早期的 ADS1.1 和 ADS1.0。它除了可以安装在 Windows NT4,Windows 2000,Windows 98 和 Windows 95 操作系统下,还支持 Win

34、dows XP 和 Windows Me 操作系统。ADS 由命令行开发工具,ARM 实时库,GUI 开发环境(Code Warrior 和 AXD),实用程序和支持软件组成。 有了这些部件,用户就可以为 ARM 系列的 RISC 处理器编写和调试自己的开发应用程序了。在本课题中,使用 ADS 1.2 进行编写、编译和初步调试程序。2.4.2 串口调试工具在本课题后期的调试中,用串口线连接 PC 机和音频系统,在程序中设置调试信息,使用串口调试工具,可以在 PC 机上看到相应的调试信息。在调试过程开始之前,必须设置串口工作在 8 位,无奇偶校验,1 停止位,115200 波特率下(与软件中串口

35、模块的波特率一致,否则,不能得到调试信息)。2.5 小结本章首先简要的介绍了本项目中给出本课题的总体设计目标,在对总体目标及系统功能进行需求分析的基础上,提出了系统总体设计方案,并分析了系统软件工作流程,最后简要的介绍了系统开发的硬件环境及其软件开发平台。 第三章 uC/OS-II 操作系统移植ARM 芯片获得了许多实时操作系统(Real Time Operating System)供应商的支持,比较知名的有:Windows CE、Linux、pSOS、VxWorks、Nucleus、ECOS、uC/OS 等。uC/OS-II是著名的、源码公开的实时内核,是专为嵌入式系统应用设计的,可用于各类

36、 8 位、16 位和 32 位单片机或 DSP。从 uC/OS 算起,该内核己有 10 余年应用史,在诸多领域得到了广泛应用。在本项目中,采用了 uC/OS-II 实时操作系统171819。3.1 uC/OS-II 简介uC/OS 最早的版本叫做 COS,关于 uC/OS 的论文,分两期连载在美国的“嵌入式系统编程”(Embedded System Programming)杂志的 1992 年第 5 期和第 6 期上,COS 的源码放在该杂志网页的留言版(BBS)上供用户下载。1992 年末,美国的 R&D 出版社出版了, “Micro uC/OS The Real-Time Kernel”一

37、书,书中附有一张软盘,是 uC/OS 的源代码。该书后来成为一本畅销书,发行量突破了 15000 本。uC/OS 是基于优先级的可剥夺型(Preemptive)实时内核,可裁剪、可固化。由于与硬件相关的代码仅 200 行左右,并写在两个单独的文件中,且注解很清楚,故很容易将 uC/OS 移植到其它类型的 CPU 上。在后来的几年中,用户纷纷将 uC/OS 移植到了各种 CPU 上,应用领域涵盖了如照相机、医疗器械、音响设施、发动机控制、网络设备、高速公路电话、自动柜员机、工业机器人等行业和设备。到 1998 年,作者出了他的第二本书“uC/OS-II The Real-Time Kernel”

38、,给 uC/OS 增加了一些新功能,对源码进行了整理,说明得更详尽,书的厚度也增加了 200 页,Jean J. Labrosse 先生开通了 uC/OS 的商业网站,并不断推出新版本。自此,uC/OS-II 开始在各个领域重装上阵,大显身手。uC/OS-II 产品在现代商业应用非常广泛,已被相关机构证实具有非常稳定、可靠的性能,并成功应用于生命科学、航天工程等重大科研项目中。并且由于其极小的内核,特别适用于对程序代码存储空间要求极其敏感的嵌入式系统开发。uC/OS-II 是一款源码公开的实时操作系统2021,真正支持多个任务同时运行,各个任务有独立的栈空间,并提供系统服务、中断管理等功能。作

39、为一个实用的实时操作系统,uC/OS-II 还具有以下特点:可移植性(Portable)、可固化(ROMable)、可裁剪(Scalable)、抢占式(Preemptive)。教学系统已成功运行的 uC/OS-II 系统是 Embest IDE for ARM 工具编译调试通过的简单内核和用户程序,使用 Embest IDE for ARM 可以查看内核的各种状态,包括任务(Task)、队列(Queue)、信号量(Semaphore)、邮箱(Mailbox)、事件(Event)、互斥量(Mutex)等;同时提供时间相关函数、栈空间、内存(Memory)申请和释放等操作。在当前各种嵌入式操作系统

40、之中,uC/OS-II 以其优异的性能,在各大领域中得到了广泛的应用。uC/OS 和 uC/OS-II 是专门为嵌入式应用设计的实时操作系统内核。注解得很详细的源代码有 200 页,其中 95%左右是用 C 语言写的,与 CPU 类型相关的代码用 8088 的汇编语言写成,不超过 200 行。3.2 移植要求所谓移植,就是使一个实时内核能在某个微处理器或微控制器上运行。为了方便移植,大部分的 uC/OS-II 代码是用 C 语言写的;但仍需要用 C 和汇编语言写一些与处理器相关的代码,这是因为 uC/OS-II 在读写处理器寄存器时只能通过汇编语言来实现。由于 uC/OS-II 在设计时就己经

41、充分考虑了可移植性,所以 uC/OS-II 的移植相对来说是比较容易的。要使 uC/OS-II 正常运行,处理器必须满足以下要求22:处理器的 C 编译器能产生可重入代码。可重入的代码指的是一段代码可以被多个任务同时调用,而不必担心会破坏数据。也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会因为在函数中断的时候被其他的任务重新调用,影响函数中的数据。在 程 序 中 可 以 打 开 和 关 闭 中 断 。 在 uC/OS-II 中 , 可 以 通 过OS_ENTER_CRITICAL()或者 OS_EXIT_CRITICAL()宏来控制系统关闭或者打开中断,

42、这需要处理器的支持。在 ARM7TDMI 的处理器上,可以设置相应的寄存器来关闭或者打开系统的所有中断。处理器支持中断,并且能产生定时中断(通常在 10 至 100Hz 之间)。uC/OS-II 是通过处理器产生的定时器中断来实现多任务之间的调度的, ARM7TDMI 的处理器上可以产生定时器中断。处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈。处理器有将堆栈指针和其它 CPU 寄存器读出和存储到堆栈或内存中的指令。uC/OS-II 进行任务调度的时候,会把当前任务的 CPU 寄存器存放到此任务的堆栈中,然后,再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。所以,寄存

43、器的入栈和出栈是 uC/OS-II 多任务调度的基础。在本项目中,SG850 微处理器完全符合上面要求,所以可以移植 uC/OS-II。3.3.1 uC/OS- II 任务调度机制uC/OS- II 总是运行进入就绪态任务中优先级最高的那一个。确定任务优先级的高低,下面该哪个任务运行的工作是由调度器(Scheduler)完成的。任务级的调度是由函数 OSSched()完成的,中断级的调度是由另一个函数 OSIntExt()完成的。3.3.2 uC/OS- II 任务管理机制任务可以是一个无限的循环,也可以在一次执行完毕后被删除掉。这里要注意的是,任务代码并不是被真正的删除了,而只是 uC/OS

44、-II 不再理会该任务代码,所以该任务代码不会再运行。任务看起来与任何 C 函数一样,具有一个返回类型和一个参数,只是它从不返回。任务的返回类型必须被定义成 void 型。在本节中所提到的函数可以在 OS_TASK.C 文件中找到。uC/OS-II 可以管理多达 64 个任务,并从中保留了四个最高优先级和四个最低优先级的任务供自己使用,所以用户可以使用的只有 56 个任务。任务的优先级越高,反映优先级的值则越低。在最新的 uC/OS-II 版本中,任务的优先级数也可作为任务的标识符使用。3.3.3 uC/OS- II 的内存管理机制在 ANSI C 中可以用 malloc()和 free()两

45、个函数动态地分配内存和释放内存。但是,在嵌入式实时操作系统中,多次这样做会把原来很大的一块连续内存区域,逐渐地分割成许多非常小而且彼此又不相邻的内存区域,也就是内存碎片。由于这些碎片的大量存在,使得程序到后来连非常小的内存也分配不到。另外,由于内存管理算法的原因,malloc ()和 free()函数执行时间是不确定的。在 uC/OS-II 中,操作系统把连续的大块内存按分区来管理。每个分区中包含有整数个大小相同的内存块,如图 3. 1 ( a)所示。利用这种机制,uC/OS-II 对 malloc()和 free()函数进行了改进,使得它们可以分配和释放固定大小的内存块。这样一来,mallo

46、c()和 free()函数的执行时间也就固定了。如图 3. 1 (b),在一个系统中可以有多个内存分区。这样,用户的应用程序就可以从不同的内存分区中得到大小不同的内存块。但是,特定的内存块在释放时必须重新放回它以前所属的内存分区。显然,采用这样的内存管理算法,上面的内存碎片问题就得到了解决。图 3.1 内存分区示意图3.3.4 uC/OS- II 的通信与同步机制任务之间共享数据和提供任务之间的通信,除了利用宏 OS_ENTER_ CRITICAL()和 OS_EXIT_CEITICAL() 来 关 、 开 中 断 以 及 利 用 函 数 OSSchedLock() 和OSSchedUnloc

47、k()对任务调度函数上锁和开锁等方法外,还可以通过信号量、邮箱和信息队列来完成通信。一个任务或者中断服务子程序可以通过事件控制块 ECB ( Event Control Blocks)来向另外的任务发信号。这里,所有的信号都被看成是事件(Event)。一个任务还可以等待另一个任务或中断服务子程序给它发送信号。只有任务可以等待事件发生,中断服务子程序是不能这样做的。对于处于等待状态的任务,可以给它指定一个最长等待时间,以此来防止因为等待的事件没有发生而无限期的等下去。多个任务可以同时等待同一个事件的发生。在这种情况下,当该事件发生后,所有等待该事件的任务中,优先级最高的任务得到了该事件并进入就绪

48、状态,准备执行。这里的事件,可以是信号量、邮箱或者消息队列等。3.4 uC/OS-II 的移植步骤uC/OS-II 的体系结构2324如图 3.2 所示。在移植过程中,与处理器相关的的代码主要集中在 OS_CPU.H、OS_CPU_C.C 和 OS_CPU_A.ASM 这三个文件中。uC/OS中的任务总是处于睡眠态、就绪态、运行态、等待状态和中断服务态 5 种状态之一。任何任务必须首先创建处于就绪态之后才有可能运行,任务创建函数 OSTaskCreate()和 OSTaskCreateExt()会初始化任务的栈结构,使堆栈看起来就像刚刚发生过中断一样,所有寄存器保存在任务的堆栈之中。若要任务恢

49、复执行,只需在最后执行一条中断返回指令即可。在 uC/OS-II 的移植文件 OS_CPU_C.C 中,唯一必要的函数就是OSTaskStkinit()。该函数会在任务创建时被调用,用来初始化任务的堆栈结构。在uC/OS-II 的另一个移植文件 OS_CPU_A.ASM 中,需要改写 OSSstartHighRdy() 、OSCtxSW()、OSIntCtxSW()和 OSTickISR()4 个函数。图 3.2 uC/OS-II 体系结构图3.4.1 OS_CPU.H 文件相关配置这个文件中包含了一些需要根据 CPU 的指令字长和硬件更改的定义。1 定义与编译器无关的数据类型typedef

50、unsigned char BOOLEAN; /*布尔变量*/typedef unsigned char INTBU; /*无符号 8 位整型变量*/typedef signed char INTBS; /*有符号 8 位整型变量*/typedef unsigned short INT16U; /*无符号 16 位整型变量*/typedefsigned short INT16S; /*有符号 16 位整型变量*/typedef unsigned int INT32U; /*无符号 32 位整型变量*/typedef signed int INT32S; /*有符号 32 位整型变量*/type

51、def float FP32; /*单精度浮点数(32 位长度) */typedef double FP64; /*双精度浮点数(64 位长度) */typedef INT32U OS_STK; /*堆栈是 32 位宽度*/2 堆栈单位因为处理器现场的寄存器在任务切换时都将会保存在当前运行任务的堆栈中,所以 OS_STK 数据类型应该是和处理器的寄存器长度一致的。typedef INT32U OS_STK; /*堆栈是 32 位宽度*/3 堆栈增长方向堆栈由高地址向低地址增长,这也是和编译器有关的。当进行函数调用时,入口参数和返回地址一般都会保存在当前任务的堆栈中,编译器的编译选项和由此生成的

52、堆栈指令就会决定堆栈的增长方向。#define OS_STK_GROWTH 1 /*堆栈是从上往下长的*/4 关闭中断和打开中断OS_ENTER_CRITICAL()宏被定义为 OS_CPU_A.S 中的 ARMDisableInt()关闭中断;OS_EXIT_CRITICAL()宏被定义为 OS_CPU_A.S 中的 ARMEnableInt()打开中断。3.4.2 OS_CPU_C.C 文件相关配置这个文件包含一个和 CPU 结构相关的任务堆栈初始化函数,以及用户可以利用的一系列钩子函数,可以处理特殊硬件扩展、MMU、调试等之用。1 任务堆栈的初始化每个任务都需要有自己的堆栈空间,以便进行

53、任务切换的时候能够将当时的处理器现场保存到任务的堆栈中去,在下一次执行的时候能够恢复出来。在每次进行处理器现场保存的时候,需要按照一定的顺序进行堆栈操作,这个顺序就是任务堆栈设计。任务堆栈的设计是在任务初始化时进行的,主要是在堆栈增长方向上如何定义每个需要保存的寄存器位置。在 ARM 体系结构中,处理器的现场通常是指PC, LR,RO, , R12, CPSR, SPSR这些寄存器。在系统中,任务堆栈空间有高至低保存着 PC, LR, R12, R11, R1, CPSR, SPSR。堆栈是任务上下文(contex)的一部分,OSTaskCreate()和 OSTaskCreateExt()通

54、过调用 OSTaskStkInit()来初始化任务的堆栈结构。堆栈的初始化结构如图 3.3 所示。图 3.3 堆栈初始化结构示意图uC/OS-II 的任务,在没有执行的时候堆栈看起来就象刚发生过中断并将所有的寄存器保存到堆栈中的情形一样。在用户建立任务的时候,用户传递任务的地址,pdata 指针,任务的堆栈栈顶和任务的优先级给 OSTaskCreate()和 OSTaskCreateExt()。一旦用户初始化了堆栈,OSTaskStkInit()就需要返回堆栈指针所指的地址。OSTaskCreate()和 OSTaskCreateExt()会获得该地址并将它保存到任务控制块(OS_TCB)中。

55、2 钩子函数在 OS_CPU_C.C 中,有一些钩子函数结构,如果没有特殊需求,则只需要简单地将它们都实现为空函数就可以了。3.4.3 OS_CPU_A. S 文件相关配置这个文件是移植的重点,主要需要根据硬件修改四个函数:OSStartHighRdy()OSCtxSw()OSIntCtxSw()OSTickISR()1 任务启动函数 OSStartHighRdy()系统在创建完最初的若干任务后,系统启动函数 OSStart()开始运行, OSStart()找到最优先的任务,最后就调用 OSStartHighRdy()来启动该任务。在 OSStartHighRdy()被调用之前,优先级最高的任

56、务的 TCB(任务控制块)的指针,也是刚才放好的堆栈指针,己经被 OSStart()放在全局变量 OSTCBHighRdy 中。OSStartHighRdy()函数的任务归结如下:进来了之后,先可以调用一个允许用户定 HOOK 函数;把全局变量 OSRuning 设置为 TRUE,标志多任务系统开始运行;从 OSHighRdy 指向的 TCB(任务控制块)中拿到堆栈指针,放在 R13 寄存器里;从堆栈中恢复所有其他的相关寄存器,包括程序状态寄存器(CPSR),通用寄存器(R0-R12),连接寄存器(LR),程序计数寄存器(PC)。这样,任务函数就象被调转指令(BL)调用了一样,从任务的第一条指

57、令开始执行了。2 任务级切换函数 OSCtxSw()除了最初的调度之外,系统里还会发生其他两种情况的调度。一,一个任务调用OsxxxPend()、OSTimDelay()之类的函数,主动放弃 CPU 的使用权;二,一个任务正在执行,不愿意中止却被中断了,这个中断源恰恰是 OSTimTick 之类,要引起系统重新调度,这时发生的是抢占式调度(preemptive scheduling),抢占式调度是实时系统实现的法宝,也是 uC/OS-II 的特色。3 中断级切换函数 OSIntCtxSw()OSIntCtxSw()是刚才提到的第二种情况,在中断中发生调度时用到。如果一个中断需要从中断服务程序中

58、进行调度,uC/OS-II 的文档给出了这种调度的处理方法,具体步骤是:一旦有这种中断发生,就保存正在运行任务的上下文,然后处理中断,再调用一个操作系统提供的在中断服务程序(ISR)中使用的 Mutex, MailBox 之类的服务函数,在这些函数的最后都会调用 OSIntExit(),在这里发生了调度,OSIntExit()找出可以运行的最高优先级任务,把他的 TCB 指针放在 OSTCBHighRdy 里,最后如果需要调度,OSIntCtxSw()被调用。需要注意,这么多层的调用,在处理时一定要小心,每一个用汇编语言写成的函数都要象一个普通的函数一样,现场保存,处理,现场恢复。当然,这里保

59、存和恢复的东西多了点,是整个的任务上下文。4 时钟节拍中断服务函数 OSTickISR()这是 uC/OS-II 抢占式调度在中断服务程序(ISR)的一个标本。当一个优先级高的任务放弃 CPU 使用权,例如要休眠 10 个 Tick(时钟节拍),系统调度一个低优先级的任务执行之。OSTickISR()的具体任务步骤是:首先为休眠的任务计时,每次执行,就把休眠任务剩余的睡觉时间减去一个时钟节拍。如果发现一个任务睡够了,就顺便恢复它为就绪态。做完该做的一切,一个对 OSIntExit()的调用,使调度发生了。OSIntExit()从所有已经就绪的任务中,选择一个优先级最高的,恢复现场并往下执行。所

60、以可以相信,10 个时钟节拍之后,恢复到那个高优先级的任务现场,然后执行它。需要注意的是,ARM 的 IRQ 中断发生后的 PC 保存,程序计数器 PC=LR-4,而不是前面的 PC=LR。另外,保存的是 SVC 模式下的现场,中断后处理器进入 IRQ 模式,访问不到 SVC 模式下的 R13,于是在 IRQ 模式下,只好先保存 SPSR 和 LR,然后尽快退回到 SVC 模式,这时的 R13 是任务的堆栈指针。立即保存所有寄存器。记住这里除了压栈所有寄存器,还要保存堆栈指针到当前任务的 TCB 中,因为在 OSIntCtxSw()里没有做这个工作。OSIntCtxSw()是在 OSIntEx

61、it()中被调用的。3.4.4 在系统里挂接 IRQ 的 ISR在 ARM 系统中,一旦 IRQ 中断得到响应,系统进入 IRQ 模式(如前所述),并跳转到内存 0 x0018 处开始执行(0 x0018 在 Arm 中是 IRQ 的中断入口地址)。在音频系统中,这段代码处于板上 ROM 里。为了不修改 ROM 就可以重定位各个 ISR,系统在 RAM 的高端开辟了一个向量表,表中的每 4 个字节填入一个真正的 ISR 入口地址。当 IRQ 中断响应时,ROM 代码先从 0 x0018 处再一次跳转,执行一段从 RAM 高端的向量表里查询真正 IRQ 的 ISR 入口地址的程序,找到这个地址后

62、,把它装入 PC 寄存器,于是开始了中断服务。完成了上述工作以后,uC/OS-II 就可以正常的运行在 ARM 处理器上了。3.5 小结本章主要介绍了 uC/OS-II 操作系统的移植。首先分析了 uC/OS-II 的内核机制及其移植的要求,然后详细描述了 uC/OS-II 移植步骤。第四章 数字音频播放系统软件设计与实现4.1 系统的启动4.1.1 启动代码基于 ARM 是复杂的片上系统(SoC ),这种复杂系统里的多数硬件模块都是可配置的,需要由软件来设置其需要的工作状态。因此在用户的应用程序启动之前,需要有专门的一段启动代码来完成对系统的初始化。由于这类代码直接面对处理器内核和硬件控制器

63、进行编程,一般都是用汇编语言写的。启动代码就是完成各种初始化工作,并引导进入C 程序25。启动代码一般随具体的目标系统和开发系统有所区别,通常包括以下部分:定义入口点设置中断/异常向量初始化存储系统(包括地址重映射)初始化堆栈指针寄存器初始化中断中用到的变量开中断必要时改变处理器的模式必要时改变处理器的状态初始化 C 程序用到的存储区进入 C 程序4.1.2 异常中断中断向量异常由内部和外部源产生并使处理器处理一个事件,例如外部中断或试图执行一个未定义指令都可以引起异常。ARM 支持 7 个类型的异常2627,如表 3.2 所示。当异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。这

64、些固定地址称为异常向量(Exception Vectors )。ARM 中断向量表必须放置在从 0 地址开始,连续 84 字节的空间内。每当有中断或者异常发生的时候,PC 就会跳转到 020H 之间相应的地址去取程序代码执行。异常类型模式正常地址高向量地址复位管理0 x00000000OxFFFF0000未定义指令未定义0 x00000004OxFFFF0004软件中断(SWI)管理0 x00000008OxFFFF0008预取中止(取指令存储器中止)中止Ox0000000COxFFFF000C数据中止(数据访问存储器中止)中止0 x00000010OxFFFF0010I RQ(中断)IRQ0

65、 x00000018OxFFFF0018FIQ(快速中断)FIQOx0000001COxFFFF001C表 4.1 表 3.2 异常模式当处理异常时,ARM7TDMI 内核会:(1) 在适当的 LR 中保存下一条指令的地址。若异常入口来自 ARM 状态下,ARM7TDMI 内核将下一条指令的地址复制到 LR 中(当前 PC+4 或 PC+B,取决于异常的类型)。若异常入口来自 Thumb 状态下,ARM7TDMI 将 PC 加偏移值(PC+4 或PC+8,取决于异常类型)写入 LR,当进入异常时,异常处理程序不必确定状态:(2) 将 CPSR 复制到适当的 SPSR;(3) 根据异常将 CPS

66、R 模式强制设为某一值;(4) 强制 PC 从相关的异常向量处取指;(5) ARM7TDMI 内核在中断异常时,置位中断禁止标志,可防止不受控制的异常嵌套。当异常处理结束时,异常处理程序必须:(1) 将 LR 中的值减去偏移量后移入 PC。偏移量的值根据异常的类型而有所不同;(2) 将 SPSR 中的值复制 CPSR;(3) 清零在入口置位的中断禁止标志。当多个异常同时出现时,由一个固定的优先级系统决定它们的顺序:复位(最高优先级)数据中止FIQIRQ预取中止未定义指令SWI(最低优先级)。4.1.3 初始化存储系统图 4.1 Remap 前的地址映射图ARM 具有非常灵活的存储器地址分配特性,就是启动 ROM 的地址重映射(remap)。系统在上电之后,紧接着就从地址 0 开始取得第一条指令的代码执行,所以地址 0 必须在上电的时候就存在可执行的正确代码,也就是地址 0 的地方应该是ROM 区,至少在上电之后的一小段时间内应该是 ROM 区。对于 ARM 而言,中断和异常的入口地址是 020H。但是因为 ROM 的访问速度相对较慢,每次中断发生后,都要从读取 ROM 上面的向量表开始

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!