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

📄 main.asm

📁 Holtek audio decoder , Dongle 参考范例
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		SZ		Z
		JMP		GetDescriptor

;Get Interface
		clr wdt
		MOV		A,FIFO_REQUEST
		XOR		A,get_interface
		SZ		Z
		JMP		GetInterface

;Get Status(INTERFACE)			81 00
		clr wdt
		MOV		A,FIFO_REQUEST
		XOR		A,get_status
		SZ		Z
		JMP		GetStatus

		JMP		SendStall0
;===============================================================
Request_TYPE82:
;get status
;Get Status(INTERFACE)			82 00
		clr wdt
		MOV		A,FIFO_REQUEST
		XOR		A,get_status
		SZ		Z
		JMP		GetStatus_Endpoint

		JMP		SendStall0
	
;===============================================================
;===============================================================
;Now parse HID class Descriptor Types
;===============================================================
;host to device with endpoint as recipient
Request_TYPE21:
		clr wdt
		;set report
		MOV		A,FIFO_REQUEST
		XOR		A,set_report
		SZ		Z
		JMP		SetReport


		;set idle	bRequest = 10
		;MOV		A,FIFO_REQUEST
		;XOR		A,set_idle
		;SZ		Z
		;JMP		SetIdle

		;------------------------------------------------------
		;audio class-specific request code
		;------------------------------------------------------
		;set_cur
		MOV		A,FIFO_REQUEST
		XOR		A,SET_CUR
		SZ		Z
		JMP		SetCur

Request_TYPE21_End:
		JMP		SendStall0	
		


Request_TypeA1:
		MOV		A,FIFO_REQUEST
		XOR		A,GET_MIN
		SZ		Z
		JMP		GetMin
		
		MOV		A,FIFO_REQUEST
		XOR		A,GET_MAX
		SZ		Z
		JMP		GetMax
		
		MOV		A,FIFO_REQUEST
		XOR		A,GET_RES
		SZ		Z
		JMP		GetRes

		MOV		A,FIFO_REQUEST
		XOR		A,GET_CUR
		SZ		Z
		JMP		GetCur
		

Request_TYPEA1_End:
		JMP		SendStall0
;===============================================================
;	POOL Function
;===============================================================

HT_POOL:
	;set		PE.1
	;call	Spectrum_Show
	;call	Plot_EQ
	;clr		PE.1
	;call	Detect_Volume_Key		
	ret	
;===============================================================
ProcessOutData:
		sz		bFlag_Real_Cmd
		jmp		ProcessOutData_End
		
		clr wdt	
		;;CALL		FIFO0_RD_CHECK
		;;SNZ		bFlag_FIFO_Ready
		;;JMP		ProcessOutData		; the EP0 FIFO RD is not ready		

		;;call		Read_FIFO0
		nop
		call		FIFO1_WR_CHECK
		snz		bFlag_FIFO_Ready
		jmp		ProcessOutData_End
		
		call		Write_FIFO1
		

ProcessOutData_End:
		clr		nCmdIndex1
		jmp		USB_EP0_ISR_END	




Delay_20ms:
		clr wdt
			mov		a,075H
			mov		Delay_1,a
			mov		a,0FFH
			mov		Delay_2,a
Delay_20ms_Wait:
		clr wdt
			SDZ		Delay_2
			JMP		Delay_20ms_Wait
			SDZ		Delay_1
			JMP		Delay_20ms_Wait
			RET

Delay_5ms:
		clr wdt
			mov		a,03AH
			mov		Delay_1,a
			mov		a,0FFH
			mov		Delay_2,a
Delay_5ms_Wait:
		clr wdt
			SDZ		Delay_2
			JMP		Delay_5ms_Wait
			SDZ		Delay_1
			JMP		Delay_5ms_Wait
			RET


Delay 	PROC
		clr wdt
		MOV		A,0FFH
		MOV		Delay_1,A
		MOV		Delay_2,A

Wait:
		clr wdt
		SDZ		Delay_2
		JMP		Wait
		SDZ		Delay_1
		JMP		Wait
		RET

Delay	ENDP



;***************************************************************
;		Run_Volume_Step Module
;		Volume1:Target
;		Volume2:Now
;***************************************************************
Run_Volume_Step:
		clr wdt
		clr	TMR1_KEY_FG
		;check mute?
		sz		bFlag_Audio_Mute
		jmp		Run_Volume_Step_End

	
		mov		a,VolumeL_Save
		mov		Volume1,a

		;check Volume1 = 080H ?
		mov		a,80H
		xor		a,Volume1
		sz		z
		jmp		Run_Volume_Step_Process_Min
		jmp		Run_Volume_Step_1

Run_Volume_Step_Process_Min:
		mov		a,Min_Volume
		mov		Volume1,a

		

Run_Volume_Step_1:		
		
		clr		Volume1.7

		mov		a,01111111b
		and		a,USVC
		mov		Volume2,a		;Volume2=now Volume1=target
		
		
		mov		a,Volume1
		xor		a,Volume2
		sz		z
		jmp		Run_Volume_Step_End	;target=now
		
		clr wdt
		mov		a,Volume1
		sub		a,Volume2		;target-now
		sz		C
		jmp		Run_Volume_1		;>0
		jmp		Run_Volume_2		;<0
		
Run_Volume_1:
		snz		Volume1.6
		jmp		Run_Volume_Step_Inc
		snz		Volume2.6
		jmp		Run_Volume_Step_Dec
		jmp		Run_Volume_Step_Inc
		
Run_Volume_2:
		snz		Volume2.6
		jmp		Run_Volume_Step_Dec
		snz		Volume1.6
		jmp		Run_Volume_Step_Inc
		jmp		Run_Volume_Step_Dec

		

Run_Volume_Step_Inc:
		INC		Volume2
		jmp		Run_Volume_Step_2
Run_Volume_Step_Dec:
		DEC		Volume2		
Run_Volume_Step_2:		
		sz		USVC.7
		set		Volume2.7
		snz		USVC.7
		clr		Volume2.7
		kmov		USVC,Volume2
		clr wdt
Run_Volume_Step_End:				
		ret


;***************************************************************
;		Key_Debounced Module
;		Key_Defined : bits want to detect
;		Key_Process : set the bit when proces
;		Key_CheckIn : set the bit if detect a pressed key first
;		Key_Counter : i th  bit pressed
;		If supportc key press continuously,  do not set Key_Process (Ex: INC,DEC Volume)
;		If supportc key press continuously,  should set Key_Process (Ex: Mute,Play,Stop)
;***************************************************************
#define		UseReportID	1
IF	UseMediaKey
Key_Debounced:
				clr wdt	
	       	mov		a,RX_key_code
		cpl		acc
		mov		PortC_Data,a

		mov		a,Key_Defined
		and		a,PortC_Data
		sz		z
		jmp		Key_Debounced_ClearReg	;//no key pressed


Key_Debounced_Detect_In:		
		kmov		Key_Temp,PortC_Data
		clr		Key_Counter
Key_Debounced_Detect:		
		clr		C
		RRC		Key_Temp
		sz		C
		jmp		Key_Debounced_Detect_End
		inc		Key_Counter
		mov		a,8
		;xor		a,Key_Temp
		xor		a,Key_Counter
		sz		z
		jmp		Key_Debounced_Detect_End
		jmp		Key_Debounced_Detect
Key_Debounced_Detect_End:
		mov		a,Key_Counter
		call		GetPipeBit
		
		xor		a,Key_CheckIn
		snz		z
		jmp		Key_Debounced_SetCheckIn
		
		;check process
		mov		a,Key_Process
		xor		a,Key_CheckIn
		sz		z
		jmp		Key_Debounced_End
		jmp		Key_Debounced_Process		
		
;mp Key_Debounced_End if N/A
		nop
		nop
		nop
Key_Debounced_Process:
		clr wdt	
		mov	a,Key_Counter
		addm	a,pcl
		jmp	Key_Debounced_PA0
		jmp	Key_Debounced_Process_Dec 
		jmp	Key_Debounced_Process_Inc
		jmp	Key_Debounced_Process_Mute
		jmp	Key_Debounced_PA4
		jmp	Key_Debounced_PA5
		jmp	Key_Debounced_PA6
		jmp	Key_Debounced_PA7

Key_Debounced_SetCheckIn:
		mov	Key_CheckIn,a
		clr	Key_Process
		kmov	Key_IncCounter,Const_Counter
		kmov	Key_DecCounter,Const_Counter
		jmp	Key_Debounced_End

Key_Debounced_ClearReg:
		clr		acc
		xor		a,Key_CheckIn
		sz		z
		jmp		Key_Debounced_End
		jmp		Key_Debounced_ClearReg_2
;		clr		acc
;		xor		a,Key_Process
;		snz		z
;		jmp		Key_Debounced_ClearReg_2
;		jmp		Key_Debounced_End

Key_Debounced_ClearReg_2:
		clr		Key_CheckIn
		clr		Key_Process

Key_Debounced_ClearReg_1:
		CALL		FIFO1_WR_CHECK
		SNZ		bFlag_FIFO_Ready
		JMP		Key_Debounced_End
		
	IF	UseReportID
		MOV		A,01H		;REPORT ID
		MOV		FIFO_OUT1,A
		MOV		A,00H
		MOV		FIFO_OUT2,A
		MOV		A,02H
		MOV		FIFO_SendLen,A		
	ELSE
		MOV		A,00H
		MOV		FIFO_OUT1,A
		MOV		A,01H
		MOV		FIFO_SendLen,A		
	ENDIF
		
		CALL		WRITE_FIFO1
		;//write fifo
		nop				
		
Key_Debounced_My_Function:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		nop
		
		
		jmp		Key_Debounced_End	

Key_Debounced_End:
		clr wdt	
		ret
;=========================Process
Key_Debounced_Process_Mute:
		clr wdt	
		CALL		FIFO1_WR_CHECK
		SNZ		bFlag_FIFO_Ready
		JMP		Key_Debounced_End

	IF	UseReportID
		MOV		A,01H		;REPORT ID
		MOV		FIFO_OUT1,A
		MOV		A,04H
		MOV		FIFO_OUT2,A
		MOV		A,02H
		MOV		FIFO_SendLen,A		
	ELSE
		MOV		A,04H
		MOV		FIFO_OUT1,A
		MOV		A,01H
		MOV		FIFO_SendLen,A				
	ENDIF
		
		CALL		WRITE_FIFO1	
		nop
		kmov	Key_Process,Key_CheckIn
		jmp	Key_Debounced_End
Key_Debounced_Process_Dec:
		clr wdt	
		sdz	Key_DecCounter
		jmp	Key_Debounced_End

		CALL		FIFO1_WR_CHECK
		SNZ		bFlag_FIFO_Ready
		JMP		Key_Debounced_End
		
	IF	UseReportID
		MOV		A,01H		;REPORT ID
		MOV		FIFO_OUT1,A	
		MOV		A,02H
		MOV		FIFO_OUT2,A
		MOV		A,02H
		MOV		FIFO_SendLen,A		
	ELSE	
		MOV		A,02H
		MOV		FIFO_OUT1,A
		MOV		A,01H
		MOV		FIFO_SendLen,A		
	ENDIF
		CALL		WRITE_FIFO1
		nop
		kmov	Key_DecCounter,Const_Counter
		nop
		jmp	Key_Debounced_End

Key_Debounced_Process_Inc:
		clr wdt	
		sdz	Key_IncCounter
		jmp	Key_Debounced_End

		CALL		FIFO1_WR_CHECK
		SNZ		bFlag_FIFO_Ready
		JMP		Key_Debounced_End
		
	IF	UseReportID
		MOV		A,01H		;REPORT ID
		MOV		FIFO_OUT1,A
		MOV		A,01H
		MOV		FIFO_OUT2,A
		MOV		A,02H
		MOV		FIFO_SendLen,A		
	else	
		MOV		A,01H
		MOV		FIFO_OUT1,A
		MOV		A,01H
		MOV		FIFO_SendLen,A		
	ENDIF	
	
		CALL		WRITE_FIFO1
		nop
		kmov	Key_IncCounter,Const_Counter
		nop
		jmp	Key_Debounced_End


;===============================================================
;		User Add Some Key Debounced Code
;===============================================================
Key_Debounced_PA0:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		NOP

		jmp	Key_Debounced_End

Key_Debounced_PA4:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		NOP

		jmp	Key_Debounced_End

Key_Debounced_PA5:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		NOP

		jmp	Key_Debounced_End

Key_Debounced_PA6:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		NOP

		jmp	Key_Debounced_End

Key_Debounced_PA7:
	;-----------------------------------------------------------
	; Here to add your another code !!
	;-----------------------------------------------------------
		NOP

		jmp	Key_Debounced_End


ENDIF


wait_about_1s:
	;;;*******************************************
	;;;delay 1S 255*255*3*16*0.3333333=1.04S
	;;;*******************************************
		clr wdt	
		clr		Delay_1
		clr		Delay_2
		kmov		Delay_3,16
	wait_about_1s_loop:
		clr wdt	
		sdz		Delay_1
		jmp		wait_about_1s_loop
		sdz		Delay_2
		jmp		wait_about_1s_loop
		sdz		Delay_3
		jmp		wait_about_1s_loop
		clr wdt	
		nop
	ret	

;modify 2006-09-22
Public		FIFO_SIZE
;------------------------
Public		FIFO_SendLen
Public		FIFO_Type
Public		FIFO_Request
Public		FIFO_wValueL
Public		FIFO_wValueH
Public		FIFO_wIndexL
Public		FIFO_wIndexH
Public		FIFO_wLengthL
Public		FIFO_wLengthH

Public		FIFO_Out1
Public		FIFO_Out2
Public		FIFO_Out3
Public		FIFO_Out4
Public		FIFO_Out5
Public		FIFO_Out6
Public		FIFO_Out7
Public		FIFO_Out8

Public		USB_Interface
Public		USB_Interface_Alt
Public		USB_Configuration

Public		FIFO_ADDR



Public		nCmdIndex1
Public		nCmdIndex2
Public		nCmdIndex3

Public		Loop_Counter
Public		Data_Count
Public		Data_Start
Public		FIFO_TEMP
Public		bFlag_Real_Cmd
Public		bFlag_FIFO_Ready
Public		bFlag_FIFO_LEN0
Public		bFlag_RD_HTable
Public		bFlag_wait_control_out
Public		bFlag_SET_ADDRESS
Public		bFlag_SCMD
Public		bFlag_Enum_Ready
Public		bFlag_SetConfiguration_Ready
Public		bFlag_SetInterface_Ready


Public		USB_ISR_END
Public		USB_EP0_ISR_END
Public		StageOne




Public	VolumeH_Save
Public  VolumeL_Save
Public	bFlag_Audio_Mute
;modify 2006-09-28
Public	bFlag_Mic_Mute

Public	TX_FIFO_STACK
Public	RX_FIFO_STACK
Public	TX_FIFO_ADDR
Public	TX_FIFO_ADDR1
Public	RX_FIFO_ADDR
Public	RX_FIFO_ADDR1
Public	FIFO_COUNTER
Public	ADC_FIFO_COUNTER
Public	DAC_FIFO_COUNTER
Public	TX_FIFO_ADDR_temp
Public	RX_FIFO_ADDR_temp
Public  RX_FIFO_Status
Public	RX_key_code
Public	channel_1
Public  channel_2

Public	bFlag_TX_FIFO
Public	bFlag_TX_FIFO_Select
Public	bFlag_TX_FIFO_Select1
Public	bFlag_RX_FIFO_Select
Public	bFlag_RX_FIFO_Select1
Public	bFlag_TX_Mode
Public	bFlag_RX_Mode
Public	bFlag_RX_SPI
Public	bFlag_End_SPI_Operation

Public	temp_num
Public	table_data
Public	COMMAND_L
Public	COMMAND_H
Public	RF_number

Public  TX_ADDRESS_Select
Public  RX_ADDRESS_Select
Public	nRF_ADDR_value

Public	Delay_1
Public	Delay_2
Public	Delay_3

END

⌨️ 快捷键说明

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