亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sacmv40.asm

?? 凌陽單片機的錄音,方音程序,用c語言邊的,可用性強.
?? ASM
?? 第 1 頁 / 共 2 頁
字號:
// Return    : None
////////////////////////////////////////////////////////
F_SP_SACM_MS01_Init_:
	FIR_MOV OFF;
	R1 = C_SystemClock;		// CPU Clock setting
	[P_SystemClock] = R1;

	R1 = 0X0030;			// TimerA CKA=Fosc/2 CKB=1 Tout:off
	[P_TimerA_Ctrl] = R1;
	R1= C_MS01_Timer_Setting;	// TimerA setting
	[P_TimerA_Data] = R1;

//	R1 = 0X0000;			// TimerB CKC=Fosc/2 Tout:off
//	[P_TimerB_Ctrl] = R1;
//	R1= C_MS01_Timer_Setting;	// TimerB setting
//	[P_TimerB_Data] = R1;

	R1 = 0x00AC			// Latch DAC1 by TimerA; Latch DAC2 by TimerA; MIC_IN conversion by TimerA
//	R1 = 0x00CC			// Latch DAC1 by TimerA; Latch DAC2 by TimerB; MIC_IN conversion by TimerA
//	R1 = 0x012C			// Latch DAC1 by TimerB; Latch DAC2 by TimerA; MIC_IN conversion by TimerA
//	R1 = 0x014C			// Latch DAC1 by TimerB; Latch DAC2 by TimerB; MIC_IN conversion by TimerA
	[P_DAC_Ctrl] = R1		// b2 of P_DAC_Ctrl must be set to 1 in SPCE500A. SPCE060A doesn't use this bit

	R1 = 0xffff;			// no need to clear FIQ here by arthur
	[P_INT_Clear] = R1; 

	R1 = [R_InterruptStatus]	//

	R1 |= C_FIQ_TMA			// Enable Timer A FIQ
//	R1 |= C_FIQ_TMB			// Enable Timer B FIQ
	[R_InterruptStatus] = R1	//
	[P_INT_Ctrl] = R1		//

	fiq on;
	retf

////////////////////////////////////////////////////////
// Function: F_SP_SACM_DVR1600_Init_
// Description: Hardware initilazation, System Clock, DAC, INT
//              
// Syntax  : F_SP_SACM_Init_
// Destory: R1
// Parameter : None
// Return    : None
////////////////////////////////////////////////////////
// call by decode.asm to initilaize the hardware for decode
F_SP_SACM_DVR1600_Init_:
	FIR_MOV OFF;
	R1 = C_SystemClock;		// CPU Clock setting
	[P_SystemClock] = R1;

	R1 = 0X0030;			// TimerA CKA=Fosc/2 CKB=1 Tout:off
	[P_TimerA_Ctrl] = R1;
	R1= C_DVR1600_Timer_Setting;	// TimerA setting
	[P_TimerA_Data] = R1;

//	R1 = 0X0000;			// TimerB CKC=Fosc/2 Tout:off
//	[P_TimerB_Ctrl] = R1;
//	R1= C_DVR1600_Timer_Setting;	// TimerB setting
//	[P_TimerB_Data] = R1;

	R1 = 0x00AC			// Latch DAC1 by TimerA; Latch DAC2 by TimerA; MIC_IN conversion by TimerA
//	R1 = 0x00CC			// Latch DAC1 by TimerA; Latch DAC2 by TimerB; MIC_IN conversion by TimerA
//	R1 = 0x012C			// Latch DAC1 by TimerB; Latch DAC2 by TimerA; MIC_IN conversion by TimerA
//	R1 = 0x014C			// Latch DAC1 by TimerB; Latch DAC2 by TimerB; MIC_IN conversion by TimerA
	[P_DAC_Ctrl] = R1		// b2 of P_DAC_Ctrl must be set to 1 in SPCE500A. SPCE060A doesn't use this bit

	r1 = 0x0115;			// 061A: AGC enable; MIC IN; ADC enable
	[P_ADC_Ctrl] = r1;
	
	R1 = 0xffff;			// no need to clear FIQ here by arthur
	[P_INT_Clear] = R1;

	R1=0x0000			// Mic_In
//	R1 = 0x0001			// Line_in 1
	[P_ADC_MUX_Ctrl] = R1
	R1 = [R_InterruptStatus]	//

	R1 = [P_INT_Mask]		//

	R1 |= C_FIQ_TMA			// Enable Timer A FIQ
//	R1 |= C_FIQ_TMB			// Enable Timer B FIQ
	[R_InterruptStatus] = R1	//
	[P_INT_Ctrl] = R1		//
	
	FIQ on;
	IRQ on;
	retf

////////////////////////////////////////////////////////
// Function: _SP_SACM_DVR1600_ADC_Timer_Init_
// Description: Select A1600_Rec ADC Sampling Rate
//              called by library
//              
// Destory: R1
// Parameter : None
// Return    : None
////////////////////////////////////////////////////////
_SP_SACM_DVR1600_ADC_Timer_Init_:
F_SP_SACM_DVR1600_ADC_Timer_Init_:
	push r1 to [sp];

	R1 = C_DVR1600_ADC_Timer_Setting;  	
	[P_TimerA_Data] = R1;

	pop r1 from [sp];
	retf;

////////////////////////////////////////////////////////
// Function: _SP_SACM_DVR1600_DAC_Timer_Init_
// Description: Select A1600_Play DAC Sampling Rate, 
//              called by library
//              
// Destory: R1
// Parameter : None
// Return    : None
////////////////////////////////////////////////////////
_SP_SACM_DVR1600_DAC_Timer_Init_:
F_SP_SACM_DVR1600_DAC_Timer_Init_:
	push r1 to [sp];

	R1 = C_DVR1600_DAC_Timer_Setting;  	
	[P_TimerA_Data] = R1;

	pop r1 from [sp];
	retf;

////////////////////////////////////////////////////////
// Function: _SP_SACM_DVR1600_ADC_TimerDiv2_Init_
// Description: Select A1600_Rec ADC Sampling Rate
//              called by library
//              
// Destory: R1
// Parameter : None
// Return    : None
////////////////////////////////////////////////////////
_SP_SACM_DVR1600_ADC_TimerDiv2_Init_:
F_SP_SACM_DVR1600_ADC_TimerDiv2_Init_:
	push r1 to [sp];

	R1 = 0xFFFF;
	R1 -= C_DVR1600_ADC_Timer_Setting;
	R1 = R1 LSL 1;
	R1 =-R1;
	R1 += 0xFFFF;   	
	[P_TimerA_Data] = R1;

	pop r1 from [sp];
	retf;

////////////////////////////////////////////////////////
// Function: _SP_SACM_DVR1600_DAC_TimerDiv2_Init_
// Description: Select A1600_Play DAC Sampling Rate, 
//              called by library
//              
// Destory: R1
// Parameter : None
// Return    : None
////////////////////////////////////////////////////////
_SP_SACM_DVR1600_DAC_TimerDiv2_Init_:
F_SP_SACM_DVR1600_DAC_TimerDiv2_Init_:
	push r1 to [sp];

	R1 = 0xFFFF;
	R1 -= C_DVR1600_DAC_Timer_Setting;
	R1 = R1 LSL 1;
	R1 =-R1;
	R1 += 0xFFFF; 	
	[P_TimerA_Data] = R1;

	pop r1 from [sp];
	retf;

//--------------------------------------------------------------------
//-- Function: F_SACM_DVR1600_GetADC
//-- Parameter: N/A   
//-- Return: R1 = ADC data
//-- Description: This function called by library to get  
//                ADC data for recording. It can be from either Microphone
//                or line-in.
//                User would have to modified the function body 
//                based on the need to fulfill this request from 
//                library. 
//                User should store the value in register(R2-R5)if use them. 
//--------------------------------------------------------------------
F_SACM_DVR1600_GetADC:
	R1 = [R_ADC_Channel];
	cmp R1,0;
	jnz ?L_WaitLinIn;
	//For Mic
	?L_Mic:
	r1 = [P_ADC]  // from 500A/061A microphone or 500A Lin-in
	retf

	// For Line in
	?L_WaitLinIn:  // Wait for ADC ready    		
	.if BODY_TYPE == SPCE500A    
	r1 = [P_ADC] ; // from 500A/061A microphone or 500A Lin-in
	.endif		
        		 
	.if BODY_TYPE == SPCE061A    
	R1 = [P_ADC_MUX_Ctrl] 
	R1 &= 0x8000
	jz ?L_WaitLinIn;	
	r1 = [P_ADC_LINEIN_Data]  // from 061A line-in only
	.endif
	retf

//---------------------------------------------------------------
//Function : _SP_SwitchChannel
//Description: This function switches the A/D channel based on 
//             the parameter. 
//Used register: r1
//Return: none
//---------------------------------------------------------------
_SP_SwitchChannel: .proc
	push BP to [SP];
	BP = SP + 1;
	R1 = [BP + 3]; //RceMonitorOff

	call F_SP_SwitchChannel;

	pop BP from [SP];
	retf
	.ENDP

//---------------------------------------------------------------
//Function : F_SP_SwitchChannel
//Description: This function switches the A/D channel based on 
//             the parameter. 
//Used register: r1
//Return: none
//---------------------------------------------------------------
F_SP_SwitchChannel: 
	push R2 to [sp]

	[R_ADC_Channel] = R1;

	//
	// SPCE500A Setting
	//
	.if BODY_TYPE == SPCE500A
	// Check if microphone selected
	cmp R1,0;
	jnz ?L_LineIn;

	// Wait for ADC ready
	?L_Wait_AD_ready_0:
	R1=0x0015;	// 500A: MIC IN, Auto,AGC,Enable ADC
	[P_ADC_Ctrl] = r1;
	jmp ?L_Done;

	// Wait for ADC ready
	?L_LineIn:	
	R1=0x0013;	// 500A: LINE IN, Auto,Enable ADC       
	[P_ADC_Ctrl] = r1;

	?L_Done:
	.endif
	//
	// SPCE500A Setting
	//
	.if BODY_TYPE == SPCE061A
	// Check if microphone selected
	cmp R1,0;
	jnz ?L_LineIn;

	// Wait for ADC ready
	?L_Wait_AD_ready_0:
	r2 = [P_ADC_Status];
	r2 = r2 & 0x8000;
	jz  ?L_Wait_AD_ready_0
	r2 = 0x0115;  // 061A: Mic, Enable ADC              
	[P_ADC_Ctrl] = r2; 
	[P_ADC_MUX_Ctrl] = R1; // Switch channel to Mic
	R2 = [P_ADC]
	jmp ?L_Done;

	// Wait for ADC ready
	?L_LineIn:	
	?L_Wait_AD_ready_1:
	r2 = [P_ADC_Status];
	r2 = r2 & 0x8000;
	jz  ?L_Wait_AD_ready_1

	r2 = 0x0103;  // 061A: LINE IN, Enable ADC              
	[P_ADC_Ctrl] = r2; 

	[P_ADC_MUX_Ctrl] = R1; // Switch channel to Line_in
	R2 = [P_ADC_LINEIN_Data]; 

	?L_Done:
	.endif
	pop R2 from [sp];
	retf;

////////////////////////////////////////////////////////
// Function: F_SP_RampDnDAC1
// Description: Ramp down after using DAC to avoid "bow" sound
//              from speaker 
// Syntax  : F_SP_RampDnDAC1
// Destory: R1
////////////////////////////////////////////////////////
_SP_RampDnDAC1: .PROC
F_SP_RampDnDAC1:
	push R1 to [SP]; 
    R1 = [P_DAC1]; 
    R1 &= 0xffc0; 
    jz ?_Branch_0; 
    
?_Loop_0:  
    call F_SACM_Delay;
    R1 -= 0x0040; 
    [P_DAC1] = R1;   
    jnz ?_Loop_0; 
    
?_Branch_0:       
    pop R1 from [SP]; 
    retf; 
.ENDP



////////////////////////////////////////////////////////
// Function: F_SP_RampDnDAC2
// Description: Ramp down after using DAC to avoid "bow" sound
//              from speaker 
// Syntax  : F_SP_RampDnDAC2
// Destory: R1
////////////////////////////////////////////////////////
_SP_RampDnDAC2: .PROC
F_SP_RampDnDAC2:
	push R1 to [SP];                 
    R1 = [P_DAC2]; 
    R1 &= 0xffc0; 
    jz ?_Branch_0;
     
?_Loop_0: 
    call F_SACM_Delay;
    R1 -= 0x0040; 
    [P_DAC2] = R1;   
    jnz ?_Loop_0;
     
?_Branch_0:       
    pop R1 from [SP]; 
    retf 
.ENDP



////////////////////////////////////////////////////////
// Function: F_SP_RampUpDAC1
// Description: Ramp Up before using DAC to avoid "bow" sound
//              from speaker 
// Syntax  : F_SP_RampUpDAC1()
// Destory: R1
////////////////////////////////////////////////////////
_SP_RampUpDAC1: .PROC
F_SP_RampUpDAC1:
	push R1 to [SP]; 
    R1 = [P_DAC1]; 
    R1 &= 0xffc0; 
    cmp R1, 0x8000;
    jb ?_Loop_0;
    
    je ?_Branch_0;
                
?_Loop_1:
    call F_SACM_Delay; 
    R1 -= 0x0040; 
    [P_DAC1] = R1; 
    cmp R1, 0x8000; 
    jne ?_Loop_1; 
      
    jmp ?_Branch_0; 

?_Loop_0:
    call F_SACM_Delay;
    R1 += 0x0040; 
    [P_DAC1] = R1; 
    cmp R1, 0x8000; 
    jne ?_Loop_0; 
    
?_Branch_0:
	pop R1 from [SP]; 
  	retf; 
.ENDP
    


////////////////////////////////////////////////////////
// Function: F_SP_RampUpDAC2
// Description: Ramp Up before using DAC to avoid "bow" sound
//              from speaker 
// Syntax  : F_SP_RampUpDAC2()
// Destory: R1
////////////////////////////////////////////////////////
_SP_RampUpDAC2: .PROC
F_SP_RampUpDAC2:
	push R1 to [SP]; 
  	R1 = [P_DAC2]; 
    R1 &= 0xffc0; 
    cmp R1, 0x8000;
    jb ?_Loop_0;
       
    je ?_Branch_0; 
                
?_Loop_1:
    call F_SACM_Delay;
    R1 -= 0x0040; 
    [P_DAC2] = R1; 
    cmp R1, 0x8000; 
    jne ?_Loop_1; 
      
    jmp ?_Branch_0; 

?_Loop_0:
	call F_SACM_Delay; 
    R1 += 0x0040; 
    [P_DAC2] = R1; 
    cmp R1, 0x8000; 
    jne ?_Loop_0; 
    
?_Branch_0:
   	pop R1 from [SP]; 
    retf; 
.ENDP


//.if 0	
//-------------------------------------------------------
// Function: F_SACM_Delay
// Description: Provide delay for Ramp up/down 
//              The delay time is adjustable by adjusting C_SACM_RAMP_DELAY
// Destory: R1
//-------------------------------------------------------			
F_SACM_Delay: .proc
    push R1 to [SP]; 
    R1 = C_SACM_RAMP_DELAY; // Ramp Up/Dn delay per step

?_Loop_0:
    R1 -= 0x0001; 
    jnz ?_Loop_0;  
    
    pop R1 from [SP]; 
    retf;
.endp
//.endif    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线国偷精品产拍免费yy | 日韩欧美在线网站| 久久综合九色综合97婷婷女人 | 99久久精品国产精品久久| 欧美日韩激情一区二区三区| 精品国产第一区二区三区观看体验| 最新国产成人在线观看| 精品亚洲国内自在自线福利| 成人免费毛片片v| 91麻豆精品国产91| 亚洲狠狠爱一区二区三区| 国产精品2024| 精品国产免费人成在线观看| 午夜亚洲福利老司机| 色香蕉久久蜜桃| 专区另类欧美日韩| 成人性生交大片免费看中文网站| 欧美日韩情趣电影| 国产视频一区在线观看| 日韩毛片一二三区| 毛片不卡一区二区| 日韩手机在线导航| 久久国产尿小便嘘嘘尿| 欧美一区二区二区| 久久成人羞羞网站| 26uuu久久综合| 成人中文字幕电影| 综合久久一区二区三区| 99久久伊人网影院| 国产欧美日韩麻豆91| 成人av免费在线播放| 最近中文字幕一区二区三区| 91精品国产乱| 最新国产精品久久精品| 五月开心婷婷久久| 56国语精品自产拍在线观看| 一级女性全黄久久生活片免费| 舔着乳尖日韩一区| 国产精品综合视频| 欧美电影免费观看高清完整版在 | 日韩欧美中文字幕制服| 久久精品国产在热久久| 国产三级精品在线| 国产成人精品亚洲777人妖| 欧美激情一区三区| 色94色欧美sute亚洲线路一ni| 亚洲最大成人网4388xx| 91色九色蝌蚪| 欧美日本一道本在线视频| 国产精品不卡在线观看| 国产99久久久国产精品免费看| 精品国产欧美一区二区| 国产在线视频不卡二| 2021国产精品久久精品| 韩日精品视频一区| 久久这里都是精品| 国产精品一区二区在线播放| 久久精品人人做人人综合| 国产成人99久久亚洲综合精品| 国产日韩欧美a| 大白屁股一区二区视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 91麻豆免费在线观看| 亚洲日本va午夜在线影院| 色播五月激情综合网| 午夜影院久久久| 精品国产伦一区二区三区免费| 国产成人精品影院| 亚洲免费伊人电影| 欧美日本国产视频| 精品影院一区二区久久久| 国产欧美一区二区精品仙草咪| 99精品久久免费看蜜臀剧情介绍| 亚洲国产一区二区三区青草影视| 欧美一级二级三级蜜桃| 国产精品一二三四区| 亚洲图片激情小说| 欧美精品一二三| 国产精品亚洲一区二区三区妖精| 《视频一区视频二区| 欧美色综合网站| 国内成人免费视频| 亚洲欧美另类小说| 这里只有精品免费| 国产成人午夜精品5599| 亚洲黄一区二区三区| 日韩美女一区二区三区四区| 国产ts人妖一区二区| 亚洲美女电影在线| 日韩欧美国产麻豆| 成人伦理片在线| 日韩经典中文字幕一区| 中文字幕av不卡| 欧美区一区二区三区| 顶级嫩模精品视频在线看| 亚洲国产精品久久人人爱蜜臀| 久久女同互慰一区二区三区| 99国产一区二区三精品乱码| 美女网站在线免费欧美精品| 日韩一区日韩二区| 精品少妇一区二区三区在线播放 | 精品亚洲aⅴ乱码一区二区三区| 国产精品国产三级国产专播品爱网| 欧美日韩国产乱码电影| 成人久久18免费网站麻豆| 日本美女一区二区三区| 中文字幕亚洲一区二区va在线| 日韩一区二区三区高清免费看看| 91在线视频在线| 精品亚洲国产成人av制服丝袜| 亚洲一区二区欧美日韩| 国产日韩av一区二区| 91精品国产综合久久香蕉麻豆| aaa国产一区| 国产原创一区二区三区| 亚洲123区在线观看| 《视频一区视频二区| 久久久久久久性| 欧美一级搡bbbb搡bbbb| 91日韩精品一区| 国产高清视频一区| 日韩av成人高清| 夜夜精品视频一区二区| 亚洲国产经典视频| 欧美mv日韩mv国产网站| 欧美日韩高清一区| 日本高清不卡视频| 成人免费视频app| 国产麻豆精品theporn| 日韩成人av影视| 亚洲国产一区二区三区青草影视| 亚洲欧洲日韩综合一区二区| 久久久精品黄色| 精品久久久久久久久久久久包黑料 | 欧美日本国产视频| 色8久久精品久久久久久蜜| 成人看片黄a免费看在线| 国产乱淫av一区二区三区| 蜜桃av噜噜一区二区三区小说| 亚洲成a天堂v人片| 亚洲精品菠萝久久久久久久| 一区二区中文字幕在线| 中文成人综合网| 国产视频一区不卡| 2020日本不卡一区二区视频| 91精品国产入口| 欧美久久久久久久久| 欧美日韩免费一区二区三区| 在线精品亚洲一区二区不卡| 色综合久久88色综合天天6| 99精品1区2区| 色综合一区二区| 91色在线porny| 色狠狠av一区二区三区| 日本丰满少妇一区二区三区| 色综合天天综合狠狠| 91玉足脚交白嫩脚丫在线播放| 99久久婷婷国产精品综合| 国产99一区视频免费| 成人精品视频网站| 成人av免费观看| 91丨porny丨中文| 91福利视频在线| 欧美伦理视频网站| 欧美日韩黄视频| 欧美一区二区在线播放| 日韩一区二区视频| 欧美精品一区二区三区在线| 久久久亚洲精华液精华液精华液| 欧美videofree性高清杂交| ww久久中文字幕| 欧美韩日一区二区三区四区| 国产精品久久久久久久午夜片| 中文字幕日韩一区| 亚洲最大成人网4388xx| 视频一区二区三区在线| 欧美aaaaaa午夜精品| 精品一区二区三区香蕉蜜桃| 国产大片一区二区| 91免费国产在线| 在线观看成人小视频| 欧美日韩www| 精品国产成人系列| 国产精品盗摄一区二区三区| 亚洲色图在线播放| 婷婷综合五月天| 久久99久久精品欧美| 国产激情一区二区三区四区| 91啪九色porn原创视频在线观看| 欧美日韩视频在线一区二区| 欧美大片在线观看| 国产精品久久久久久久久快鸭 | www亚洲一区| 国产精品国产自产拍高清av王其| 亚洲一区二区在线免费观看视频| 人禽交欧美网站| 丁香婷婷综合激情五月色| 91麻豆.com| 日韩精品一区国产麻豆| 欧美激情中文字幕一区二区|