?? usblib2.asm
字號:
include ht82k96e.inc
;include usbrf.inc
include usbfifo.inc
extern stall :byte
extern FIFO_Type :byte
extern FIFO_OUT1 :byte
extern int_temp1 :byte
extern int_temp2 :byte
extern fifo_sendlen :byte
extern bhas_len0 :bit
;extern bFLAG_FIFO_REDY :bit
;extern bFLAG_AdrF :bit
extern bRmtWakeup :bit
extern baddr_state :bit
extern CMD_ADDR :byte
FIFO_temp equ int_temp1
fifo_no equ int_temp2
FIFO_ADDR equ int_temp1
USBlib .Section AT 270H 'code' ;AT USBlib_ADDRESS
;----------------------------------------------------------------------------
;FIFO 0 ready to read ?
FIFO0_Rd_Check:
mov a,00000000b
jmp FIFO_Check
FIFO1_RD_check:
mov a,00001000b
jmp FIFO_Check
FIFO2_RD_check:
mov a,00010000b
jmp FIFO_Check
FIFO3_RD_check:
mov a,00011000b
jmp FIFO_Check
;----------------------------------------------------------------------------
;Len 0 ready to write ?
LEN0_Wr_Check:
;FIFO 0 ready to write ?
FIFO0_Wr_Check:
mov a,00000010b
jmp FIFO_Check
FIFO1_Wr_check:
mov a,00001010b
jmp FIFO_Check
FIFO2_Wr_check:
mov a,00010010b
jmp FIFO_Check
FIFO3_Wr_check:
mov a,00011010b
jmp FIFO_Check
FIFO_Check:
mov FIFO_temp,a
MOV A,USB_MISC
MOV MP1,A
mov a,r1
and a,11100000b
or a,fifo_temp
mov r1,a
call wait_4us
SET R1.@USB_Req ;Set request
call wait_4us
MOV A,(01H SHL @USB_Ready) ;access ready flag
Check:
call wait_28us
AND A,R1 ;Z=0:ready/1:not ready
RET
;----------------------------------------------------------------------------
;----BEGIN (Read FIFO)
ReadFIFO0:
MOV A,USB_FIFO0
JMP ReadFIFO
ReadFIFO1:
MOV A,USB_FIFO1
JMP ReadFIFO
ReadFIFO2:
MOV A,USB_FIFO2
JMP ReadFIFO
ReadFIFO3:
MOV A,USB_FIFO3
JMP ReadFIFO
ReadFIFO:
MOV FIFO_NO,A ;FIFO NO.
CLR FIFO_SendLen ;Initial length to 0
MOV A,OFFSET FIFO_Type ;set input FIFO buffer pointer
MOV MP0,A ;
ReadFIFOLoop:
MOV A,FIFO_NO ;FIFO NO.
MOV MP1,A ;
MOV A,R1 ;Read FIFO data
nop
MOV R0,A ;
INC FIFO_SendLen ;Getting data length++
INC MP0 ;Update to next pointer
MOV A,FIFO_SIZE ;FIFO full ?
XOR A,FIFO_SendLen ;
SZ Z ;
JMP E1ND_Request ;Yes
MOV A,USB_MISC ;Check ready ?
MOV MP1,A ;
call wait_28us
SZ R1.@USB_Ready ;
JMP ReadFIFOLoop ;Yes
JMP E1ND_Request ;No Exit for not 8 bytes data
;----END (Read FIFO)
;----------------------------------------------------------------------------
;----BEGIN (Write FIFO)
;Write FIFO_OUT1 Data to FIFO Buffer
WriteFIFO0:
MOV A,USB_FIFO0
JMP WriteFIFO
WriteFIFO1:
MOV A,USB_FIFO1
JMP WriteFIFO
WriteFIFO2:
MOV A,USB_FIFO2
JMP WriteFIFO
WriteFIFO3:
MOV A,USB_FIFO3
JMP WriteFIFO
WriteFIFO:
MOV FIFO_NO,A ;FIFO NO.
MOV A,OFFSET FIFO_OUT1 ;set output FIFO buffer pointer
MOV MP0,A ;
WriteFIFOLoop:
SZ FIFO_SendLen ;Any data to write ?
JMP WriteFIFOTag ;Yes
JMP EndWrite ;No
WriteFIFOTag:
MOV A,FIFO_NO ;FIFO NO.
MOV MP1,A ;
SET FIFO_w_c_b
MOV A,R0 ;Write data to FIFO
MOV R1,A ;
CLR FIFO_w_c_b
DEC FIFO_SendLen ;Getting data length++
INC MP0 ;Update to next pointer
MOV A,USB_MISC ;End of FIFO ?
MOV MP1,A ;
call wait_28us
SZ R1.@USB_Ready ;
JMP WriteFIFOLoop ;No
jmp EndWrite
;------------------------------------------------------------------------
WriteLen0:
;; SnZ bFLAG_FIFO_REDY
;; jmp E1ND_Request
;; set bFLAG_AdrF ;have finished address write
;; clr bFLAG_FIFO_REDY
;; clr int_reg.@int0
;;wait_int0_high:
;; clr wdt
;; snz int_reg.@int0
;; jmp wait_int0_high
EndWrite:
;----------------------------------------------------------------------------
;----BEGIN (End request)
E1ND_Request:
MOV A,USB_MISC
MOV MP1,A
MOV A,(01H SHL @USB_Tx) ;Change Tx state
clr intc.0
XORM A,R1 ;
call wait_4us
CLR R1.@USB_Req ;End request
set intc.0
RET
;;wait_zero_len_out:
;; sz r1.@USB_Setup
;; ret ;continue to scan keyboard
;;
;; set r1.@USB_Tx
;; call wait_4us
;; set R1.@usb_req
;; call wait_28us
;; sz R1.@USB_Ready
;; jmp chg_address_now
;; clr r1.@USB_Req
;; jmp wait_zero_len_out
;;
;;chg_address_now:
;; clr r1.@USB_Req
;; rla CMD_ADDR ;Yes
;;;SetAddress:
;; AND A,0FEH ;& save it
;; MOV FIFO_ADDR,A ;Move address to adress buffer
;; SZ bRmtWakeup ;Remote wakeup exist ?
;; SET FIFO_ADDR.0 ;Yes:Set remote wakeup flag
;; MOV A,USB_ADDR_WAKE ;MP1 point to Address register
;; MOV MP1,A ;
;; MOV A,FIFO_ADDR ;Write to Address Register
;; MOV R1,A ;
;; sz CMD_ADDR
;; set baddr_state
;; CLR bFLAG_AdrF ;have finished address write
;;
;; RET
;;----END (End request)
;
;;----END (Write FIFO)
;----------------------------------------------------------------------------
;----BEGIN (Clear FIFO)
ClearFIFO1:
set r1.@USB_Clear
clr r1.@USB_Tx
call wait_4us
CLR R1.@USB_Clear ;Disable Clear
CLR R1.@USB_Req ;End request
RET
;----END (Clear FIFO)
wait_28us:
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
wait_4us:
ret
;----------------------------------------------------------------------------
;----BEGIN (Check setup)
;Output: Z = 0:Setup/1:None
;CheckSetup:
; MOV A,USB_MISC ;MP1 point to Misc. register
; MOV MP1,A ;
; MOV A,(01H SHL @USB_Setup) ;Misc. Register Setup flag
; JMP Check
;----------------------------------------------------------------------------
;----BEGIN (Get pipe bit)
;Input : ACC pipe number
;Output: ACC pip bit (D0:pipe 0, D1:pipe 1...)
GetPipeBit:
INC ACC
MOV FIFO_TEMP,A
MOV A,80H
GetPipeBitLoop:
RL ACC
SDZ FIFO_TEMP
JMP GetPipeBitLoop
RET
;----END (Get pipe bit)
;----------------------------------------------------------------------------
;----BEGIN (Set Stall)
;Input : ACC = Pipe number
SetStall:
MOV FIFO_TEMP ,A ;
MOV A,USB_STALL ;MP1 point to Stall register (Read Only)
MOV MP1,A ;
MOV A,FIFO_TEMP
OR A,STALL ;Set stall bit
JMP SetStallTag
;----END (Set Stall)
;----------------------------------------------------------------------------
;----BEGIN (Clear Stall)
;Input : ACC = Pipe number
ClearStall:
MOV FIFO_TEMP,A ;
MOV A,USB_STALL ;MP1 point to Stall register
MOV MP1,A ;
MOV A,FIFO_TEMP
CPL ACC ;Clear stall bit
AND A,STALL ;
SetStallTag:
MOV STALL,A ;Update Satll buffer
MOV R1,A ;Update Stall register
RET
;----END (Clear Sta
;----------------------------------------------------------------------------
;----BEGIN (Set Address)
;Input : ACC = Address
;SetAddress:
; RL ACC ;Shift address to D1
; AND A,0FEH ;& save it
; MOV FIFO_ADDR,A ;Move address to adress buffer
; SZ STD_FLAG.@RmtWakeup ;Remote wakeup exist ?
; SET FIFO_ADDR.@ADDR_Wake ;Yes:Set remote wakeup flag
; MOV A,USB_ADDR_WAKE ;MP1 point to Address register
; MOV MP1,A ;
; MOV A,FIFO_ADDR ;Write to Address Register
; MOV R1,A ;
; RET
;----- END (USB function) --------------------------------------------------
;public LEN0_Rd_Check
public LEN0_Wr_Check
public FIFO0_Rd_Check
;public FIFO0_Rd_Check1
public FIFO1_Rd_Check
public FIFO2_Rd_Check
public FIFO3_Rd_Check
public FIFO0_Wr_Check
public FIFO1_Wr_Check
public FIFO2_Wr_Check
public FIFO3_Wr_Check
;public ReadLen0
public ReadFIFO0
public ReadFIFO1
public ReadFIFO2
public ReadFIFO3
public WriteLen0
public WriteFIFO0
public WriteFIFO1
public WriteFIFO2
;public ClearFIFO0
public ClearFIFO1
;public ClearFIFO2
;public CheckSetup
;public CheckPipe
public GetPipeBit
public SetStall
public ClearStall
;public SetAddress
;public SetRemoteFun
;public END_Request
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -