📄 main.asm
字号:
;call RX_mode_set
NOP
clr wdt
Timer_0_ISR_END:
MOV A,isr_tmr0_bp ;restone bp
MOV BP,A
MOV A,isr_tmr0_tblp ;restore TBLP
MOV TBLP,A
MOV A,isr_tmr0_mp0 ;restore MP0
MOV MP0,A
MOV A,isr_tmr0_mp1 ;restore MP1
MOV MP1,A
MOV A,isr_tmr0_status ;restore STATUS
MOV STATUS,A
MOV A,isr_tmr0_acc ;restore ACC
;SET TMR0C.4 ;start timer0
RETI
;***************************************************************
; Timer_1_ISR
; 1.Timer time = 21.2 ms
; 2.Do this procedure is 3.6ms
;***************************************************************
Timer_1_ISR:
CLR TMR1C.4
SET INTC0.@INTC0_EMI
MOV isr_tmr1_acc,A ;save ACC
MOV A,STATUS
MOV isr_tmr1_status,A ;save status
MOV A,MP1
MOV isr_tmr1_mp1,A ;save mp1
MOV A,MP0
MOV isr_tmr1_mp0,A ;save mp0
MOV A,TBLP
MOV isr_tmr1_tblp,A ;save TBLP
MOV A,BP
MOV isr_tmr1_bp,A ;save bp
clr BP
clr wdt
SET TMR1_KEY_FG
IF UseMediaKey
call Key_Debounced
ENDIF
call Run_Volume_Step
MOV A,isr_tmr1_bp ;restone bp
MOV BP,A
MOV A,isr_tmr1_tblp ;restore TBLP
MOV TBLP,A
MOV A,isr_tmr1_mp0 ;restore MP0
MOV MP0,A
MOV A,isr_tmr1_mp1 ;restore MP1
MOV MP1,A
MOV A,isr_tmr1_status ;restore STATUS
MOV STATUS,A
MOV A,isr_tmr1_acc ;restore ACC
Timer_1_ISR_End:
SET TMR1C.4
RETI
;***************************************************************
; USB_ISR : USB Interrupt Routine
; 1.Back up every status register
; 2.check which endpoint is interrupt
;***************************************************************
USB_ISR:
CLR INTC0.@INTC0_EEI ;disable USB interrupt
;modify 2006-09-11
CLR ET1I
SET INTC0.@INTC0_EMI
MOV isr_usb_acc,A ;save ACC
MOV A,STATUS
MOV isr_usb_status,A ;save status
MOV A,MP1
MOV isr_usb_mp1,A ;save mp1
MOV A,MP0
MOV isr_usb_mp0,A ;save mp0
MOV A,TBLP
MOV isr_usb_tblp,A ;save TBLP
MOV A,BP
MOV isr_usb_bp,A ;save bp
clr BP
clr wdt
;;Check Which FIFO is interrupt
JMP Check_Access_FIFO
USB_ISR_END:
MOV A,isr_usb_bp ;restone bp
MOV BP,A
MOV A,isr_usb_tblp ;restore TBLP
MOV TBLP,A
MOV A,isr_usb_mp0 ;restore MP0
MOV MP0,A
MOV A,isr_usb_mp1 ;restore MP1
MOV MP1,A
MOV A,isr_usb_status ;restore STATUS
MOV STATUS,A
MOV A,isr_usb_acc ;restore ACC
;modify 2006-08-18
;CLR INTC0.@INTC0_EMI
SET ET1I
SET INTC0.@INTC0_EEI
RETI
;***************************************************************
; USB_EPX_ISR
;***************************************************************
Check_Access_FIFO:
clr wdt
SZ USR.@USR_EP0F
JMP USB_EP0_ISR
SZ USR.@USR_EP1F
JMP USB_EP1_ISR
SZ USR.@USR_EP2F
JMP USB_EP2_ISR
SZ USR.@USR_EP3F
JMP USB_EP3_ISR
SZ USR.@USR_EP4F
JMP USB_EP4_ISR
JMP USB_ISR_END
;-----------------------------------------------------
;EPNPOINT 0
;-----------------------------------------------------
USB_EP0_ISR:
;modify 2006-07-27
;CLR USR.@USR_EP0F ;Fix Bus Enumeration Stress
;;case1
SZ MISC.@MISC_SCMD ;check setup token
JMP USB_EP0_SETUP_TOKEN
SZ MISC.@MISC_LEN0 ;check out ack token
JMP USB_EP0_OUT_ACK_TOKEN
CALL FIFO0_RD_CHECK
SZ bFlag_FIFO_Ready
JMP USB_EP0_OUT_TOKEN
;clr MISC.@MISC_REQ
CALL FIFO0_WR_CHECK
SZ bFlag_FIFO_Ready
JMP USB_EP0_IN_TOKEN ;else is in token
;clr MISC.@MISC_REQ
;modify 2006-08-28
CLR USR.@USR_EP0F ;Fix OHCI Volume
JMP USB_EP0_ISR_END
;;case2
;; SZ MISC.@MISC_SCMD ;check setup token
;; JMP USB_EP0_SETUP_TOKEN
;;
;; SZ MISC.@MISC_LEN0 ;check out ack token
;; JMP USB_EP0_OUT_ACK_TOKEN
;;
;; CALL FIFO0_RD_CHECK
;; SZ bFlag_FIFO_Ready
;; JMP USB_EP0_OUT_TOKEN
;; ;clr MISC.@MISC_REQ
;;
;; CALL FIFO0_WR_CHECK
;; SZ bFlag_FIFO_Ready
;; JMP USB_EP0_IN_TOKEN ;else is in token
;; ;clr MISC.@MISC_REQ
;;
;;
;; JMP USB_EP0_ISR_END
;;case3
;; call FIFO0_RD_CHECK
;; sz bFlag_FIFO_Ready
;; jmp Have_Data_Out
;;
;; call FIFO0_WR_CHECK
;; sz bFlag_FIFO_Ready
;; jmp USB_EP0_IN_TOKEN
;;
;; jmp USB_EP0_ISR_END
;;
;;Have_Data_Out:
;; sz MISC.@MISC_SCMD
;; jmp USB_EP0_SETUP_TOKEN
;; sz MISC.@MISC_LEN0
;; jmp USB_EP0_OUT_ACK_TOKEN
;;
;; jmp USB_EP0_OUT_TOKEN
USB_EP0_SETUP_TOKEN: ;PARSE SETUP TOKEN
clr wdt
CALL StageOne
JMP USB_EP0_ISR_END
USB_EP0_IN_TOKEN:
clr wdt
;modify 2006-08-28
CLR USR.@USR_EP0F ;Fix OHCI Volume
CALL control_read
JMP USB_EP0_ISR_END
USB_EP0_OUT_ACK_TOKEN:
;modify 2006-08-28
CLR USR.@USR_EP0F ;Fix OHCI Volume
clr wdt
clr MISC.@MISC_LEN0
;; call Delay_3us
JMP USB_EP0_ISR_END
USB_EP0_OUT_TOKEN:
;modify 2006-08-28
CLR USR.@USR_EP0F ;Fix OHCI Volume
clr wdt
clr acc
xor a,nCmdIndex1
sz z
jmp USB_EP0_ISR_END
USB_EP0_OUT_TOKEN_Loop:
clr wdt
CALL Check_Real_Cmd
sz bFlag_Real_Cmd
jmp USB_EP0_OUT_TOKEN_End
clr wdt
CALL FIFO0_RD_CHECK
SNZ bFlag_FIFO_Ready
JMP USB_EP0_OUT_TOKEN_Loop
CALL READ_FIFO0
NOP
CALL Send_Hand_Shake
;decode command
;//parse Cmd , 21H = SetReport Out Data
mov a,21H
xor a,nCmdIndex1
sz z
jmp ProcessOutData
;//parse Cmd , 18H = Speaker Mute Control
mov a,18H
xor a,nCmdIndex1
sz z
jmp Implement_Speaker_Mute
;//parse Cmd , 19H = Mic Mute Control
mov a,19H
xor a,nCmdIndex1
sz z
jmp Implement_Mic_Mute
;//parse Cmd , 28H = Speaker Volume Control
mov a,28H
xor a,nCmdIndex1
sz z
jmp Implement_Speaker_Volume
;//parse Cmd , 29H = Mic Volume Control
mov a,29H
xor a,nCmdIndex1
sz z
jmp Implement_Mic_Volume
;//unknow command
jmp USB_EP0_OUT_TOKEN_End
USB_EP0_OUT_TOKEN_End:
clr nCmdIndex1
JMP USB_EP0_ISR_END
Implement_Speaker_Mute:
clr wdt
sz FIFO_out1.0
clr USVC.7 ;mute
snz FIFO_out1.0
set USVC.7 ;unmute
sz FIFO_out1.0
set bFlag_Audio_Mute ;mute
snz FIFO_out1.0
clr bFlag_Audio_Mute ;unmute
snz bFlag_Audio_Mute
jmp Implement_Speaker_Mute_1
mov a,Min_Volume
mov USVC,a
clr USVC.7
Implement_Speaker_Mute_1:
jmp USB_EP0_OUT_TOKEN_End
Implement_Mic_Mute:
clr wdt
sz FIFO_OUT1.0
clr PGA_CTRL.7 ;mute
snz FIFO_OUT1.0
set PGA_CTRL.7 ;unmute
sz FIFO_out1.0
set bFlag_Mic_Mute ;mute
snz FIFO_out1.0
clr bFlag_Mic_Mute ;unmute
jmp USB_EP0_OUT_TOKEN_End
Implement_Speaker_Volume:
clr wdt
kmov VolumeH_Save,FIFO_out1
kmov VolumeL_Save,FIFO_out2
Implement_Speaker_Volume_End:
jmp USB_EP0_OUT_TOKEN_End
Implement_Mic_Volume:
clr wdt
mov a,7FH
xor a,FIFO_OUT2
sz z
jmp Implement_Mic_Volume_Set_Max
mov a,80H
xor a,FIFO_OUT2
sz z
jmp Implement_Mic_Volume_Set_Min
kmov FIFO_TEMP,FIFO_OUT2
jmp Implement_Mic_Volume_1
Implement_Mic_Volume_Set_Max:
clr wdt
kmov FIFO_TEMP,MIC_Max_Volume
jmp Implement_Mic_Volume_1
Implement_Mic_Volume_Set_Min:
clr wdt
kmov FIFO_TEMP,MIC_Min_Volume
jmp Implement_Mic_Volume_1
Implement_Mic_Volume_1:
clr wdt
mov a,80H
and a,PGA_CTRL
or a,FIFO_TEMP
mov PGA_CTRL,a
Implement_Mic_Volume_End:
jmp USB_EP0_OUT_TOKEN_END
USB_EP0_ISR_END:
;modify 2006-07-27
CLR USR.@USR_EP0F ;Fix Bus Enumeration Stress
JMP USB_ISR_END
;-----------------------------------------------------
;EPNPOINT 1 Interrupt
;-----------------------------------------------------
USB_EP1_ISR:
;check the data is in fifo ?
;CALL FIFO1_RD_CHECK
;SNZ bFlag_FIFO_Ready
;JMP USB_EP1_ISR_END
;CALL Read_FIFO1
;;CALL FIFO1_WR_CHECK
;;SNZ bFlag_FIFO_Ready
;;JMP USB_EP1_ISR_END
;;MOV A,00H
;;MOV FIFO_OUT1,A
;;MOV A,01H
;;MOV FIFO_SendLen,A
;;CALL WRITE_FIFO1
USB_EP1_ISR_END:
CLR USR.@USR_EP1F
JMP USB_ISR_END
;-----------------------------------------------------
;EPNPOINT 2 Interrupt
;-----------------------------------------------------
USB_EP2_ISR:
;;SET ET0I ;enable timer0
;;SET TMR0C.4 ;Enable timer0 counter
;modify 2006-07-27
;SET ET1I
;SET TMR1C.4
clr MISC.@MISC_ISOEN ;close ISO(output) interrupt
USB_EP2_ISR_END:
CLR USR.@USR_EP2F
JMP USB_ISR_END
;-----------------------------------------------------
;EPNPOINT 3 Interrupt
;-----------------------------------------------------
USB_EP3_ISR:
clr MISC.@MISC_ISIEN ;close ISO(input) interrupt
USB_EP3_ISR_END:
CLR USR.@USR_EP3F
JMP USB_ISR_END
;-----------------------------------------------------
;EPNPOINT 4 Interrupt
;-----------------------------------------------------
USB_EP4_ISR:
USB_EP4_ISR_END:
CLR USR.@USR_EP4F
JMP USB_ISR_END
;***************************************************************
; Stage One .... Test bmRequestType
; CALL FIFO_RD_CHECK will return bFlag_FIFO_Ready?(1=Ready,0=not ready)
;***************************************************************
StageOne:
clr wdt
CALL FIFO0_RD_CHECK
SNZ bFlag_FIFO_Ready
JMP StageOne_End ; the EP0 FIFO RD is not ready
CALL Read_FIFO0 ; Read EP0 Command
clr MISC.@MISC_SCMD
clr MISC.@MISC_LEN0
;modify 2006-08-28
CLR USR.@USR_EP0F ;Fix OHCI Volume
clr wdt
nop
MOV A,FIFO_TYPE
XOR A,00H
SZ Z ;FIFO_TYPE=00H
JMP Request_Type00
MOV A,FIFO_TYPE
XOR A,01H
SZ Z ;FIFO_TYPE=01H
JMP Request_Type01
MOV A,FIFO_TYPE
XOR A,02H
SZ Z ;FIFO_TYPE=02H
JMP Request_Type02
MOV A,FIFO_TYPE
XOR A,80H
SZ Z ;FIFO_TYPE=80H
JMP Request_Type80
MOV A,FIFO_TYPE
XOR A,81H
SZ Z ;FIFO_TYPE=81H
JMP Request_Type81
MOV A,FIFO_TYPE
XOR A,82H
SZ Z ;FIFO_TYPE=82H
JMP Request_Type82
;===============================================================
;HID & Audio
;===============================================================
MOV A,FIFO_TYPE
XOR A,21H
SZ Z
JMP Request_Type21
;Volume Control
clr wdt
MOV A,FIFO_TYPE
XOR A,0A1H
SZ Z
JMP Request_TypeA1
JMP SendStall0
StageOne_End:
;modify 2006-08-28
CLR USR.@USR_EP0F ;Fix OHCI Volume
RET
;***************************************************************
; USB Stage2
;
;***************************************************************
;Device to Host with device as recipient
;===============================================================
;Request_Type00
;bRequest Function
; 1 Clear Feature
; 3 Set Feature
; 5 Set Address
; 7 not support
; 9 Set Configuration
;===============================================================
;===============================================================
Request_TYPE00:
;Set the device address to a non-zero value
;Set address
clr wdt
MOV A,FIFO_REQUEST
XOR A,set_address
SZ Z
JMP SetAddress
;Set Configuration
MOV A,FIFO_REQUEST
XOR A,set_configuration
;---------------------
;modify 2006-07-27
SNZ Z
JMP Request_TYPE00_NEXT
SET ET1I
SET TMR1C.4
;---------------------
JMP SetConfiguration
;Clear Feature
;The HT82A822R return ACK without ERROR
;---------------------
;modify 2006-07-27
Request_TYPE00_NEXT:
;---------------------
MOV A,FIFO_REQUEST
XOR A,clear_feature
SZ Z
JMP ClearFeature
;Set Feature
clr wdt
MOV A,FIFO_REQUEST
XOR A,set_feature
SZ Z
JMP SetFeature
JMP SendStall0
;===============================================================
Request_Type01:
clr wdt
MOV A,FIFO_REQUEST
XOR A,set_interface
SZ Z
JMP SetInterface
JMP SendStall0
;===============================================================
Request_Type02:
clr wdt
MOV A,FIFO_REQUEST
XOR A,clear_feature
SZ Z
JMP ClearFeature_Endpoint
MOV A,FIFO_REQUEST
XOR A,set_feature
SZ Z
JMP SetFeature_Endpoint
JMP SendStall0
;===============================================================
Request_TYPE80:
;Get Status
;Get Descriptor 80 06
clr wdt
MOV A,FIFO_REQUEST
XOR A,get_descriptor
SZ Z
JMP GetDescriptor
;Get Configuration 80 08
clr wdt
MOV A,FIFO_REQUEST
XOR A,get_configuration
SZ Z
JMP GetConfiguration
;Get Status(DEVICE) 80 00
clr wdt
MOV A,FIFO_REQUEST
XOR A,get_status
SZ Z
JMP GetStatus
JMP SendStall0
;===============================================================
Request_TYPE81:
;get status
;get interface -> not support
;HID class defines one more request for bmRequestType=81
;get HID descriptor
clr wdt
MOV A,FIFO_REQUEST
XOR A,get_descriptor
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -