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

📄 test4at303.dsp

📁 基于ADSP的G.729语音编解码程序
💻 DSP
📖 第 1 页 / 共 3 页
字号:
				
			//	IFC = 0x00ff;			// Clear all IRQ
			
//jump_idle:  
			//	IMASK = 0x0100;			// turn off bsb IRQ , only enable WaterMark
			
			//	IDLE;					// wait for watermark interrupt
			//	Jump jump_idle; */
//--------------------------------------->Anna-

ISR_AuxCmdDecode :

		ena sec_reg;

		// Get MICROAUXCMD0
		ay0  = io(0x709);
		dm(MicroAuxCmd0) = ay0;

		// Get MICROAUXDAT0
	/*	ay1  = io(0x70A);
		dm(MicroAuxDat0) = ay1;

		// Get MICROAUXDAT1
		ay1  = io(0x70B);
		dm(MicroAuxDat1) = ay1;

		// Get MICROAUXDAT2
		ay1  = io(0x70C);
		dm(MicroAuxDat2) = ay1;*/

///-----------------------------------+<Anna
GET_MSGTYP :

    	// Check MSGTYP
		ar = 0xFF00;

		af = ar and ay0;

		
		ar=0x0000;
		none=ar xor af;
		if eq jump GET_STATUS;
		
		ar = 0x0100;
		none = ar xor af;
		if eq jump SET_WORK_MODE;

		ar=0x1000;
		none=ar xor af;
		if eq jump PLAY;
		
		ar=0x1100;
		none=ar xor af;
		if eq jump PAUSE_PLAY;
		
		ar=0x1200;
		none=ar xor af;
		if eq jump RESUME_PLAY;
		
        ar=0x1300;
        none=ar xor af;
        if eq jump END_PLAY;
        
		ar=0x1400;
		none=ar xor af;
	
		if eq jump ABORT_PLAY;
		
		ar=0x2000;
		none=ar xor af;
		if eq jump START_ENCODE;
		
		ar=0x2100;
		none=ar xor af;
		if eq jump PAUSE_ENCODE;
		
		ar=0x2200;
		none=ar xor af;
		if eq jump RESUME_ENCODE;
		
        ar=0x2300;
        none=ar xor af;
        if eq jump END_ENCODE;
        
		ar=0x2400;
		none=ar xor af;
		if eq jump ABORT_ENCODE;
		
		ar=0x3100;
		none=ar xor af;
		if eq jump GET_FRAME_POS;
		
Exit_Auxcmd:
		
		dis sec_reg; 
        rti;


GET_STATUS:
       
       ax1=dm(PausePlay);
       ay1=dm(PauseEncode);
       none=ax1 or ay1;
       if ne jump Busy;
       ax1=dm(StartPlay);
       ay1=dm(ResumePlay);
       none=ax1 or ay1;
       if ne jump Busy;
       ax1=dm(StartEncode);
       ay1=dm(ResumeEncode);
       none=ax1 or ay1;
       if ne jump Busy;
       RegWrite(0x70D,0x0000,ax1);
       RegWrite(0x707,b#1000000000000010,ax1);
       jump Exit_Auxcmd;
       
Busy:   
       ar=dm(BusyFlag);
       RegWrite(0x70D,ar,ax1);
       RegWrite(0x707,b#1000000000000010,ax1);
       jump Exit_Auxcmd;
       
SET_WORK_MODE: /******///-----+<Jinyan
        
        ar=dm(EndPlay);
        none=pass ar;
        if eq jump Error_change;
		ax0	= 0x0001;
		dm(WmodeChange)=ax0;
	    ax0 = 0x00ff;
		ar = ax0 and ay0;
		dm(Workmode) = ar;	
  		jump Exit_Auxcmd;
///---------------------------+>Jinyan
Error_change:
        RegWrite(0x70D,0xff00,ax1);
        RegWrite(0x707,b#1000000000000010,ax1);
        jump Exit_Auxcmd;

PLAY:
        ar=0x0001;
        dm(StartPlay)=ar;
        ar=0x0000;
        dm(PausePlay)=ar;
        dm(EndPlay)=ar;
        dm(ResumePlay)=ar;
        dm(AbortPlay)=ar;
        ar=0x0080;
        dm(BusyFlag)=ar;
///////////////////////        
//    AB_PLAY        //
////////////////////// 
#ifdef AB_PLAY       
        IO_REG_HILO(0x70A,Filepos_Low);
        IO_REG_HILO(0x70B,Filepos_High);
        IO_REG_HILO(0x70C,Skipoffset);
#endif
        jump Exit_Auxcmd;
        
PAUSE_PLAY:
        ax1=dm(StartPlay);
        ay1=dm(ResumePlay);
        none=ax1 or ay1;
        if eq jump not_start_dec;
        ar=0x0001;
        dm(PausePlay)=ar;
        ar=0x0000;
        dm(StartPlay)=ar;
        dm(ResumePlay)=ar;
        dm(EndPlay)=ar;
        dm(AbortPlay)=ar;
        ar=0x0080;
        dm(BusyFlag)=ar;
        
        JUMP Exit_Auxcmd;
      
not_start_dec:
        RegWrite(0x70D,0x0100,ax1);
        RegWrite(0x707,b#1000000000000010,ax1);
        jump Exit_Auxcmd;
        

RESUME_PLAY:
        ar=dm(PausePlay);
        none=pass ar;
        if eq jump NoPauseStatus_dec;
        
        ar=0x0001;
        dm(ResumePlay)=ar;
        ar=0x0000;
        dm(PausePlay)=ar;
        dm(StartPlay)=ar;
        dm(EndPlay)=ar;
        dm(AbortPlay)=ar;
        ar=0x0080;
        dm(BusyFlag)=ar;
        
        jump Exit_Auxcmd;
       
NoPauseStatus_dec:
        RegWrite(0x70D,0x0200,ax1);
        RegWrite(0x707,b#1000000000000010,ax1);
        jump Exit_Auxcmd;
        
END_PLAY:

        ar=dm(AbortPlay);
        none=pass ar;
        if ne jump no_play_resume;
       
       ar=0x0001;
       dm(EndPlay)=ar;
       ar=0x0000;
       dm(StartPlay)=ar;
       dm(ResumePlay)=ar;
       dm(PausePlay)=ar;
       dm(AbortPlay)=ar;
       dm(BusyFlag)=ar;
       
       jump Exit_Auxcmd;
       
no_play_resume:
        RegWrite(0x70D,0xff00,ax1);
        RegWrite(0x707,b#1000000000000010,ax1);
        jump Exit_Auxcmd;

       
ABORT_PLAY:
       
       ar=dm(AbortPlay);
       none=pass ar;
       if ne jump in_abortplay;

       ax1=0x0001;
       dm(AbortPlay)=ax1;
       ar=0x0000;
       dm(StartPlay)=ar;
       dm(ResumePlay)=ar;
       dm(PausePlay)=ar;
       dm(EndPlay)=ar;
       dm(BusyFlag)=ar;
           
	   jump START_TEST;
	   
in_abortplay:
       
       RegWrite(0x70D,0xff00,ax1);
       RegWrite(0x707,b#1000000000000010,ax1);
       jump Exit_Auxcmd;

GET_FRAME_POS:
        
         REG_IO_HILO(0x70E,Filepos_Low);
         REG_IO_HILO(0x70F,Filepos_High);
         RegWrite(0x707,b#1000000000000010,ax1);
        
         jump Exit_Auxcmd;     
	   

START_ENCODE:

        ax1=dm(StartEncode);
        ay1=dm(ResumeEncode);
        none=ax1 or ay1;
        if ne jump already_start_enc;
        
        ar=0x0001;
        dm(StartEncode)=ar;
        ar=0x0000;          
        dm(PauseEncode)=ar;
        dm(EndEncode)=ar;
        dm(ResumeEncode)=ar;
        dm(AbortEncode)=ar;
        ar=0x0080;
        dm(BusyFlag)=ar;
       
        jump Exit_Auxcmd;
        
already_start_enc:

        RegWrite(0x70D,0x0200,ax1);
        RegWrite(0x707,b#1000000000000010,ax1);
        jump Exit_Auxcmd;

        
PAUSE_ENCODE:
        ax1=dm(StartEncode);
        ay1=dm(ResumeEncode);
        none=ax1 or ay1;
        if eq jump not_start_enc;
        ar=0x0001;
        dm(PauseEncode)=ar;
        ar=0x0000;
        dm(StartEncode)=ar;
        dm(ResumeEncode)=ar;
        dm(EndEncode)=ar;
        dm(AbortEncode)=ar;
        ar=0x0080;
        dm(BusyFlag)=ar;
       
        JUMP Exit_Auxcmd;
      
not_start_enc:
        RegWrite(0x70D,0xff00,ax1);
        RegWrite(0x707,b#1000000000000010,ax1);
        jump Exit_Auxcmd;
        

RESUME_ENCODE:
        ar=dm(PauseEncode);
        none=pass ar;
        if eq jump NoPauseStatus_enc;
        ar=0x0001;
        dm(ResumeEncode)=ar;
        ar=0x0000;
        dm(PauseEncode)=ar;
        dm(StartEncode)=ar;
        dm(EndEncode)=ar;
        dm(AbortEncode)=ar;
        ar=0x0080;
        dm(BusyFlag)=ar;
       
        jump Exit_Auxcmd;
       
      
NoPauseStatus_enc:
        RegWrite(0x70D,0x0200,ax1);
        RegWrite(0x707,b#1000000000000010,ax1);
        jump Exit_Auxcmd;
        
END_ENCODE:
       
       ar=dm(AbortEncode);
       none=pass ar;
       if ne jump no_start_resume_enc;
       
       ar=0x0001;
       dm(EndEncode)=ar;
       ar=0x0000;
       dm(StartEncode)=ar;
       dm(PauseEncode)=ar;
       dm(ResumeEncode)=ar;
       dm(AbortEncode)=ar;
       dm(BusyFlag)=ar;
      
       jump Exit_Auxcmd;
       
no_start_resume_enc:

        RegWrite(0x70D,0x0200,ax1);
        RegWrite(0x707,b#1000000000000010,ax1);
        jump Exit_Auxcmd;

       
ABORT_ENCODE:

       ar=dm(AbortEncode);
       none=pass ar;
       if ne jump in_abortencode;
       
       ar=0x0001;
       dm(AbortEncode)=ar;
       ar=0x0000;
       dm(StartEncode)=ar;
       dm(PauseEncode)=ar;
       dm(ResumeEncode)=ar;
       dm(EndEncode)=ar;
       dm(BusyFlag)=ar;
 
             
       jump START_TEST;
       
in_abortencode:
       
        RegWrite(0x70D,0xff00,ax1);
        RegWrite(0x707,b#1000000000000010,ax1);
        jump Exit_Auxcmd;

///---------------------------------------------+>Anna



//////////////////////////////////////////////////////////////
//                                                          //
// WorkMode Change sobroutine                               //
//                                                          //
//////////////////////////////////////////////////////////////		
.global WorkModeChange; 
.entry WorkModeChange;
WorkModeChange:      //////////Jinyan+
	    ay0 =  dm(Workmode);
		ar =  0x0001;
		none = ar xor ay0;
		if eq jump Mp3decoderMode;
		ar =  0x0002;
		none = ar xor ay0;
		if eq jump Mp3encoderMode;
		ar =  0x0003;
		none = ar xor ay0;
		if eq jump G729decoderMode;
		ar =  0x0004;
		none = ar xor ay0;
		if eq jump G729encoderMode;
		ar =  0x00ff;
		none = ar xor ay0;
		if eq jump TopMode;
		RegWrite (0x70D,0x0100,ax1);
		RegWrite (0x707,b#1000000000000010,ax1);
		rts;
Mp3decoderMode:
		ax0 = B_CON_MP3D; 
  		dm(BCONTROL) = ax0;
		jump Bdma_load;
Mp3encoderMode:
		RegWrite (0x70D,0x0100,ax1);
  		RegWrite (0x707,b#1000000000000010,ax1);
  		rts;
G729decoderMode:
		/*ax0 = B_CON_G729; 
  		dm(BCONTROL) = ax0;
		jump Bdma_load;*/
		ax0=0x0000;
		dm(WModeChange)=ax0;
		jump START_TEST;
		rts;
G729encoderMode:
  		ax0 = B_CON_G729; 
  		dm(BCONTROL) = ax0;
  		jump Bdma_load;
TopMode:
  		ax0 = B_CON_TOP; 
  		dm(BCONTROL) = ax0;
Bdma_load:
	  	RegWrite (0x70D,0x0000,ax1);
	  	RegWrite (0x707,b#1000000000000010,ax1);
		ax0 = B_EAD_CODE;       
	  	dm(BEAD) = ax0;
		ax0 = B_IAD_CODE;        
	  	dm(BIAD) = ax0;
	  	ax0 = BCODE; 
	  	dm(BWCOUNT) = ax0;
	  	ifc = BMASK;           //Clear pending BDMA interrupt 
	  	nop;
	  	imask = BMASK;         //Enable BDMA interrupt 
	  	idle;                  //Wait for BDMA to finish */
		rts;
		
/*----------------------------------> sunny-*/
/*******************************************************************/
setup_system:  L0=0; L1=0; 
			   L2=0; L3=0;
			   L4=0; L5=0;
			   L6=0; L7=0;
			   AR=PASS 0;
			   AR=SETBIT 12 Of AR;
			   DM(Sport0_Autobuf_Ctrl)=AR;		   
  			   DIS BIT_REV,DIS AV_LATCH,ENA AR_SAT,DIS M_MODE,ENA G_MODE;
			   M0=0; M1=1; 
			   M4=1; M2=-1; M7=-1;

			   RTS;
/*******************************************************************/
.ENDMOD;	
		

⌨️ 快捷键说明

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