凌阳单片机C语言2

上传人:zw****58 文档编号:45916449 上传时间:2018-06-20 格式:PDF 页数:5 大小:182.92KB
返回 下载 相关 举报
凌阳单片机C语言2_第1页
第1页 / 共5页
凌阳单片机C语言2_第2页
第2页 / 共5页
凌阳单片机C语言2_第3页
第3页 / 共5页
凌阳单片机C语言2_第4页
第4页 / 共5页
凌阳单片机C语言2_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《凌阳单片机C语言2》由会员分享,可在线阅读,更多相关《凌阳单片机C语言2(5页珍藏版)》请在金锄头文库上搜索。

1、 实验一实验一 SACM-A2000 【实验目的】【实验目的】 1)了解凌阳单片机以 SACM_A2000 语音格式播放及程序的编写方法。 2)了解凌阳音频编码算法库(SACM_Lib)。 3)了解 SACM_A2000 的语音文件。 【实验设备】【实验设备】 1)装有 unsp IDE仿真环境的 PC机一台。 2)nSP十六位单片机实验箱一个。 【实验原理】【实验原理】 将 PCM 音频格式的 8K16 位 WAV 文件经 SACMA2000 算法压缩后变为 SUB-BAND 的 音 频 格 式 , 压 缩 前 为 : *.wav ,8k/16bit ; 压 缩 后 为 : *.16k/*.

2、20k/*.24k,并生成*.out 文件用于对比试听( pc-play),即在 PC 机上试听 *.out 文件并和实验板上的扬声器的声音进行对比。由于它的压缩比较小(8:1) 所以具有高质量、高码率的特点适用于高保真语音和音乐。 【实验步骤】【实验步骤】 1)用 PC机录制一个 wav语音文件。 2)用 Windows 压缩工具将该 wav文件压缩为 16k(或 20k,24k)的文件。 3)将 nSP IDE打开后,建立一个新工程。 4)添加 SACM_A2000 的语音文件到程序中的资源文件夹(resource)下。 5)添加、编写程序代码。 6)编译程序,观察结果。 【程序流程图】【

3、程序流程图】 主程序流程图: SACM_A2000放音的 初始化 SACM_A2000_Initi al(Auto)SACM_A2000压缩播放 SACM_A2000_Play(SPEECH_1 ,DAC1,Ramp_UpDn_On)获取语音数据并解 码等待中断播放 SACM_A2000_Servi ceLoop()A2000手动方式主程序流程图: SACM_A2000_InitDecoder (DAC1)获取语音资源 SP_GetResource(Addr) 并填充语音队列 SACM_A2000_FillQueue(Ret) 修改地址Addr+解码并通过中断中的 F_FIQ_Service_

4、SACM _A2000函数获取数据 并播放判断语音队列 是否满? SACM_A2000_TestQu eue()判断是否到 语音的结束地址 RES_WW_24K_EA放音结束 SACM_A2000_St op()是否是否结束开始中断服务子程序: 寄存器组入 栈保护FIQ是 TimerA中断 吗?FIQ是 TimerB中断 吗?转至FIQ_PWM中 断服务处理子 程序寄存器组出 栈中断返回调用 F_FIQ_Service_SAC M_A2000函数清中断状态否 否是清中断状态是中断返回中断返回寄存器组出 栈寄存器组出 栈清中断状态【程序范例】【程序范例】 /* / Note: A2000有两种播

5、放方式,即自动方式和非自动方式,我们可以通 /过改变 Mode 的值来切换这两种方式:当 Mode=0时以非自动方式播放, /当 Mode=1时,以自动方式播放。 /* #define SPEECH_1 0 #define DAC1 1 #define DAC2 2 #define Ramp_UpDn_Off 0 #define Ramp_Up_On 1 #define Ramp_Dn_On 2 #define Ramp_UpDn_On 3 #define Manual 0 #define Auto 1 #define Full 1 #define Empty 2 #define Mode 1

6、 #include “A2000.h“ main() extern long RES_HH_24K_SA,RES_HH_24K_EA; /定义语音资源的首末地址标号 long int Addr; /定义地址变量 int Ret = 0; /定义获取语音数据变量并初始化 if(Mode = 1) /采用自动方式播放 SACM_A2000_Initial(1); /自动方式播放初始化 SACM_A2000_Play(SPEECH_1,DAC1,Ramp_UpDn_On); /定义语音索引号、播放通道、允许音量增/减调节 while(1) SACM_A2000_ServiceLoop(); /获取语

7、音数据并将其填入解码队列 if(Mode = 0) /采用非自动方式 播放 Addr=RES_HH_24K_SA; /送入语音队列的首址 SACM_A2000_Initial(0); /非自动方式播放的初 始化 SACM_A2000_InitDecoder(DAC1); /开始对 A2000的语音数据以非自动方式解码 while(1) if(SACM_A2000_TestQueue()!=Full) Ret =SP_GetResource(Addr); SACM_A2000_FillQueue(Ret); Addr+; if(Addr RES_HH_24K_EA ) /如果该段语音未播完,即未

8、 到达末地址时 SACM_A2000_Decoder(); /获取资源并进行解码,再通过中断服务子程序送入 DAC 通道播放 else SACM_A2000_Stop(); /否则,停止播放 /中断程序(ISR.ASM) .text .include hardware.inc .include A2000.inc .include Resource.inc .public _FIQ; _FIQ: PUSH r1,r4 to sp; /压栈保护 r1=0x2000; test r1,P_INT_Ctrl; /判断是不是 FIQ_TMA中断源 jnz L_FIQ_TimerA; /是,则转 r1=

9、0x0800; test r1,P_INT_Ctrl; /否则,判断是不是 FIQ_TMB 中断 源 jnz L_FIQ_TimerB; /是,则转 L_FIQ_PWM: r1=C_FIQ_PWM; P_INT_Clear=r1; /清除 P_INT_Clear 单元 POP R1,R4 fromsp; reti; L_FIQ_TimerA: P_INT_Clear=r1; call F_FIQ_Service_SACM_A2000; /调用函数,完成播放 pop r1,r4 from sp; reti; L_FIQ_TimerB: P_INT_Clear=r1; pop r1,r4 from sp; reti; /= =/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 教育学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号