资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
程序1-1 DVR 以自动方式录放音前台程序:int key;Main()System_Initial(); /键盘初始化SACM_DVR_Initial(Auto);while(1)Key = SP_GetCh();/获取键值switch(Key)case 0x0000:break;case 0x0001:SACM_DVR_Record(); /录音,存储资料到 SRAMbreak;case 0x0002:SACM_DVR_Stop(); /停止录/放音break;case 0x0004:SACM_DVR_Play(); /从 SRAM 中取出语音资料并播放break;default:break;System_ServiceLoop(); / 键扫描SACM_DVR_ServiceLoop(); / while(1)结束背景程序:_FIQ:push registers;call F_FIQ_Service_SACM_DVR; / 放音Clear interrupt flagpop registers;reti;_IRQ1:push registerscall F_IRQ1_Service_SACM_DVR; /录音Clear interrupt flagpop registers;reti;注:对于函数 System_Initial()、System_ServiceLoop()和SP_GetCh()详见具体的实验。程序1-2 非自动方式:(见光盘)DVR 手动方式主程序流程见图#define Manual 0#define Auto 1#define SRAM_Size 0xffff-2#define RceMonitorOff 0#define RceMonitorOn 1#define DAC1 1#define DAC2 2#define Full 1#define Empty 2*录音*main()SACM_DVR_Initial(Manual); /手动方式初始化Addr = 0; /定义语音存放的首址变量InitWriteSRAM();SACM_DVR_InitEncoder(RceMonitorOn); /开始对 A2000的语音资料以非自动方式编码while(AddrSRAM_Size) /判断存储语音的地址是否超出存储单元的大小SACM_DVR_Encode (); /获取数据并编码if(SACM_DVR_TestQueue()!= Empty)Ret=SACM_DVR_FetchQueue(); / 从队列中获取资料WriteSRAM(Addr,Ret); / 存入用户定义的存储单元区Addr+=2; /两个8位 SRAM 存储一个16位资料SACM_DVR_StopEncoder();*放音*main()SACM_DVR_Initial(Manual); /非自动方式播放的初始化InitReadSRAM();Addr=0;SACM_DVR_InitDecoder(DAC1); /开始对 A2000的语音资料以非自动方式译码while(1)if(SACM_DVR_TestQueue()!=Full) /测试并获取语音队列的状态Ret =ReadSRAM(Addr); /从存储区里获取一个字型语音资料SACM_DVR_FillQueue(Ret); /获取语音编码资料并填入语音队列等候译码Addr+=2;if(AddrSRAM_Size) /如果该段语音播完,即到达末地址时SACM_DVR_Decode ();/获取资源并进行译码,再通过中断服务子程序送入 DAC 信道播放elseSACM_DVR_StopDecoder(); /否则,停止播放背景程序:_FIQ:push r1,r5 to sp;call F_FIQ_Service_SACM_DVR; /语音播放中断r1=0xa800P_INT_Clear=r1pop r1,r5 from sp;reti;_IRQ1:push r1,r5 to sp;call F_IRQ1_Service_SACM_DVR; /语音录制中断r1=0x1000P_INT_Clear=r1pop r1,r5 from sp;reti;
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号