⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a1600.lst

📁 凌阳单片机对语音的处理和调用
💻 LST
📖 第 1 页 / 共 5 页
字号:
Sunplus u'nSP Assembler - Ver. 1.14.4
              Listing File Has Been Relocated
                            	//.include SPT6608.inc
                            	//.include Resource.inc 
                            	//
                            	//.public  T_SACM_A1600_Table;
                            	//.public  F_SACM_DVR1600_Init_;		// Hardware Setting
                            	//.public _IRQ2;
                            	//
                            	//// Hasc_Kernel.asm reference Function
                            	//.external F_SACM_DVR1600_Init;			   //这个初始化,好象.asm文件中有的
                            	//.external F_SACM_DVR1600_IRQ_ServiceLoop;  //怎么没有看到啊?
                            	//.external F_SACM_DVR1600_ServiceLoop;      //执行DVR1600解码或编码操作
                            	//.external F_SACM_DVR1600_Volume;           //设定DVR1600的播放音量
                            	//.external F_SACM_DVR1600_Status;           //获取当前DVR1600录放音的状态
                            	//.external F_SACM_DVR1600_Pause;            //暂停播放
                            	//.external F_SACM_DVR1600_Resume;           //继续播放
                            	//
                            	//.external HASC_FIFO;
                            	//.external HascDEC_FIFO_PTR;
                            	//.external _StatusData;
                            	////.external _aaaa;
                            	//// Purpose:  DVR1600 Demo program for SPT6604
                            	////        :  It can control Volume and VoiceIndex by Key.
                            	//
                            	//
                            	////---------------------------
                            	////语音播放时用到的单元
                            	//.RAM
                            	//DataRomAddr:       .DW     0;
                            	//SegDataRomAddr:       .DW     0;
                            	//W_InterRAM_Ptr:    .DW     0;
                            	//DataFlag:	   .DW	   0;
                            	//
                            	//
                            	////-----------------------------
                            	////程序调用他时候给的2个值单元地址
                            	//.RAM
                            	//R_SongIndex:    .DW     0;
                            	//R_Volume:       .DW     0;
                            	//
                            	//
                            	//
                            	//
                            	////.PUBLIC 	F_SACM_DVR1600_SendDAC
                            	////F_SACM_DVR1600_SendDAC: .PROC
                            	//
                            	//.CODE
                            	////.PUBLIC _FSpeech
                            	//// _F_Speech: .proc_
                            	//.public _InilSpeech
                            	//	_InilSpeech: .proc
                            	//		PUSH BP to [sp];
                            	//		BP=sp+1;
                            	//		R1=[BP+3];
                            	//        [R_SongIndex] = R1;	       //歌曲索引为0        
                            	//        R1=[BP+4];                //歌曲的音量
                            	//        [R_Volume]=R1;
                            	//        
                            	//        //---IO口设置
                            	// 		R1 = [P_IOC_Dir];
                            	// 		R1|=0x40;
                            	//        [P_IOC_Dir] = R1;           // IOC  OutPut Mode
                            	//         
                            	//        R1=[P_IOC_Data];
                            	//        R1|=0x40;
                            	//		[P_IOC_Data]=R1;            //IOC  输出高电压
                            	//		 
                            	//		//---设置音量(0-3)共4级
                            	//		R1=[R_Volume];
                            	//        CALL F_SACM_DVR1600_Volume;
                            	//        
                            	////?Go_play:	 	 	
                            	//        R1 = 0;
                            	//        [DataFlag] = R1;           //数据标志为0
                            	//        R2 -= R2;            
                            	//	    [W_InterRAM_Ptr] = R2;
                            	//	     
                            	//	     //---取语音索引号
                            	//	     R1=[R_SongIndex];
                            	//	     
                            	//  	     BP =offset T_SACM_A1600_Table;
                            	//         BP+ =R1;
                            	//         BP=[BP];
                            	//         
                            	//	     
                            	//	     //---For  manual mode,  fill the first 32 Data to HASC_FIFO
                            	//          R1 = HASC_FIFO;
                            	//          R2 = [BP++];
                            	//          R3 = [bp]
                            	//          R3 = R3 LSL 4
                            	//          R3 = R3 LSL 4
                            	//          R3 = R3 LSL 2                         //左移10位
                            	//          [SegDataRomAddr] = R3
                            	//?_FillHASC_FIFO:
                            	//          Sr &= 0x3FF			                //段寄存器  有程序段CS和数据段DS
                            	//          SR |= R3
                            	//          R4 =DS: [R2];
                            	//          R2 +=1
                            	//          JNZ		?L_Nover
                            	//          R3 +=0x400
                            	//          [SegDataRomAddr] = R3                //以上是放音频的基地址
                            	//?L_Nover:
                            	//	  	 CALL  F_ChangeHighLowByte;           //将R4的高、低位互掉
                            	//          [R1++] = R4;         
                            	//          CMP R1,HASC_FIFO+32;
                            	//          JNZ  ?_FillHASC_FIFO;//以上可能是从新放置音频信息吧?
                            	//          [DataRomAddr] = R2;
                            	//
                            	//        
                            	//	  R1 = 0xFFFF;				// Voice Index , 0xFFFF means manual mode
                            	//	  R2 = 2;				// Volume Index, 0 ~ 3 .
                            	//	  call F_SACM_DVR1600_Init;//这个初始化,好象.asm文件中有的
                            	//	  
                            	//        pop BP from[sp];
                            	//    RETF;
                            	//.endp
                            	//
                            	//
                            	////---------------------------------
                            	////    解码播放语音的主循环程序
                            	////---------------------------------
                            	//?_play_loop:  
                            	//?_wait_music_end:
                            	//		CALL	F_SACM_DVR1600_ServiceLoop;   //03080  执行DVR1600解码或编码操作
                            	//		CALL 	F_FillRingBuf;				// For manual mode, users must fill the HASC_DEC_FIFO
                            	//		CALL	F_SACM_DVR1600_Status;       //获取当前DVR1600录放音的状态
                            	//    	test R1, 0x0001;       			       //Voice end ?
                            	//    	JNZ ?_wait_music_end;
                            	//    	test R1,0x0002;				       // Voice Pause
                            	//        JNZ  ?_wait_music_end;
                            	////        call F_Stop_Play;          		       //Stop playback DVR1600
                            	//
                            	////----------------------------
                            	////定时器和ADC的设置
                            	////----------------------------
                            	////-----------------------------------------------------
                            	//// Set Fosc , TimerA or TimerB , TimerData , P_DAC_Ctrl
                            	////-----------------------------------------------------
                            	//F_SACM_DVR1600_Init_:                    //这个初始化,好象.asm文件中有的
                            	//
                            	//        INT OFF;
                            	//
                            	//        R1 = 0x0081;
                            	//        R1|=[P_SystemClock];
                            	//        [P_SystemClock] = R1;               //Set High Speed and (/1)
                            	//        R1=0x80;	
                            	//        [P_SystemClock] = R1;               //Set High Speed and (/1)
                            	//        	
                            	//        R1 = 0x04;
                            	//        [P_IntClr]= R1;
                            	//
                            	//        R1 = 0xD500;                            //Base 32768Hz
                            	//        [P_Tmr_Ctrl] = R1;
                            	//
                            	//        R1 = 0xFFFC;                       // 8.192k
                            	//        [P_TmrA_Data] = R1;                //Set play rate
                            	//        [P_TmrA_Load] = R1;
                            	//
                            	//        R1 = 0x0004;
                            	//        R1|=[P_Int];
                            	//        [P_Int] = R1;                      //Enabel TimerA INT
                            	//
                            	//        R1 = 0x0200;                            //From DACO pin
                            	////        R1|=[P_DtmfTone];
                            	//        [P_DtmfTone] = R1;
                            	//
                            	//		R1 = 1
                            	////		R1|=[0x7026];
                            	//		[0x7026] = R1
                            	//        INT IRQ;                                //IRQ ON;
                            	//		
                            	//	RETF;	
                            	//
                            	//
                            	////*************************************************************************************
                            	//// Stop MIDI : Clear Flag, Disable TimerA and INT
                            	//// 停止播放音乐时,清楚相应的标志位
                            	////*************************************************************************************
                            	//.public _T_Stop_Play
                            	//        _T_Stop_Play: .proc
                            	//        push R1,R5 to [sp];
                            	//        R1 = 0x4;
                            	//        [P_IntClr] = R1;
                            	//
                            	//        R1 = 0x0000;                            //Disable TimerA
                            	//        [P_Tmr_Ctrl] = R1;
                            	//
                            	//        R1 = [P_Int];
                            	//        R1 &= 0xFFFF - 0x0004;
                            	//        [P_Int] = R1;                           //Disable INT
                            	//
                            	//		r1= [0x7022] 
                            	//    	r1 &= 0xfcff  //关闭0x7022(P_DtmfTone_Def)REG  的  DACEN  和 Tone_DACO  两位
                            	//    	[0x7022] =r1
                            	//    	
                            	//    	r1= [0x7026]   
                            	//    	r1 &= 0xfffe   //U_AFECtrl->B.EN_DAC2 =0;
                            	//    	[0x7026] = r1
                            	//    
                            	//    	r1= [P_IOC_Data]   
                            	//    	r1 &=0xfff7    //话机 通过PD。3关闭功放POS机 PC。6
                            	//    	[P_IOC_Data] = r1 
                            	//    
                            	//		pop R1,R5 from [sp];
                            	//	retf
                            	//	.endp
                            	//
                            	//// ------------------------------------------------------------------------------------------------------------//
                            	//// Purpose: In the manual mode, user must fill the ring buf after each F_SACM_DVR1600_ServiceLoop is over
                            	////	    HascDEC_FIFO_PTR will show the message that the next "Data Pointer"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -