📄 main.asm
字号:
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 + -