?? et44_usb_lib.inc
字號:
; ============================================================
; ETOMS USB LIB
; Designer: Dirk Leu
; 2004/06/05
; MCU: ET44 Serial MCU
; MCU setting value
;============================================================
//====================================================================================
// USB LIBRARY v1.8 STALL ACTIVE
//
//====================================================================================
//USB INTTERRUPT VECTOR
ORG 0x0088
if _USB_DIS_ANO_INT == _ENABLE
DISI
endif
if _USB_AUTO_SET_PAGE == _ENABLE
PAGE 0
endif
if _USB_AUTO_SET_BANK == _ENABLE
BANK USB_BANK
endif
JBS EPINTR,0,RX0_ISR
JBS EPINTR,2,IN0_ISR
JMP TX0_ISR
ORG 0x0090
; trap
if _USB_DIS_ANO_INT == _ENABLE
DISI
endif
if _USB_AUTO_SET_PAGE == _ENABLE
PAGE 0
endif
if _USB_AUTO_SET_BANK == _ENABLE
BANK USB_BANK
endif
JBS EPINTR,3,EP1_ISR
JBS EPINTR,4,EP2_ISR
JMP EP3_ISR
ORG 0x0098
; trap
if _USB_DIS_ANO_INT == _ENABLE
DISI
endif
if _USB_AUTO_SET_PAGE == _ENABLE
PAGE 0
endif
if _USB_AUTO_SET_BANK == _ENABLE
BANK USB_BANK
endif
JBS STAINTR,RSTINT,RST_ISR
JBS STAINTR,IDLEINT,IDLE_ISR
JMP RESUME_WAKEUP_ISR
ORG 0x00A0
if _USB_DIS_ANO_INT == _ENABLE
DISI
endif
if _USB_AUTO_SET_PAGE == _ENABLE
PAGE 0
endif
if _USB_AUTO_SET_BANK == _ENABLE
BANK USB_BANK
endif
JBS HINTR,0,HRX0_ISR
JBS HINTR,2,HIN0_ISR
JMP HTX0_ISR
ORG 0x00A8
if _USB_DIS_ANO_INT == _ENABLE
DISI
endif
if _USB_AUTO_SET_PAGE == _ENABLE
PAGE 0
endif
if _USB_AUTO_SET_BANK == _ENABLE
BANK USB_BANK
endif
JBS HINTR,7,HPSTSC_ISR
JMP SOF_ISR
ENDO
RORG 0x00B0
USB_INT_PRE:
if _USB_AUTO_STORE_IAP0 == _ENABLE
MOV A,IAP0
MOV STACK_IAP0,A
NOP
endif
RET
//====================================================================================
//USB INITIAL WORK
USB_INITIAL:
MOV A,#0x05
MOV IAPADR,A
BANK 0
//Enalbe Peripheral function (USB)
BS PRIE,USBE
//Host suspend flag
//for mouse flag
BANK USB_BANK
//hub endpoint transmit: 0: not transmit yet 1:transmit ok,
BC HUB_STATUS,HTX1_INDEX
CLR USB_STATUS
CLR STATUS_BUF
CLR A_INTERFACE
//_ENABLE Embeded funtion interrupt
MOV A,#0x3F
MOV EPINTE,A
N_NOP
//_ENABLE USB Bus Reset Event
MOV A,#0x01
MOV STAINTE,A
N_NOP
//Hub initilize: interrupt _ENABLE
MOV A,#0xCF
MOV HINTE,A
N_NOP
//Address clear
CLR ADDRESS_BUFh
CLR ADDRESS_BUFf
MOV A,#0xFF
MOV FAR,A
N_NOP
MOV HAR,A
N_NOP
//USB SPEED
if _USB_FULL_SPEED == _ENABLE
BS GCNTR,SPD
else
BC GCNTR,SPD
endif
N_NOP
//Start transmition: plug-in
BS GCNTR,PLUG
N_NOP
_ADD_USB_INITIAL_WORK_SUB
RET
//====================================================================================
//Interrupt SUB routines
RX0_ISR:
//Which transaction
if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
else
CALL USB_INT_PRE
endif
JBS EP0RXTR,OUT,f_out_package
f_setup_package:
//Clear interrupt flag
MOV A,#0b11111101
JBS EP0RXTR,SETUP,CLR_SETUP_SETUPOW_F
MOV A,#0b11111011
CLR_SETUP_SETUPOW_F:
MOV EP0RXTR,A
N_NOP
//Address of ReceiveCommand
MOV A,#bmRequestType
MOV IAP0,A
NOP
ReceiveCommand:
JBS IAP0,3,RC_OVER
MOV A,EP0RXDAR
MOV IAC0,A
JMP ReceiveCommand
//Endpoint0 FIFO is 8
RC_over:
ZCHK wLengthH
JBC STATUS,Z,skip_fc_nodata_set
ZCHK wLengthL
JBC STATUS,Z,skip_fc_nodata_set
fc_nodata_set:
//Asking ZeroLength data
CLR EP0TXCTR
N_NOP
skip_fc_nodata_set:
//hub or function? 0:hub,1:function
BS USB_STATUS,HorF
BC USB_STATUS,STALL_INDEX
BC FC_STATUS,TBorREG_INDEX
BC FC_STATUS,DATA_OUT
//decode
MOV A,#bmRequestType
CALL StageOne
//The command un-support or it is wrong?
JBS USB_STATUS,STALL_INDEX,f_stall
//next status
JMP next_f_inout
f_out_package:
//Clear interrupt flag
MOV A,#0b11111110
MOV EP0RXTR,A ;OUT
N_NOP
JBC FC_STATUS,DATA_OUT,next_f_inout
USB_SET_REPORT_SUB:
BC FC_STATUS,DATA_OUT
_ADD_USB_SET_REPORT_SUB
CLR wLengthL
CLR wLengthH
jmp next_f_inout
TX0_ISR:
if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
else
CALL USB_INT_PRE
endif
//clear interrupt flag
MOV A,#0b11111101
MOV EPINTR,A ;INT0TX
N_NOP
//set address or not ?
MOV A,ADDRESS_BUFf
MOV FAR,A
N_NOP
/*====== data stage, zero length ?====*/
//Length of sent data
ZCHK TBLL
JBS STATUS,Z,exit_tx02 ;V1.8
//Host requests data length
ZCHK wLengthH
JBC STATUS,Z,TX0_ISR1
ZCHK wLengthL
JBS STATUS,Z,exit_tx01
TX0_ISR1:
JBS FC_STATUS,TBorREG_INDEX,USB_GET_REPORT_SUB
CALL fTransmitTable1
JMP next_f_inout
exit_tx02: ;V1.8
CLR EP0TXCTR ;
N_NOP ;
JMP f_tx_stall ;
exit_tx01:
CLR EP0TXCTR
N_NOP
JMP next_f_inout
EXIT_TX1:
BACK_TO_MLOOP:
if _USB_AUTO_STORE_IAP0 == _ENABLE
MOV A,STACK_IAP0
MOV IAP0,A
NOP
NOP
endif
if _USB_DIS_ANO_INT == _ENABLE
ENI
endif
RETI
fTransmitTable1:
MOV A,ROMADRH
MOV TBHPTR,A
MOV A,ROMADRL
MOV TBLPTR,A
NOP
fTransmitTable:
CLR CTR_BUF
f_not_finish:
TBRDP EP0TXDAR
INC CTR_BUF
DJZ wLengthL,f_finish1
JMP f_finish2
f_finish1:
ZCHK wLengthH
JBS STTS,Z,f_finish3 ;V1.8
DEC wLengthH
f_finish2:
DJZ TBLL,f_finish
JBC CTR_BUF,6,f_not_finish ;=64
JMP f_finish ;V1.8
f_finish3:
DEC TBLL ;V1.8
f_finish:
MOV A,CTR_BUF
MOV EP0TXCTR,A
N_NOP
MOV A,TBHPTR
MOV ROMADRH,A
MOV A,TBLPTR
MOV ROMADRL,A
RET
USB_GET_REPORT_SUB:
_ADD_USB_GET_REPORT_EXP_SUB
JMP next_f_inout
IN0_ISR:
if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
else
CALL USB_INT_PRE
endif
MOV A,#0b11111011
MOV EPINTR,A ;INT0IN
N_NOP
skip_fc_package_set:
ZCHK TBLL
JBS STATUS,Z,FB_SPACE_TXBUF
check_wlength:
ZCHK wLengthH
JBC STATUS,Z,BACK_TO_MLOOP ;not_set
ZCHK wLengthL
JBC STATUS,Z,BACK_TO_MLOOP ;not_set
FB_SPACE_TXBUF:
JMP BACK_TO_MLOOP
; CLR EP0TXCTR
; N_NOP
; JMP next_f_inout
RST_ISR:
if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
else
CALL USB_INT_PRE
endif
//NO CONFIGURATION AND LED ON
; BC HINTE,SOFINT
; N_NOP
BS GCNTR,RESET
N_NOP
//**Remote-wakeup disable,power switch disable
MOV A,#0x00 // bus POWER
;KB_HGSR_CONTENT:
MOV HGSR,A
N_NOP
CLR HAR
N_NOP
CLR FAR
N_NOP
MOV A,#0b11111110
MOV STAINTR,A ;RSTINT
N_NOP
CLR ADDRESS_BUFh
CLR ADDRESS_BUFf
CLR HEP1_CNT
CLR USB_STATUS
CLR STATUS_BUF
; BC HUB_STATUS,HTX1_INDEX
if _USB_HUB == _DISABLE
MOV A,#127
MOV HAR,A
N_NOP
BS HGSR,CONFG
N_NOP
MOV A,#0b10010001
MOV HPCONR,A
N_NOP
BC HPSCR1,PCSTSC
N_NOP
BS GCNTR,FUNEN
N_NOP
MOV A,#0b10001001
MOV HPCONR,A
N_NOP
BC HPSCR1,PRTSTSC
N_NOP
endif
_ADD_USB_BUS_RESET_SUB
JMP BACK_TO_MLOOP
IDLE_ISR:
if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
else
CALL USB_INT_PRE
endif
MOV A,#0b11111101
JBC USB_STATUS,CONFIG_INDEX,IDLE_ISR_NTRUE
//Host suspend (normal mode)
BS USB_STATUS,GT_SUSPEND
BS GCNTR,SUSPEND
N_NOP
//Set_remote_up
MOV A,#0x0F
MOV STAINTE,A
N_NOP
_ADD_USB_IDLE_INT_SUB
MOV A,#0b11111001
IDLE_ISR_NTRUE:
MOV STAINTR,A ;IDLEINT
N_NOP
JMP BACK_TO_MLOOP
RESUME_WAKEUP_ISR:
if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
else
CALL USB_INT_PRE
endif
JBS STAINTR,RUEINT,RESUME_ISR
//DOWNSTREAM WAKE-UP
WAKEUP_ISR:
; MOV A,#0x07
MOV A,#0b11110000 ;#0b11110111
MOV STAINTR,A
N_NOP
_ADD_USB_WAKEUP_INT_SUB
JMP BACK_TO_MLOOP
//HOST WAKE-UP
RESUME_ISR:
; JBS STAINTR,RUEINT,RESUME_ISR
; MOV A,#0x0B
MOV A,#0b11111011
MOV STAINTR,A
N_NOP
MOV A,#0x03
MOV STAINTE,A
N_NOP
BC USB_STATUS,GT_SUSPEND
_ADD_USB_RESUME_INT_SUB
JMP BACK_TO_MLOOP
HRX0_ISR:
if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
else
CALL USB_INT_PRE
endif
//for Host suspend
//which transaction
JBS HEP0RXTR,OUT,h_out_package
h_setup_package:
MOV A,#0b11111101
JBS HEP0RXTR,SETUP,HCLR_SETUP_SETUPOW_F
MOV A,#0b11111011
HCLR_SETUP_SETUPOW_F:
MOV HEP0RXTR,A
N_NOP
MOV A,#HbmRequestType
MOV IAP0,A
NOP
hReceiveCommand:
JBS IAP0,3,hRC_over ;=8
MOV A,HEP0RXDAR
MOV IAC0,A
JMP hReceiveCommand
hRC_over:
ZCHK HwLengthL
JBC STATUS,Z,skip_hub_nodata_set
ZCHK HwLengthH
JBC STATUS,Z,skip_hub_nodata_set
hub_nodata_set:
CLR HEP0TXCTR
N_NOP
skip_hub_nodata_set:
//hub or function? 0:hub,1:function
BC USB_STATUS,HorF
BC USB_STATUS,STALL_INDEX
MOV A,#HbmRequestType
CALL StageOne
JBS USB_STATUS,STALL_INDEX,h_stall
JMP next_h_inout
h_out_package:
MOV A,#0b11111110
MOV HEP0RXTR,A ;OUT
N_NOP
JMP next_h_inout
HTX0_ISR:
if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
else
CALL USB_INT_PRE
endif
JBS HINTR,1,HTX0_ISR1
JMP HTX1_ISR
HTX0_ISR1:
MOV A,#0b11111101
MOV HINTR,A ;HINT0TX
N_NOP
MOV A,ADDRESS_BUFh
MOV HAR,A
N_NOP
skip_hub_address_set:
//data stage, zero length ?
ZCHK HTBLL
JBS STATUS,Z,exit_htx01 ;V1.8
ZCHK HwLengthL
JBC STATUS,Z,skip_hub_address_set1;exit_htx0
ZCHK HwLengthH
JBS STATUS,Z,exit_htx0
skip_hub_address_set1:
CALL hTransmitTable1
JMP next_h_inout
exit_htx01: ;V1.8
CLR HEP0TXCTR ;
N_NOP ;
JMP h_tx_stall ;
exit_htx0:
CLR HEP0TXCTR
N_NOP
JMP next_h_inout
hTransmitTable1:
MOV A,HROMADRH
MOV TBHPTR,A
MOV A,HROMADRL
MOV TBLPTR,A
NOP
hTransmitTable:
CLR CTR_BUF
h_not_finish:
TBRDP HEP0TXDAR
INC CTR_BUF
DJZ HwLengthL,h_finish1
JMP h_finish2
h_finish1:
ZCHK HwLengthH
JBS STTS,Z,h_finish3 ;V1.8
DEC HwLengthH
h_finish2:
DJZ HTBLL,h_finish
JBC CTR_BUF,3,h_not_finish
JMP h_finish ;V1.8
h_finish3: ;V1.8
DEC HTBLL ;V1.8
h_finish:
MOV A,CTR_BUF
MOV HEP0TXCTR,A
N_NOP
MOV A,TBHPTR
MOV HROMADRH,A
MOV A,TBLPTR
MOV HROMADRL,A
RET
HIN0_ISR:
if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
else
CALL USB_INT_PRE
endif
MOV A,#0b11111011
MOV HINTR,A ;HINT0IN
N_NOP
ZCHK HTBLL
JBS STATUS,Z,HIN0_ISR0;next_h_inout
ZCHK HwLengthL
JBC STATUS,Z,HIN0_ISR0
ZCHK HwLengthH
JBS STATUS,Z,HIN0_ISR0;next_h_inout
//else
HIN0_ISR0:
JMP BACK_TO_MLOOP
HTX1_ISR:
BC HEP1TXCSR,SESTALL
N_NOP
JBC HUB_STATUS,HTX1_INDEX,not_cleared_yet
HUB_EP1_CLEAR:
BC HEP1TXCSR,RXTXEN
JMP CLR_HINTR_HINT1
not_cleared_yet:
BS HEP1TXCSR,RXTXEN
CLR_HINTR_HINT1:
N_NOP
MOV A,#0b11110111
MOV HINTR,A ;HINT1
N_NOP
JMP BACK_TO_MLOOP
HPSTSC_ISR:
if _USB_AUTO_SET_BANK + _USB_AUTO_STORE_IAP0 == _DISABLE
else
CALL USB_INT_PRE
endif
BC HUB_STATUS,HTX1_INDEX
MOV A,#0b01111111
MOV HINTR,A ;HPSTSCINT
N_NOP
//hub status change?
MOV A,#0b00001100
AND A,HSR
JBS STATUS,Z,skip_hub
BS STATUS_BUF,HSTSC
skip_hub:
//port1 status change?
MOV A,#0b00011111
AND A,HPSCR1
JBS STATUS,Z,skip_port1
BS STATUS_BUF,HSTSCP1
skip_port1:
//port2 status change?
MOV A,#0b00011111
AND A,HPSCR2
JBS STATUS,Z,skip_port2
BS STATUS_BUF,HSTSCP2
skip_port2:
//port3 status change?
MOV A,#0b00011111
AND A,HPSCR3
JBS STATUS,Z,skip_port3
BS STATUS_BUF,HSTSCP3
skip_port3:
//port4 status change?
MOV A,#0b00011111
AND A,HPSCR4
JBS STATUS,Z,skip_port4
BS STATUS_BUF,HSTSCP4
skip_port4:
//NAK or not ?
MOV A,STATUS_BUF
AND A,#0b00011110
JBS STATUS,Z,response_nak
response_ack:
MOV HEP1TXDAR,A
N_NOP
CHECK_PORT1_STATUS:
JBC STATUS_BUF,1,CHECK_PORT2_STATUS
MOV A,#HSR+1
MOV IAP0,A
NOP
JBS IAC0,4,NOT_ENABLE_HEP1
CHECK_PORT2_STATUS:
JBC STATUS_BUF,2,CHECK_PORT3_STATUS
MOV A,#HSR+2
MOV IAP0,A
NOP
JBS IAC0,4,NOT_ENABLE_HEP1
CHECK_PORT3_STATUS:
JBC STATUS_BUF,3,CHECK_PORT4_STATUS
MOV A,#HSR+3
MOV IAP0,A
NOP
JBS IAC0,4,NOT_ENABLE_HEP1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -