资源描述
湖北民族学院科技学院信息工程系DSP课程设计报告书题目:基于TMS320VC540的语音信号米集系统设计专业:电气工程自动化班级:学号:学生姓名:指导老师:2011年4月29日信息工程学院课程设计任务书学号电气工程及其自 学生姓名专业(班级)电气工/程及其曰动化()设计题目基于TMS320VC540的语音信号米集系统设计设 计 技 术 参 数时钟设计参数:芯片的主频为 100MHZ外部时钟频率只需要 1020MHzAD转换设计参数:米样率 fs=MCLK/(128*N) 或MCLK/(512*N)电平转换设计参数:5V TTL器件输出驱动3.3V TTL器件(LVC)输入时,控制驱动器 的输出不超过3.6V , 3.3V TTL器件输出驱动5V TTL器件输入时,VIH和VIL电平分 别是2V和0.8V设 计 要 求(1)绘制系统框图(VISIO) ;( 2)包括电源设计、复位电路设计、时钟电路设计、存储器设计、A/D接口电路设计(P240)、JTA徳口设计等,用Protel软件绘制原理图和PCB图;(3 )研究语音信号处理算法,并在MATLA环境下仿真;(4 )给出程序流程图,编写初始化程序及数据处理程序;工 作 量7000字左右,图纸 12张。工 作 计 划8周:图书馆查阅相关资料;9周:系统总体设计构思;9周:系统详细设计;10周:整理形成设计报告。参 考 资 料1 乔瑞萍,崔涛,张芳娟.TMS320C54X DSP原理及应用 西安西安科技大学出版社20052 彭启琮,李玉柏,管庆.DSP技术的发展与应用北京高等教育出版社20023 苏涛,蔡建隆,何学辉 .DSP接口电路设计与编程西安 西安电子科技大学出版社20024 王世一.数字信号处理M.北京理工大学出版.1997.65 程佩青.数字信号处理教程M.清华大学出版社.2001.86 苏涛,蔡建隆,何学辉 .DSP接口电路设计与编程西安 西安电子科技大学出版社2002指导教师签字2011年4月29日信息工程系课程设计成绩评定表学生姓名:学号:专业(班级):课程设计题目:基于TMS320VC5402的语音信号米集系统设计指导教师评语:成绩:指导教师:年 月曰1 概述 51.1TMS320VC5402 的介绍 51.2TLC320AD50 介绍 62 系统设计 62.1 DSP 核心模块的设计 72.2 AD 转换模块 83 详细设计 83.1 硬件设计 83.1.1 DSP 芯片 83.1.2 电源设计 93.1.3 复位电路设计 93.1.4 时钟电路设计 103.1.5 程序存储器扩展设计 113.1.6 数据存储器扩展设计 113.1.7 JTAG 接口设计 123.1.8 A/D 接口电路设计 133.2 软件设计 143.2.1 系统软件设计 143.2.2 MATLAB 环境中的语音信号采集和处理仿真 194 总结 20 参考文献 21摘要在研究数字信号处理的基础上,做一个基于DSP TMS320VC5402 和 A/D 转换芯片TLC320AD50的语音信号采集系统的设计。给出了该系统的设计方案,具体硬件电路有系统 电源设计、复位电路设计、时钟电路设计、存储器设计、 A/D 接口电路设计、 JTAG 接口设 计、DSP与A/D芯片的连接等,以及软件流程图。实验表明:所设计的基于DSP TMS320VC5402的硬件和软件系统是一个很好的语音信号采集系统 ,该系统结构清晰,电路 简洁,易于实现。关键词: 语音信号;数据采集; TMS320VC540;2 TLC320AD50AbstractIn the study, based on digital signal processing, based on DSP TMS320VC5402 and do a A / D conversion chip TLC320AD50 speech signal acquisition system. Given the design of the system, specifically designed hardware system power supply circuit, the reset circuit, clock circuit design, memory design, A / D interface circuit, JTAG interface design, DSP and A / D chip connections, as well as software flow chart. Experiments show that: the design of DSP TMS320VC5402-based hardware and software system is a very good speech signal acquisition system, the system structure is clear, the circuit is simple and easy to implement.Key words: speech signal 。 data collection 。 TMS320VC5402 。 TLC320AD501概述20世纪50年代以来,随着数字信号处理各项技术的发展,语音信号处理技术得到不 断提高,语音合成、语音识别、语音记录与语音控制等技术已开始逐步成熟并得到应用。 在语音信号处理过程中,要实现语音信号处理技术的精确性、实时性目的,语音信号采集 和无误差存储成为语音信号处理中的前提1.1TMS320VC5402 的介绍TMS320VC540是TI公司推出的定点数字信号处理器,TMS320VC540是基于一个先进的哈佛结构:一个指令存储总线和三个数据存储总线。此处理器提供一个具有高平行度的算术逻辑单元、特殊功效的硬件逻辑、片上存储器和附加的外围芯片。操作灵活和快速的DSP原理及专用的指令系统。独立的程序和数据空间允许他同时并行地访问指令和数据,提供了高度的平行性。在一个独立的周期内可以同时执行一次写操作和两次读操作。并行的指令存储和特殊功用的指令都可以完全的被在一个机器周期内执行。这一并行操作是算术、逻辑以及二进制运算的强大的机制。另外,C5402还包括控制机制从而可以处理中断、循环、程序调用。C5402设备提供片上ROI和 RAM来帮助系统完成执行任务和系统的综合。C5402的芯片图如1 1所示。1 2 143 1 4 41311321331341361 3 813 91405一8|91 01 11051071231 2 212111 911 811 711 511 4113103102100DDACDDACDDACDDACDDAC ccccDDAC NNNN0 1 2 3 4 5 67892 10mKCAr987 65 4 2 3 1 0 DDDDDDDDDDDDAD DDAD DDAD DDAD DDAD DDAD3N2N1NUNG UNG UNG UNG UNG UNG UNGDNGILTNGn nrLTNGn7_uh6UHSUH4UH3UH2UH1UHBHDNG3d mklc2d mklc ID mklc UNG2WQHr118 91543|69 6”I3851RKLCB111豊 BH/TOUTTOUT0 CLKOUTCIN/X2X1BLCKR0BFSROBDROBCLKX0BFSXOBDXOTRSTTCKTMSTDITDOEMOEMU1 /OREADYDSR/WIO STR BMSTRBHOLD-HOLDA iMSCIA QCCCCCCCCCCNCCC5182949796414345485987888986831920212223262999图 1 1 TMS320VC54021.2TLC320AD50 介绍TLC320AD50以下简称 AD50 )是TI生产的多媒体音频编解码器芯片,它集成了 16位A/D和D/A转换器,采样速率最高可达 22.05KHz,其采样速率可通过DSP编程来设置。在AD50内部ADC之后有抽样滤波器,以提高输入信号的信噪比,在DAC之前有插值滤波器,以 保证输出信号平滑。AD50内部有7个数据和控制寄存器,用于编程设置它们的工作状态。由于语音信号的频率范围在200Hz23400Hz之间,采样率一般设定为 8kHz,所以用AD50做AD转换器非常合适。AD50的工作方式和采样频率均通过串口编程来实现。由于转换的数据 和控制数据是通过同一串行口进行传输的,所以AD50中有首次通信和二次通信。首次通信专用于转换数据的传送。二次通信则用来设置和读出寄存器的值,所有的寄存器都在二次通信时编程。启动二次通信有两种方法,一种是在FC上加高电平,第二种是将15位方式在首次通信的D IN的LSB位置为1。AD50完成语音信号采集后,在DSP中进行相应的处理算法, 语音信号经处理再从 AD50输出。TLC320AD50如图1-2123456789101 1121314REFPFILTREFMMO NOUTAUXPAVssAUXMAVDDINPTLC3 2 0AD5UTM INMOUTPAVDD (pll)M/S#AVss(p ll)FSD#DVDDFS#DVssSCLKDOUTMC LKDINFCFLAG PW RDW N#ALTDATARESET图 1-2 TLC320AD5028272625242322212019181716152系统设计该系统的中央处理单元采用美国TI(德州仪器)公司的高性能定点数字信号处理芯片TMS320VC5402 TMS320VC5402是TI公司推出的定点数字信号处理器,它采用修正的哈佛结构,包括1个程序存储总线、3个数据存储总线和 4个地址总线,这种结构允许同时执 行程序指令和对数据操作,运行速度快,单周期定点指令执行时间为10ns。在语音信号采集中,模拟信号向数字信号转换(ADC的精度和实时性对后续信号处理过程起到了重要作用。设计中采用 TLC320AD50完成语音信号的 A/D转换。TLC320AD50是 TI公司提供的一款16 bit同步串口 A/D和D/A转换芯片,ADC之后有1个抽取滤波器以提高输入信号的信噪比,其采样频率最高可达22.5 Kb/s,满足语音信号处理中关于采样频率的要求。基于TMS320VC540的语音信号采集系统的结构如图2 - 1所示,电源复位0JTAGADCTMS320VC5402SRAM时钟Flash图2-1语音信号采集系统的结构图2.1 DSP核心模块的设计作为DSP家族高性价比代表的 16位定点DSP芯片,C5402适用于语音通信等实时嵌 入应用场合。与其它C54X芯片一样,C5402具有高度灵活的可操作性和高速的处理能 力。其性能特点如下:操作速率可达100MIPS ;具有先进的多总线结构,三条16位数据存储器总线和一条程序存储器总线;40位算术逻辑单元(ALU),包括一个40位桶形移位器和两个40位累加器;一个17X 17乘法器和一个 40位专用加法器,允许 16位带/不带符号的 乘法;整合维特比加速器,用于提高维特比编译码的速度;单周期正规化及指数译码;8个辅助寄存器及一个软件栈,允许使用业界最先进的定点DSP C语言编译器;数据/程序寻址空间为1M x 16bit,内置4K x 16bit ROM和16kx 16bit RAM ;内置可编程等待状态发生 器、锁相环(PLL)时钟产生器、两个多通道缓冲串口、一个与外部处理器通信的8位并行HPI 口、两个16位定时器以及6通道DMA控制器且低功耗。与C54X系列的其它芯片相 比,5402具有高性能、低功耗和低价格等特点。它采用6级流水线,且当 RPT(重复指令)时,一些多周期的指令就变成了单周期的指令;芯片内部RAM和ROM可根据PMST寄存器中的OVLY和DROM位灵活设置。这些都有利于算法的优化。TMS320VC5402是整个数据采集系统中,核心处理部分。把缓存器的数据转存到海量 存储器中,并对 CPLD逻辑的工作方式,工作时钟进行控制,同时还完成与上位机的通 信。TMS320VC5402有20根地址线,16根数据线,可以寻址 1M的地址空间,在这里, 选用TMS320VC5402的数据空间用做 SRAM的扩展,选用 TMS320VC5402的I/O空间用 做FLASH扩展。DSP核心模块充当整个系统的CPU的功能,除了承担对 AD转换器送来的信号做相应的处理之外,还驱动 RS-232串行通信链路将相应的数据及时的传到上位机上以备做之后 的相关处理或计算,这就要求DSP芯片的处理能力相当的强大和速度必须与ADC相匹配,这一点TMS320VC5402完全有能力做到。2.2 AD 转换模块AD 转换模块是整个系统的主要部分,它接收来自外部的信号或模拟数据,然后经过处理转换成数字信号传递给CPU做后续的处理。设计中采用TLC320AD50完成语音信号的A/D转换。TLC320AD50是 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 个数据和控制寄存器 , 用于编程设置它们的工作状态。 由于语音信号的频率范围在200Hz23400Hz之间,采样率一般设定为 8kHz,所以用AD50做AD转换器非常合适。AD50的工作方式和采样频率均通过串口编程来实现。由于转换的数据 和控制数据是通过同一串行口进行传输的,所以AD50中有首次通信和二次通信。首次通信专用于转换数据的传送 ,其时序如图 2 所示。二次通信则用来设置和读出寄存器的值 ,所有 的寄存器都在二次通信时编程。启动二次通信有两种方法,一种是在FC上加高电平,第二种是将15位方式在首次通信的 D IN的LSB位置为1。AD50完成语音信号采集后,在DSP中进 行相应的处理算法,语音信号经处理再从 AD50输出。3 详细设计由系统结构框图可知,系统主要包括实现模/数转换的 A/D 模块、掉电时存放程序的Flash模块、为 DSP提供电源的外部电源模块、时钟模块,复位电路模块、实现程序下载 的JTAG接口模块以及外接扩展存储器等几个部分 系统结构框图如图 2-1所示。本章将详 细介绍各模块的硬件设计以及软件设计。3.1 硬件设计3.1.1 DSP 芯片作为DSP家庭高性价比代表的 16位定点DSP芯片,C5402适用于语音通信等实时嵌入 应用场合。与其它 C54X 芯片一样 ,C5402 具有高度灵活的可操作性和高速的处理能力。其 性能特点如下:操作速率可达100MIPS具有先进的多总线结构,三条16位数据存储器总线和一条程序存储器总线;40位算术逻辑单元(ALU),包括一个40位桶形移位器和两个 40位累加器;一个 17X 17乘法器和一个 40位专用加法器,允许16位带/不带符号的乘法;整合维特比加速器,用于提高维特比编译码的速度。单周期正规化及指数译码;8 个辅助寄存器及一个软件栈,允许使用业界最先进的定点DSP C语言编译器;数据/程序寻址空间为1MX 16bit,内置 4KX 16bit ROM 和16KX 16bit RAM ;内置可编程等待状态发生 器、锁相环(PLL)时钟产生器、两个多通道缓冲串口、一个与外部处理器通信的8位并行HPI 口、两个16位定时器以及 6通道DMA控制器且低功耗。与 C54X系列的其它芯片相比,C5402具有高性能、低功耗和低价格等特点。它采用6级流水线,且当RPT(重复指令)时,一些多周期的指令就变成了单周期的指令;芯片内部RAM和ROM可根据PMST寄存器中的OVLY和DROM位灵活设置。这些都有利于算法的优化。3.1.2电源设计为了降低芯片功耗,C54x系列芯片大部分都采用低电压设计,并且采用双电源供电,即内核电源 CVDD采用1.8V,主要为芯片的内部逻辑提供电压,包括CPU时钟电路和所有的外设逻辑;I/O电源DVDD采用3.3V,主要供I/O接口使用。可直接与外部低压器件DSP芯片采用的供电方式,主要取决于应用系统中提5V或3.3V,本设计 750mA并且提供两接口,而无需额外的电平变换电路。供什么样的电源。在实际中,大部分数字系统所使用的电源可工作于 采用TI公司提供的双电源芯片:TPS73HD318电源的最大输出电流为个宽度为200ms的低电平复位脉冲。电路图如图3.1.2所示。5V10uf 0.1 uf61 .1 K43&1 15501K1210Green,IINIR ESET#,IIN1 OUTIEN #1 OUT,IGND1 FB/SENSE2IN2 RESET#,2IN2 OUT,2EN#2 OUT 2GND2SENSE.NCNC NCNCNCNC.NCNCNCNCNCNC282322919TPS7 3HD3 181278131424251516202126271 7181 Oufw10uf 丁二47uf47uf1.8 Vw1N41481N4 1483.3 V1N41481N4 148图3.1.2电源设计图3.1.3复位电路设计TMS320VC5402的复位输入引脚 RS为处理器提供了一种硬件初始化的方法,它是一种不可屏蔽的外中断,可在任何时候对 TMS320VC5402进行复位。当系统上电后,RS引脚应至少保持5个时钟周期稳定的低电平,以确保数据、地址和控制线的正确配置。复位后(RS回到高电平),CPU从程序存储器的FF80H单元取指,并开始执行程序。本设计采用由TPS3707-33组成的自动复位电路(如图 3.1-3 )。DVDDCVDDSW/MRRESETVCC/R ESETGNDNCRFIPFOIPS3 7 07-3 3图3.1-3由TPS3707-33芯片组成的自动复位电路3.1.4时钟电路设计时钟电路用来为C54x芯片提供时钟信号,由一个内部振荡器和一个锁相环PLL组成,可通过芯片内部的晶体振荡器或外部的时钟电路驱动。利用DSP芯片内部提供的晶振电路,在DSP芯片的X1、X2之间连接晶体振荡器。使用芯片内部的振荡器在芯片的 X2/CLKIN引脚之间接入一个晶体2 2,用于启动内部振荡器。3时钟电路图如图2 1 3.1-4 。X1和4567D D D D9876543210A A A A A A A AAAXFBIOIA CK NM IIN T0IN T1IN T2IN T3CADD CADD CADD CADD CADD CADD1 4 25268RST5 86 98 19 51 2 01 2 41 3 56MP/ MCHD0HD1HD2HD3HD4HD5HD6HD7DADD DADD DADD DADD DADD DADD75433361 1 21 3 03 94 66 21 71 2 71 2 91 31 85 59 23 53 63 73 87 17 27 37 49 01 1 01 2 61 21 5HCNTL0 HCNTL1HBILHCSHDS1HDS2HAS HR/ WHRDYHPIE N ANCNCNCNCNCNNNNNNNNNC5 MQRAPRPRCO-UMEp YDaSTMS3 2 0VC5 40 2smtIDODomeSUU TUOKLU62Q2OMZ4Z403353cm35Q5GNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDCLKM D1CLKM D2CLKM D3BDX1BFSX1BCLKX 1BCLKR 131 4344050577076931 0 61 1 11 2 87778796054494220 p F C1 K. 20p FC2图3.1-4 时钟电路图I3.1.5程序存储器扩展设计FLASH存储器用以扩展程序存储器 AT29LV1024是1M位的FLASH存储器FLASH存储器与EPROM相比,具有更高的性能价格比,而且体积小、功耗低、可电擦写、使用方便,并且3.3V的FLASH可以直接与 DSP芯片连接。地址线: A0A15;数据线:1/001/015 ;控制 线:CE 片选信号; WE 编程写信号;OE 输出使能信号。扩展连接图如图 3.1-5。2731616366679832586981951201241356394662171271291318559237387172749011012612158090 2XOI ACK NM I INTONT1INT2INT3RSTMP/MCHD0HD1HD2HD3HD4HD5HD6HD7HCNTL0HCNTL1HDS1HDS2HASHRDYHPIE N ANCNCNCNCNCNCNCNCNC QNC AA AAAAAAAAATMS3 20 VC5 4 0 2GNDGNDGNDGNDGNDGNDGNDCLKM D1CLKM D2CLKM D3BCLKR11AT2 9LV1 02 4I D 7 6 5 4 )G ONOO OCADDCADDCADDCADDDADD DADD DADD DADDDADD DADDGNDGNDGNDBDX1A2A1A0DCOE#I/O0I/O1图3.1-5程序存储器扩展图3.1.6数据存储器扩展设计要实现语音数据和系统程序的存储,TMS320VC540必须有外接扩展存储器。 TMS320VC5402的速度为100 MI/s,为保证 DSP1行速度,需要外部存储器的速度接近 10ns。系统选择ICSI64LV16作为外部存储器,其容量64K字X 16 bit 。其硬件连接图如图3.1-6所示。旬 A ia A ia AIC S16 4 LV1 6BB OOOOOOOOOfOOOOOO35IA C KXFB IOIN T3NM IIN T0IN T1IN T2R ST MP/ MCC ADDC ADDC ADDC ADDC ADDC ADDDADDDADDDADDDADDDADDDADDHD0HD1HD28 04 5HD7TMS320VC5402NCSDHD3HD4HD5HD6NCNCNCNCNCNCNCNCNCNCDPOHPIE N AHDS1HDS2HASHR /WHR DYHC NTL0HC NTL1HB ILHC SGNDGNDGNDC LKMD1C LKMD2C LKMD3B DX1B FSX1B C LKX1B C LKR 1GNDGNDGNDGNDGNDGNDGNDNC图3.1-6数据存储程序图3.1.7 JTAG 接 口设计在系统中,通过 JTAG测试口访问和调试 DSP芯片。JTAG是一种国际标准测试协议 (IEEE 1149.1 兼容),针对现代超大规模集成电路测试、检验困难而提出的基于边界扫描 机制和标准测试存取口的国际标准。标准JTAG测试端口包括4个必选引脚和一个可选的异步JTAG的复位引脚TRST分别是工作模式选择引脚TMS串行数据输入引脚 TDI,串行数据输出引脚TDO端口工作时钟引脚 TCK JTAG接口引脚连接如图 3.1-7所示。2 10KR2 0+3.3DDSPJTAG2731XFDDDDDDBDBDD DDDDDAAAAAAAAAA AAAAA AA AAACADDi61985869811201353946BIOIACKNMIINTOINT1INT2 $NT3RSTMP/MCHD0HD1HD2HD3HD4HD5HD6HD7HCNTL0HCNTL117HDS11 892HPIEN A3537NC74110HDS2HASHR/WHRDYNCNCNCNCNCNC71HBILHCSNCNCNCTMS3 20VC5 4021215NCNCA c D D NC Q C 00NC A M H HY0DUWGSSMRSDPE4 2” |2 XT t o UoK用C THCADDCADDCADDCADDCADDDADDDADDDADDDADDDADDDADDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDCLKMD1CLKMD2CLKMD3BDX1BFSX1BCLKX 1BCLKR 11 4252681 25917533361 121 30344050577076931 061 2877787960544942.TMSTRST #,TDIDGND,3.3 VNC,TDODGND,TCKDGND,TCKDGNDEMU0EMU146Vs8dTfc1 01 21 410KR23+3TD图 3.1-7JTAG接口引脚连接图3.1.8 A/D接口电路设计A/D转换模块是整个系统的主要部分,它接收来自外部的信号或模拟数据,然后经过处理转换成数字信号传递给CPI做后续的处理。TLC320AD5是一款SIGMA- DELTA型单片音频接口芯片,通过串行口与DSP或其它设备通信。它内部集成了16位的D/A和A/D转换器,采样速率最高可达22.05 Kb/s,其采样速率可通过DSP编程来设置。设置 AD50寸,串行通信数据最低为高电平。在DAC之前有一个插值滤波器以保证输出信号平滑,ADC之后有一个抽取滤波器以提高输入信号的信噪比。AD50的发送和接收可以同时进行。参考AD50的产品手册文献,得出TMS320VC540与TLC320AD5的连接方法如图3.1-8所示871511 1 11 111 191 11 1 111 11 11 1 1112 73 16 16 36 46 56 66 7_D D DD DD DD D 9,咕 喀呛 $ ,_AAA A A A A A * A A A,CNC-XFCADDBIOCADDCADDIA CKCADDNM ICADDIN TOCADDIN T1IN T2IN T3DADDDADDDADDRSTDADDMP/ MCDADDDADD1 425 21 66 81 259 17 543 33 61 1 21 305 86 98 19 51 2 01 2 41 3 56HD0HD1HD2HD3HD4HD5HD6HD73 94 66 21 71 2 71 2 91 31 85 59 23 53 63 73 87 17 27 3HCNTL0HCNTL1HBILHCSHDS1HDS2 HASHR/ WHRDYHPIE N ANCNCNCNCNCNCNCNCNCNCTMS3 2 0 VC5 4 0 2GNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDCLKM D1CLKM D2CLKM D3BDX1BFSX1BCLKX 1BCLKR 1CWMQDLOADLOP-O世 ep YDftcH p w/31 43 44 05 05 77 07 69 31 061 1 11 286 05 44 94 22 8图3.1-8 A/D接口电路图3.2软件设计软件部分主要包括 DSP编程和PC编程。DSP程的主要任务是初始化、管理板上的资源和完成音频的处理算法。3.2.1系统软件设计主程序流程图如图3.2-1开始DSP串口初始化设置 AD50 寄存器设置中断启动 A/D3语言处理算法J -结束图3.2-1主程序流程图DSF初始化程序:#include timothy.h #include math.h int sin_data256。int tri_data256。ioport int port9100。ioport int port8000。int keycode=0x0000 。 /the code number of the key void main(void)int i 。 ST0=0x1800。ST1=0x4800。 /disable all maskable interrupt SWWSR=0x7fff。 /no wait cycle。CLKMD=0x1007IFR=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 。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 enabled */ #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_PRIORITY 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 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 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) (port ? 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_SUBADDR 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 0x25 #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#define 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) 。#define INTR_GLOBAL_ENABLE asm(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) &= 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 =10x0000u 。/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 =0x0000u 。/*DMGCR*/DMSDI =0x0000u 。/*DMGRF*/* Initialize Global DMA Registers */ static inline void dma_global_init( unsigned int dmpre /*IN:Value for priority and enable reg*/ ,unsigned int dmsrcp /*IN:Value for source page reg */ ,unsigned int dmdstp /*IN:Value for dest page reg */ ,unsigned int dmidx0 /*IN:Value for element index reg 0 */ ,unsigned int dmidx1 /*IN:Value for element index reg 1 */ ,unsigned int dmfri0 /*IN:Value for frame index reg 0 */ ,unsigned int dmfri1 /*IN:Value for frame index reg 1 */ ,unsigned int dmgsa /*IN:Value for global src addr reload */ ,unsigned int dmgda /*IN:Value for global dst addr reload */ ,unsigned int dmgcr /*IN:Value for global count reload reg*/,unsigned int dmgfr) /*IN:Value for global frame reload reg*/DMPREC &= 0xFF00u 。 /* Temporarily Disable All Channels */DMSBA = DMSRCP_SUBADDR 。 /* Set DMA SubBank Address Register */DMSDI = dmsrcp 。 /* Write to DMA src subbank register with increment */DMSDI = dmdstp 。DMSDI = dmidx0 。DMSDI = dmidx1 。DMSDI = dmfri0 。DMSDI = dmfri1 。DMSDI = dmgsa 。DMSDI = dmgda 。DMSDI = dmgcr 。DMSDI = dmgfr 。DMPREC = dmpre 。static inline void dma_init(unsigned int channel /*IN: DMA channel number */,unsigned int dmsefc /*IN: Value to set sync & fr reg */,unsigned int dmmcr /*IN: Value to set mode control reg */,unsigned int dmctr /*IN: Value to set element count reg */,unsigned int src_page /*IN: Value to
展开阅读全文