1、信息工程学院课程设计(论文)湖 北 民 族 学 院信息工程学院DSP课程设计报告书题目: 基于TMS320VC5402的语音信号采集系统设计专 业: 电气工程及其自动化 班 级: 0307406班 学 号: 学生姓名: 指导教师: 黄 勇 2010 年 6 月 25 日信息工程学院课程设计任务书学 号 学生姓名 专业(班级)电气工程及其自动化(0307406)设计题目基于TMS320VC5402的语音信号采集系统设计设计技术参数时钟设计参数:芯片的主频为100MHZ;外部时钟频率只需要1020MHz AD转换设计参数:采样率fs=MCLK/(128*N) 或MCLK/(512*N)电平转换设计
2、参数:5V TTL器件输出驱动3.3V TTL器件(LVC)输入时,控制驱动器的输出不超过3.6V,3.3V TTL器件输出驱动5V TTL器件输入时,VIH和VIL电平分别是2V和0.8V 设计要求(1)绘制系统框图(VISIO);(2)包括电源设计、复位电路设计、时钟电路设计、存储器设计、A/D接口电路设计(P240)、JTAG接口设计等,用Protel软件绘制原理图和PCB图;(3)研究语音信号处理算法,并在MATLAB环境下仿真; (4)给出程序流程图,编写初始化程序及数据处理程序; 工作量7000字左右,图纸13张 。工作计划14周:图书馆查阅相关资料;15周:系统总体设计构思;16
3、周:系统详细设计;17周:整理形成设计报告。参考资料1杨进, 李平, 文玉梅, 等. 自适应供水管网泄漏检测定位仪器系统J . 2张勇, 曾炽祥, 周好斌, 陈滨. TM S320C5000 系列DSP 汇编语言程序设计 3杨进, 文玉梅, 李平. 自来水铸铁管道泄漏声信号频率特征研究J . 4胡剑波, 徐盛. 数字信号处理系统的应用和设计M . 5 刘益成。TMS320C54x DSP应用程序设计与开发。指导教师签字 年 月 日 学生姓名: 学号: 专业(班级): 0307406班 课程设计题目: 基于TMS320VC5402的语音信号采集系统设计 指导教师评语: 成绩: 指导教师: 年 月
4、 日信息工程学院课程设计成绩评定表摘 要在研究数字信号处理的基础上,提出了一个基于DSP TMS320VC5402和A/D转换芯片TLC320AD50的语音信号采集系统的设计。给出了该系统的总体设计方案,具体硬件电路,包括系统电源设计、复位电路设计、时钟电路设计、存储器设计、A/D接口电路设计、JTAG接口设计、DSP与A/D芯片的连接等,以及软件流程图。实验表明: 所设计的基于DSP的硬件和软件系统是一个很好的语音信号采集系统,该系统结构清晰,电路简洁,易于实现。关键词:语音信号;数据采集;DSP;TLC320AD50AbstractIn the study based on digital
5、 signal processing,proposed a design based on DSP TMS320VC5402 and A / D converter chip TLC320AD50 speech signal acquisition system.Gives the overall design scheme of the system, the hardware circuit including the system power supply design, the reset circuit design, clock circuits, memory design, A
6、 / D interface circuit, JTAG interface design,the connections of DSP and A / D chip and so on, and software flow chart. Experiments show that: the design based on DSP hardware and software systems is an excellent voice signal acquisition system, the system structure is clear, the circuit is simple a
7、nd easy to achieve.Key words: Voice signal; Data Acquisition; DSP;TLC320AD50- 26 -目 录1 任务提出与方案论证61.1TMS320VC5402介绍61.2TLC320AD50介绍102 总体设计112.1 DSP核心模块的设计112.2 AD转换模块123 详细设计133.1 硬件设计133.1.1 DSP芯片133.1.2 电源设计133.1.3 复位电路设计143.1.4 时钟电路设计153.1.5 程序存储器扩展设计153.1.6数据存储器扩展设计163.1.7 JTAG接口设计163.1.8 A/D接口电
8、路设计173.2 软件设计183.2.1 MATLAB 环境中的语音信号采集和处理仿真183.2.2系统软件设计194 总结25参考文献26 1 任务提出与方案论证20世纪50年代以来,随着数字信号处理各项技术的发展,语音信号处理技术得到不断提高, 语音合成、语音识别、语音记录与语音控制等技术已开始逐步成熟并得到应用。在语音信号处理过程中, 要实现语音信号处理技术的精确性、实时性目的,语音信号采集和无误差存储成为语音信号处理中的前提。TMS320VC5402是TI公司推出的定点数字信号处理器,它采用修正的哈佛结构,包括1个程序存储总线、3个数据存储总线和4个地址总线,这种结构允许同时执行程序指
9、令和对数据操作, 运行速度快,单周期定点指令执行时间为10ns,远高于语音信号采集和处理的要求。在语音信号采集中, 模拟信号向数字信号转换(ADC)的精度和实时性对后续信号处理过程起到了重要作用。设计中采用TLC320AD50完成语音信号的A/D转换。TLC320AD50是TI公司提供的一款16 bit同步串口A/D和D/A转换芯片,ADC之后有1个抽取滤波器以提高输入信号的信噪比, 其采样频率最高可达22.5 Kb/s,满足语音信号处理中关于采样频率的要求。1.1 TMS320VC5402介绍TMS320VC5402是基于一个先进的哈佛结构:一个指令存储总线和三个数据存储总线。此处理器提供一
10、个具有高平行度的算术逻辑单元、特殊功效的硬件逻辑、片上存储器和附加的外围芯片。操作灵活和快速的DSP原理及专用的指令系统。独立的程序和数据空间允许他同时并行地访问指令和数据,提供了高度的平行性。在一个独立的周期内可以同时执行一次写操作和两次读操作。并行的指令存储和特殊功用的指令都可以完全的被在一个机器周期内执行。数据可以在程序空间或数据空间内传输(见图1.1-1输入输出时序图)。这一并行操作是算术、逻辑以及二进制运算的强大的机制。另外,C5402还包括控制机制从而可以处理中断、循环、程序调用。图1.1-1 输入输出时序图C5402设备提供片上ROM和RAM来帮助系统完成执行任务和系统的综合。C
11、5402映射到片上一块4K16bit ROM。用户可以根据自己的需要来设置ROM的编程实现自己应用目的。安全选项可以用来保护自定义的ROM。系统的引导可以在C5402的片上ROM中利用。这段引导程序在上电时可以主动的把用户代码程序从片外存储器中装载进来。但如果引脚MP/MC在硬件复位时被采样低电平,那么程序将从ROM的FF8h0处开始执行。这个区域包含了启动引导程序的分支指令。C5402引导提供了不同装载程序的方法以便适应不同系统的需求:并行的8位时16位EPROM并行的8位I/O空间或16位模式8位或时16位的串口模式主机端口引导。图1.1-2 TMS320VC5402的引脚图中断和陷阱向量
12、都被定义地址到程序空间。这些向量是软的-也就是说当遇到陷阱时,处理器的PC装入陷阱向量从而让处理器去处理向量位置处的程序。每个向量地址都有四个字空间被保留,以便适应延迟的分叉指令,不管是一字指令还是两字指令,只要是允许中断分支服务与正常的服务。在系统复位时,复位、中断和陷阱向量都被映射到程序地址空间FF80h。然而,这些向量可以被重新映射到128字页的程序空间当系统复位时。这将pmtr寄存器装载中断向量标志位被完成。在完成装载IPTR之后,任何用户中断或陷阱向量将会被映射到新的128数字的页面上来。C5402在程序空间规划时用一个可扩展的页存储器,它允许访问1024K的程序存储器空间数据存储器
13、空间用于存储需要程序处理的数据或程序处理后的结果。通过对处理器方式状态寄存器PMST的DROM位的设置,将片内ROM配置在数据存储器空间(DROM=1),这样,可以用指令将片内ROM作为数据存储器中的数据ROM来读取。复位时,DROM位被清0;64K字的数据存储器空间包括数据存储器映像寄存器,0000H001FH是常用的CPU寄存器地址,0020H005FH是片内外设寄存器的地址。I/O空间用于与外部存储器映像的外设接口,也可以用于扩展外部数据存储空间,除程序存储器空间和数据存储器空间外,C54x系列器件还提供了I/O存储器空间,利用I/O空间可以扩展外部存储器。I/O存储器空间为64K字(0
14、000hFFFFh),有两条指令PORTR和PORTW可以对I/O存储器空间操作,读写时序与程序存储器空间和数据存储器空间有很大不同。TMS320VC5402存储器分配情况如图1.1-3存储器分配图所示,当存储空间超过64K之后,TMS320VC5402采用了分页机制,进行程序扩展见图1.1-4存储器分页机制所示。图1.1-3 存储器分配图图1.1-4存储器分页机制1.2 TLC320AD50介绍TLC320AD50(以下简称AD50 )是TI生产的多媒体音频编解码器芯片,它集成了16位A/D和D/A 转换器,采样速率最高可达22.05KHz,其采样速率可通过DSP编程来设置。在AD50内部A
15、DC之后有抽样滤波器,以提高输入信号的信噪比,在DAC之前有插值滤波器,以保证输出信号平滑。AD50内部有7个数据和控制寄存器,用于编程设置它们的工作状态。由于语音信号的频率范围在200Hz23400Hz之间,采样率一般设定为8kHz,所以用AD50做AD转换器非常合适。AD50的工作方式和采样频率均通过串口编程来实现。由于转换的数据和控制数据是通过同一串行口进行传输的,所以AD50中有首次通信和二次通信。首次通信专用于转换数据的传送,其时序如图2所示。二次通信则用来设置和读出寄存器的值,所有的寄存器都在二次通信时编程。启动二次通信有两种方法,一种是在FC上加高电平,第二种是将15位方式在首次
16、通信的D IN的LSB位置为1。AD50完成语音信号采集后,在DSP中进行相应的处理算法,语音信号经处理再从AD50输出。2 总体设计基于TMS320VC5402的语音信号采集系统的结构如图21所示,该系统的中央处理单元采用美国TI(德州仪器)公司的高性能定点数字信号处理芯片TMS320VC5402,TMS320VC5402是TI公司推出的定点数字信号处理器,它采用修正的哈佛结构,包括1个程序存储总线、3个数据存储总线和4个地址总线,这种结构允许同时执行程序指令和对数据操作, 运行速度快,单周期定点指令执行时间为10ns。在语音信号采集中, 模拟信号向数字信号转换(ADC)的精度和实时性对后续
17、信号处理过程起到了重要作用。设计中采用TLC320AD50完成语音信号的A/D转换。TLC320AD50是TI公司提供的一款16 bit同步串口A/D和D/A转换芯片,ADC之后有1个抽取滤波器以提高输入信号的信噪比, 其采样频率最高可达22.5 Kb/s,满足语音信号处理中关于采样频率的要求。图2-1系统结构框图2.1 DSP核心模块的设计TMS320VC5402是整个数据采集系统中,核心处理部分。把缓存器的数据转存到海量存储器中,并对CPLD逻辑的工作方式,工作时钟进行控制,同时还完成与上位机的通信。TMS320VC5402有20根地址线,16根数据线,可以寻址1M的地址空间,在这里,选用
18、TMS320VC5402的数据空间用做SRAM的扩展,选用TMS320VC5402的I/O空间用做FLASH扩展。 DSP核心模块充当整个系统的CPU的功能,除了承担对AD转换器送来的信号做相应的处理之外,还驱动RS-232串行通信链路将相应的数据及时的传到上位机上以备做之后的相关处理或计算,这就要求DSP芯片的处理能力相当的强大和速度必须与ADC相匹配,这一点TMS320VC5402完全有能力做到。2.2 AD转换模块AD转换模块是整个系统的主要部分,它接收来自外部的信号或模拟数据,然后经过处理转换成数字信号传递给CPU做后续的处理。设计中采用TLC320AD50完成语音信号的A/D转换。T
19、LC320AD50是TI公司提供的一款16 bit同步串口A/D和D/A转换芯片,ADC之后有1个抽取滤波器以提高输入信号的信噪比, 其采样频率最高可达22.5 Kb/s,满足语音信号处理中关于采样频率的要求。TLC320AD50(以下简称AD50 )是TI生产的多媒体音频编解码器芯片,它集成了16位A/D和D/A 转换器,采样速率最高可达22.05KHz,其采样速率可通过DSP编程来设置。在AD50内部ADC之后有抽样滤波器,以提高输入信号的信噪比,在DAC之前有插值滤波器,以保证输出信号平滑。AD50内部有7个数据和控制寄存器,用于编程设置它们的工作状态。由于语音信号的频率范围在200Hz
20、23400Hz之间,采样率一般设定为8kHz,所以用AD50做AD转换器非常合适。AD50的工作方式和采样频率均通过串口编程来实现。由于转换的数据和控制数据是通过同一串行口进行传输的,所以AD50中有首次通信和二次通信。首次通信专用于转换数据的传送,其时序如图2所示。二次通信则用来设置和读出寄存器的值,所有的寄存器都在二次通信时编程。启动二次通信有两种方法,一种是在FC上加高电平,第二种是将15位方式在首次通信的D IN的LSB位置为1。AD50完成语音信号采集后,在DSP中进行相应的处理算法,语音信号经处理再从AD50输出。3 详细设计由系统结构框图可知,系统主要包括实现模/数转换的A/D模
21、块、掉电时存放程序的Flash模块、为DSP提供电源的外部电源模块、时钟模块,复位电路模块、实现程序下载的JTAG接口模块以及外接扩展存储器等几个部分.系统结构框图如图2-1所示。本章将详细介绍各模块的硬件设计以及软件设计。3.1 硬件设计3.1.1 DSP芯片作为DSP家庭高性价比代表的16位定点DSP芯片,C5402适用于语音通信等实时嵌入应用场合。与其它C54X芯片一样,C5402具有高度灵活的可操作性和高速的处理能力。其性能特点如下:操作速率可达100MIPS;具有先进的多总线结构,三条16位数据存储器总线和一条程序存储器总线;40位算术逻辑单元(ALU),包括一个40位桶形移位器和两
22、个40位累加器;一个1717乘法器和一个40位专用加法器,允许16位带/不带符号的乘法;整合维特比加速器,用于提高维特比编译码的速度;单周期正规化及指数译码;8个辅助寄存器及一个软件栈,允许使用业界最先进的定点DSP C语言编译器;数据/程序寻址空间为1M16bit,内置4K16bit ROM和16K16bit RAM;内置可编程等待状态发生器、锁相环(PLL)时钟产生器、两个多通道缓冲串口、一个与外部处理器通信的8位并行HPI口、两个16位定时器以及6通道DMA控制器且低功耗。与C54X系列的其它芯片相比,C5402具有高性能、低功耗和低价格等特点。它采用6级流水线,且当RPT(重复指令)时
23、,一些多周期的指令就变成了单周期的指令;芯片内部RAM和ROM可根据PMST寄存器中的OVLY和DROM位灵活设置。这些都有利于算法的优化。3.1.2 电源设计为了降低芯片功耗,C54x系列芯片大部分都采用低电压设计,并且采用双电源供电,即内核电源CVDD:采用1.8V,主要为芯片的内部逻辑提供电压,包括CPU、时钟电路和所有的外设逻辑;I/O电源DVDD:采用3.3V,主要供I/O接口使用。可直接与外部低压器件接口,而无需额外的电平变换电路。DSP芯片采用的供电方式,主要取决于应用系统中提供什么样的电源。在实际中,大部分数字系统所使用的电源可工作于5V或3.3V,本设计采用TI公司提供的双电
24、源芯片: TPS73HD318电源的最大输出电流为750mA,并且提供两个宽度为200ms的低电平复位脉冲。电路图如图3.1-1所示。图3.1-1由TPS73HD318芯片组成的双电源电路3.1.3 复位电路设计TMS320VC5402的复位输入引脚RS为处理器提供了一种硬件初始化的方法,它是一种不可屏蔽的外中断,可在任何时候对TMS320VC5402进行复位。当系统上电后,RS引脚应至少保持5个时钟周期稳定的低电平,以确保数据、地址和控制线的正确配置。复位后(RS回到高电平),CPU从程序存储器的FF80H单元取指,并开始执行程序。本设计采用由TPS3707-33组成的自动复位电路(如图3.
25、1-2)。图3.1-2由TPS3707-33芯片组成的自动复位电路3.1.4 时钟电路设计时钟电路用来为C54x芯片提供时钟信号,由一个内部振荡器和一个锁相环PLL组成,可通过芯片内部的晶体振荡器或外部的时钟电路驱动。利用DSP芯片内部提供的晶振电路,在DSP芯片的X1、X2之间连接晶体振荡器。使用芯片内部的振荡器在芯片的X1和X2/CLKIN引脚之间接入一个晶体,用于启动内部振荡器。时钟电路图如图3.1-3。 C1C2晶振 C1=C2=20pF图3.1-3时钟电路3.1.5 程序存储器扩展设计FLASH存储器用以扩展程序存储器 AT29LV1024是1M位的FLASH存储器FLASH存储器与
26、EPROM相比,具有更高的性能价格比,而且体积小、功耗低、可电擦写、使用方便,并且3.3V的FLASH可以直接与DSP芯片连接。地址线:A0A15;数据线:I/O0I/O15;控制线:片选信号;编程写信号;输出使能信号。扩展连接图如图3.1-4。图3.1-4程序存储器扩展电路3.1.6数据存储器扩展设计要实现语音数据和系统程序的存储,TMS320VC5402必须有外接扩展存储器。TMS320VC5402 的速度为100 MI/s,为保证DSP运行速度,需要外部存储器的速度接近10ns。系统选择ICSI64LV16作为外部存储器,其容量64K字16 bit。其硬件连接图如图3.1-5所示。图3.
27、1-5数据存储器扩展电路3.1.7 JTAG接口设计在系统中,通过JTAG测试口访问和调试DSP芯片。JTAG是一种国际标准测试协议(IEEE 1149.1兼容),针对现代超大规模集成电路测试、检验困难而提出的基于边界扫描机制和标准测试存取口的国际标准。标准JTAG测试端口包括4个必选引脚和一个可选的异步JTAG的复位引脚TRST,分别是工作模式选择引脚TMS,串行数据输入引脚TDI,串行数据输出引脚TDO,端口工作时钟引脚TCK。JTAG接口引脚连接如图3.1-6所示。图3.1-6 JTAG接口引脚连接图3.1.8 A/D接口电路设计A/D转换模块是整个系统的主要部分,它接收来自外部的信号或
28、模拟数据,然后经过处理转换成数字信号传递给CPU做后续的处理。TLC320AD50是一款SIGMA- DELTA 型单片音频接口芯片, 通过串行口与DSP 或其它设备通信。它内部集成了16 位的D/A 和A/D 转换器, 采样速率最高可达22.05 Kb/s, 其采样速率可通过DSP 编程来设置。设置AD50时,串行通信数据最低为高电平。在DAC 之前有一个插值滤波器以保证输出信号平滑, ADC 之后有一个抽取滤波器以提高输入信号的信噪比。AD50 的发送和接收可以同时进行。参考AD50 的产品手册文献, 得出TMS320VC5402与TLC320AD50的连接方法如图3.1-7所示图3.1-
29、7 TLC320AD50与 TMS320VC5402 串行口的连接3.2 软件设计3.2.1 MATLAB 环境中的语音信号采集和处理仿真MATLAB 是美国Math Works 公司推出的一种面向工程和科学计算的交互式计算软件,在MATLAB 环境中,可以通过多种编程方法驱动声卡实现对语音信号的采集和播放,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析使用MATLAB 语言编程可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种分析图的呈现
30、等等下面给出一个MATLAB 程序,读入一个采样频率为 22.050 kHz、16 位单声道的WAV 文件,然后播放并做语音信号的波形图、频谱图和倒谱图(见图3.2-1),具体程序如下:y,fs = wavread(c:wavwav1.wav); %读一个已保存的WAV 语音文件wavplay(y); %播放语音文件t=(0:length(y)-1)/fs; %计算语音播放时间subplot(3,1,1); %确定语音波形的显示位置plot(t,y); %画波形图legend(波形图);xlabel(时间(s); %X 轴的标题ylabel(幅度); %Y 轴的标题x=fft(y.*hammi
31、ng(length(y); %加hamming 窗快速傅立叶变换fm=5000*length(x)/fs; %限定频率范围f=(0:fm)*fs/length(x); %确定频率刻度subplot(3,1,2); %确定语音波形的显示位置plot(f,20*log10(abs(x(1:length(f)+eps); %画频谱图legend(频谱图);xlabel(频率(Hz));ylabel(频谱幅度(dB));c=fft(log(abs(x)+eps); % 倒频谱计算ms1=fs/1000;ms20=fs/50;q=(ms1:ms20)/fs; %确定倒频刻度subplot(3,1,3);
32、plot(q,abs(c(ms1:ms20); %画倒谱图legend(倒谱图);xlabel(倒频());ylabel(倒频谱幅度);图3.2-1 MATLAB 环境中做出的语音信号的波形图、频谱图和倒谱图3.2.2系统软件设计主程序流程图如图3.2-2。 图3.2-2主程序流程图DSP初始化程序:#include timothy.h#include math.hint sin_data256;int tri_data256;ioport int port9100;ioport int port8000;int keycode=0x0000;/the code number of the k
33、ey;void main(void)int i;ST0=0x1800;ST1=0x4800;/disable all maskable interrupt;SWWSR=0x7fff;/no wait cycle;CLKMD=0x1007;IFR=0xffff;IMR=0x0007;asm( RSBX INTM);/open the interrupt;for(i=0;i255;i+)/generate the sin_data;sin_datai=255*sin(3.1415*i/256);129for(i=0;i256;i+)/generat the tri_data;tri_datai=i
34、;for(;)if(keycode=0xf410)/key F1;for(i=0;i255;i+)port9100=sin_datai;else if(keycode=0xf411)for(i=1;i256;i+)port9100=tri_datai;interrupt void bobo_int1()keycode=port8000;数据处理程序:#define DSYNC_REVT1 0x05 /* sync to McBSP1 receive event */#define AUTOINIT_ENABLE 0x01 /* auto-initialization mode is enabl
35、ed */#define DINM_ENABLE 0x01 /* DMA interrupt is enabled */#define IMOD_HALFBLOCK 0x01 /* DMA Int occurs each half block*/#define CTMOD_DEC 0x00 /* Decrement counter mode*/#define INDEXMODE_NOMOD 0x00 /* No modify (Index mode)*/#define INDEXMODE_INC 0x01 /* Post increment index mode*/#define HIGH_P
36、RIORITY 0x01 /* Highest priority for DMA channel */#define INTSEL_01 0x01 /*RINT0,XINT0,RINT2,XINT2,DMAC2,DMAC3, */* DMAC4,DMAC5 */#define DSYNC_XEVT1 0x06 /* sync to McBSP1 transmit event*/#define IMOD_BLOCK 0x00 /* DMA Int occurs at the end of the block*/#define CTMOD_DEC 0x00 /* Decrement counter
37、 mode*/#define SPACE_DATA 0x01 /* DMA Data Space Select*/* Memory-Mapped Register Definitions */#define DMPREC (*(volatile unsigned int*)(0x0054u)#define DMSBA (*(volatile unsigned int*)(0x0055u)#define DMSDI (*(volatile unsigned int*)(0x0056u)#define DMSDN (*(volatile unsigned int*)(0x0057u)#define
38、 IMR (*(volatile unsigned int*)(0x0000u)#define IFR (*(volatile unsigned int*)(0x0001u)#define XPC (*(volatile unsigned int*)(0x001eu)#define PMST (*(volatile unsigned int*)(0x001du)#define BSCR (*(volatile unsigned int*)(0x0029u)#define DRR1_ADDR(port) (port ? 0x41 : 0x21)#define DXR1_ADDR(port) (p
39、ort ? 0x43 : 0x23)#define TCR_ADDR(port) (port ? 0x32 : 0x26)#define TCR(port) (*(volatile unsigned int*)TCR_ADDR(port)#define PRD_ADDR(port) (port ? 0x31 : 0x25)#define PRD(port) (*(volatile unsigned int*)PRD_ADDR(port)/* Sub Address Register Definitions */#define DMSRC_SUBADDR 0x00#define DMDST_SU
40、BADDR 0x01#define DMCTR_SUBADDR 0x02#define DMSEFC_SUBADDR 0x03#define DMMCR_SUBADDR 0x04#define DMSRCP_SUBADDR 0x1E#define DMDSTP_SUBADDR 0x1F#define DMIDX0_SUBADDR 0x20#define DMIDX1_SUBADDR 0x21#define DMFRI0_SUBADDR 0x22#define DMFRI1_SUBADDR 0x23#define DMGSA_SUBADDR 0x24#define DMGDA_SUBADDR 0
41、x25#define DMGCR_SUBADDR 0x26#define DMGFR_SUBADDR 0x27/* Channel Definitions */#define DMA_CH0 0#define DMA_CH1 1#define DMA_CH2 2#define DMA_CH3 3#define DMA_CH4 4#define DMA_CH5 5/* DMA Channel Flags for IMR/IFR */#define DMAC0 6#define DMAC1 7#define DMAC2 10#define DMAC3 11#define DMAC4 12#defi
42、ne DMAC5 13/* Register Bit Fields */#define TDDR 0#define TSS 4#define TRB 5/* Macro Definitions */* DMA Framecount Set */#define DMA_FRAMECOUNT(chan, value) DMSBA = (chan * 5) + DMSEFC_SUBADDR;DMSDN = (DMSDN & 0xFF00u) | value;/* DMA Channel Enable */#define DMA_ENABLE(chan) DMPREC |= (1 chan);#def
43、ine INTR_GLOBAL_ENABLEasm(tRSBX INTM)#define INTR_CLR_FLAG(flag)IFR |= (0x1u flag);#define INTR_ENABLE(flag)IMR |= (0x1u) flag);#define TIMER_HALT(port)TCR(port) |= (0x1u TSS)#define TIMER_START(port)TCR(port) = (TCR(port) & (0x1u) TSS) | (0x1u TRB)#define TIMER_RESET(port) TIMER_HALT(port);TCR(port
44、) &= 0xFFF0u;PRD(port) = 0xffffu;TIMER_START(port); /* DMA Reset All */static inline void dma_reset_all( void )unsigned short channel;DMPREC = 0x0000u;DMSBA = DMSRC_SUBADDR;for (channel= 0;channel = 4; channel+)DMSDI = 0x0000u; /srcDMSDI = 0x0000u; /dstDMSDI = 0x0000u; /ctrDMSDI = 0x0000u; /sefcDMSDI = 0x0000u; /mcrDMSBA = DMSRCP_SUBADDR;DMSDI = 0x0000u; /*DMSRCP*/DMSDI = 0x0000u; /*DMDSTP*/DMSDI = 0x0000u; /*DMIDX0*/DMSDI = 0x0000u; /*DMIDX1*/DMSDI = 0x0000u; /*DMFRI0*/DMSDI = 0x0000u; /*DMFRI1*/DMSDI = 0x0000u; /*DMGSA*/DMSDI = 0x0000u; /*DMGDA*/DMSDI = 0x0000