亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb_drv.asm

?? 單片機USB接口模擬鍵盤,該程序可以控制PC機的PS/2鍵盤的NUM LOCK和SCROLL LOCK的燈,以此說明通訊正常
?? ASM
?? 第 1 頁 / 共 3 頁
字號:

    TD_INDEX_TO_OFFSET USB_t2 ; Convert the index

    SWAP    A, X
    ADD     A, [USB_t2]
    SWAP    A, X
    ADC     A, 0                       ; A:X now points to the descriptor table entry we want

; Flow here to load the Transfer Descriptor (TD_ENTRY)
    MOV     [USB_t2], USB_CurrentTD    ; Use Temp as MVI pointer
    CALL     USB_GETBYTE               ; Get the descriptor data source
    CALL     USB_GETWORD               ; Get the descriptor size
    CALL     USB_GETWORD               ; Get the descriptor address
    CALL     USB_GETWORD               ; Get the Status Pointer
; Dispatch to InitControlRead or InitControlWrite based on d2h/h2d in the request
    MOV    A, REG[USB_EP0DATA+bmRequestType]; Get bmRequestType
    AND     A,0x80                          ; Control Read or Write
    JZ      .control_write

    JMP     USB_InitControlRead

.control_write:
    JMP     USB_InitControlWrite

;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_LOOKUP
;
;  DESCRIPTION:    Returns the address of an entry in a lookup table (LT_ENTRY)
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:    A:X Point to the lookup table
;                USB_t2 contain the table index
;
;  RETURNS:      Address of the LT_ENTRY in A:X
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
EXPORT USB_LOOKUP
USB_LOOKUP:
    INC     X                          ; Point to the first table entry
    ADC     A, 0                       ;

    LT_INDEX_TO_OFFSET USB_t2          ; Convert the index
    SWAP    A, X
    ADD     A, [USB_t2]                ;
    SWAP    A, X
    ADC     A, 0
    RET
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_GETWORD/USB_GETBYTE
;
;  DESCRIPTION:    Get a word value from ROM
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:    A:X is the ROM Address
;                USB_t2 is the destination address
;
;  RETURNS:      USB_t1
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;                USES USB_t2
;                A:X points to the subsequent locaction ROM location
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
EXPORT USB_GETWORD
USB_GETWORD:

    PUSH    A                          ; Don't loose the pointer MSB
    ROMX                               ; Data source flag
    MVI     [USB_t2], A                ; Save the data source
    POP     A                          ; Get the MSB back
    INC     X                          ; Point to the next  entry
    ADC     A, 0                       ;

EXPORT USB_GETBYTE
USB_GETBYTE:

    PUSH    A                          ; Don't loose the pointer MSB
    ROMX                               ; Data source flag
    MVI     [USB_t2], A                ; Save the data source
    POP     A                          ; Get the MSB back
    INC     X                          ; Point to the next  entry
    ADC     A, 0                       ;
    RET
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_GET_DEVICE_TABLE_ENTRY
;
;  DESCRIPTION:    Get the address of the current DEVICE_TABLE entry
;                  Not intended for use by C fucntions
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:
;
;  RETURNS:        A:X points the the current DEVICE_TABLE entry
;                  Carry flag is set if the current device index is out of range
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
EXPORT USB_GET_DEVICE_TABLE_ENTRY
USB_GET_DEVICE_TABLE_ENTRY:
    MOV     [USB_t2], [USB_bCurrentDevice]  ; Use the UM temp var--Selector

    MOV     A,>USB_DEVICE_LOOKUP       ; Get the ROM Address MSB
    MOV     X,<USB_DEVICE_LOOKUP       ; Get the ROM Address LSB
    ROMX                               ; First entry is the table size (only a byte)
    CMP     A, [USB_t2]                ; Range check
    MOV     A,>USB_DEVICE_LOOKUP       ; Get the ROM Address MSB
    JC      .exit
; Flow here if the index is valid
    CALL    USB_LOOKUP                 ; Look up the configuration
; Jump or flow here on exit
.exit:
    RET
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_GET_CONFIG_TABLE_ENTRY
;
;  DESCRIPTION:    Get the address of the current DEVICE_TABLE entry
;                  Not intended for use by C fucntions
;                  Does not do range checking on
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:
;
;  RETURNS:        A:X points the the current CONFIG_TABLE entry
;                  Carry flag is set if the current device index is out of range
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
EXPORT USB_GET_CONFIG_TABLE_ENTRY
USB_GET_CONFIG_TABLE_ENTRY:
    CALL    USB_GET_DEVICE_TABLE_ENTRY ; Get the selected device
    MOV     [USB_t2],USB_t1            ; Set the GETWORD destination
    CALL    USB_GETWORD                ; Get the pointer to the CONFIG_LOOKUP table
                                       ; ITempW has the address
    MOV     A, REG[USB_EP0DATA+wValueLo]  ; Get the configuration number
    MOV     [USB_t2],A                 ; Save it
    MOV     A, [USB_t1]                ; Get the CONFIG_LOOKUP ROM Address MSB
    MOV     X, [USB_t1+1]              ; Get the CONFIG_LOOKUP ROM Address LSB

; A:X Points to the CONFIG_LOOKUP, so get the current entry
    MOV     [USB_t2], [USB_Configuration] ; Get the configuration number
    DEC     [USB_t2]                   ; We don't populate the 0th entry
    CALL    USB_LOOKUP                 ; Look up the configuration
    RET
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_UpdateStatusBlock
;
;  DESCRIPTION:    Update the Completion Status Block for a Request.  The
;                  block is updated with the completion code from the
;                  argument (A) and the _TransferByteCount.
;
;                  The StatusBlock Pointer (_StatusBlockPtr) is set to NULL (0)
;                  to make sure no other updates are made to the StatusBlock by
;                  the USB User Module.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:      A contains the Completion Status Code
;
;  RETURNS:        None
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
USB_UpdateStatusBlock:
    MOV     X, [USB_StatusBlockPtr + 1];
    SWAP    A, X                       ; Don't loose the completion code
    CMP     A, 0                       ; NULL?
    JZ      .done                      ; No update on NULL
; Flow here to update the VSR Completion Status Block
    SWAP    A, X                       ; Completion code A, Pointer in X
    MOV     [X + 0], A                 ; Update the completion Code
    MOV     A, [USB_TransferByteCount] ; Actual Byte Count MSB
    MOV     [X + 1], A
    MOV     A, [USB_TransferByteCount + 1] ; Actual Byte Count LSB
    MOV     [X + 2], A
    MOV     [USB_StatusBlockPtr + 1], 0; Clear the Block Pointer
.done:
    RET                                ; All done
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_InitializeStatusBlock
;
;  DESCRIPTION:    Initialize the Completion Status Block for a Request.
;                  The completion code is set to USB_XFER_IDLE.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:      None
;
;  RETURNS:        None
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
USB_InitializeStatusBlock:
    MOV     A, [USB_StatusBlockPtr + 1];
    CMP     A, 0                       ; NULL?
    JZ      .done                      ; No update on NULL
; Flow here to initialize the Completion Status Block
    SWAP    A, X                       ; Pointer in X
    MOV     [X + 0], USB_XFER_IDLE     ; Initialize the completion code (0)
    MOV     [USB_TransferByteCount], 0 ; Clear the byte count
    MOV     [USB_TransferByteCount + 1], 0 ;
.done:
    RET                                ; All done
;-----------------------------------------------------------------------------
;  FUNCTION NAME: ;  USB 1st Tier Dispactch Jump Table (based on bmRequestType)
;
;  DESCRIPTION:
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:
;
;  RETURNS:
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
MACRO BMREQUEST_DISPATCH
IF (USB_CB_@0_@1_@2 & 1)
    jmp     USB_DT_@0_@1_@2_Dispatch
ELSE
    jmp     USB_Not_Supported_Local_Drv
ENDIF
ENDM
USB_DT_bmRequestType::
    BMREQUEST_DISPATCH    h2d,std,dev
    BMREQUEST_DISPATCH    h2d,std,ifc
    BMREQUEST_DISPATCH    h2d,std,ep
    BMREQUEST_DISPATCH    h2d,std,oth
    BMREQUEST_DISPATCH    h2d,cls,dev
    BMREQUEST_DISPATCH    h2d,cls,ifc
    BMREQUEST_DISPATCH    h2d,cls,ep
    BMREQUEST_DISPATCH    h2d,cls,oth
    BMREQUEST_DISPATCH    h2d,vnd,dev
    BMREQUEST_DISPATCH    h2d,vnd,ifc
    BMREQUEST_DISPATCH    h2d,vnd,ep
    BMREQUEST_DISPATCH    h2d,vnd,oth
    BMREQUEST_DISPATCH    h2d,rsv,dev
    BMREQUEST_DISPATCH    h2d,rsv,ifc
    BMREQUEST_DISPATCH    h2d,rsv,ep
    BMREQUEST_DISPATCH    h2d,rsv,oth
    BMREQUEST_DISPATCH    d2h,std,dev
    BMREQUEST_DISPATCH    d2h,std,ifc
    BMREQUEST_DISPATCH    d2h,std,ep
    BMREQUEST_DISPATCH    d2h,std,oth
    BMREQUEST_DISPATCH    d2h,cls,dev
    BMREQUEST_DISPATCH    d2h,cls,ifc
    BMREQUEST_DISPATCH    d2h,cls,ep
    BMREQUEST_DISPATCH    d2h,cls,oth
    BMREQUEST_DISPATCH    d2h,vnd,dev
    BMREQUEST_DISPATCH    d2h,vnd,ifc
    BMREQUEST_DISPATCH    d2h,vnd,ep
    BMREQUEST_DISPATCH    d2h,vnd,oth
    BMREQUEST_DISPATCH    d2h,rsv,dev
    BMREQUEST_DISPATCH    d2h,rsv,ifc
    BMREQUEST_DISPATCH    d2h,rsv,ep
    BMREQUEST_DISPATCH    d2h,rsv,oth
USB_DT_End:
USB_DT_Size: equ (USB_DT_End-USB_DT_bmRequestType) / 2
USB_bmRequestType_Dispatch::
    DISPATCHER USB_DT_bmRequestType, USB_DT_Size, USB_Not_Supported_Local_Drv

USB_Not_Supported_Local_Drv:
        LJMP     USB_Not_Supported


;-----------------------------------------------
; Add custom application code for routines
;-----------------------------------------------

   ;@PSoC_UserCode_BODY_1@ (Do not change this line.)
   ;---------------------------------------------------
   ; Insert your custom code below this banner
   ;---------------------------------------------------

   ;---------------------------------------------------
   ; Insert your custom code above this banner
   ;---------------------------------------------------
   ;@PSoC_UserCode_END@ (Do not change this line.)

; End of File USB_drv.asm

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久伊人久久99| 欧美中文一区二区三区| 亚洲视频资源在线| 国产清纯在线一区二区www| 欧美电影免费观看高清完整版在| 欧美私人免费视频| 欧美揉bbbbb揉bbbbb| 欧美亚洲综合久久| 欧美日韩电影一区| 欧美酷刑日本凌虐凌虐| 欧美区视频在线观看| 欧美日韩国产大片| 日韩一区二区三区四区 | 久久伊人蜜桃av一区二区| 欧美日韩一区小说| kk眼镜猥琐国模调教系列一区二区| 亚洲三级小视频| 亚洲美女视频一区| 天涯成人国产亚洲精品一区av| 亚洲自拍另类综合| 久久精品二区亚洲w码| 黄页视频在线91| 成人精品gif动图一区| 99久久精品99国产精品| 欧美三级午夜理伦三级中视频| 欧美色图在线观看| 精品国产123| 亚洲男人的天堂在线观看| 午夜精品久久久久久| 国产麻豆日韩欧美久久| 99精品偷自拍| 日韩欧美一区二区三区在线| 国产精品乱人伦| 亚洲成av人片在线观看| 国产一区二区调教| 色婷婷久久久久swag精品| 91精品国产色综合久久ai换脸 | 99久久国产综合色|国产精品| 色老汉一区二区三区| 日韩美一区二区三区| 欧美国产精品专区| 天天影视网天天综合色在线播放| 国产麻豆精品theporn| 一本一道波多野结衣一区二区| 欧美一区二区美女| 国产精品美女久久久久aⅴ国产馆| 亚洲成人精品一区| 成人福利视频在线看| 7777精品伊人久久久大香线蕉的 | 欧美激情在线免费观看| 日本亚洲一区二区| 色婷婷综合久久久久中文一区二区| 精品国产一区二区亚洲人成毛片| 亚洲影院理伦片| 懂色av一区二区三区蜜臀 | 国产偷v国产偷v亚洲高清| 亚洲国产综合色| 99精品在线免费| 亚洲国产精品成人综合色在线婷婷 | 国产成人精品aa毛片| 5858s免费视频成人| 伊人性伊人情综合网| 99久久精品情趣| 国产日韩高清在线| 国产裸体歌舞团一区二区| 日韩欧美中文一区二区| 一区二区三区四区视频精品免费 | 欧美男男青年gay1069videost| 国产精品理论片| 国产精品77777| 久久日韩精品一区二区五区| 蜜臀av亚洲一区中文字幕| 欧美乱熟臀69xxxxxx| 亚洲综合在线免费观看| 日本精品视频一区二区| 亚洲人成网站色在线观看| 99久久国产综合精品麻豆| 国产精品全国免费观看高清 | 日本丶国产丶欧美色综合| 国产欧美日韩精品一区| 成人性视频免费网站| 中文字幕精品在线不卡| www.爱久久.com| 亚洲欧美电影一区二区| 欧美性色欧美a在线播放| 一区二区三区四区在线免费观看| 91视频观看视频| 亚洲成人先锋电影| 欧美精品日韩精品| 免费看日韩a级影片| 欧美一区二区三区思思人| 美腿丝袜亚洲色图| 精品久久国产97色综合| 国产精品白丝av| 国产精品无遮挡| 欧美性猛交xxxx黑人交| 免费欧美高清视频| 国产精品无人区| 欧美日韩在线播放三区四区| 久久精品国产精品亚洲红杏| 国产亚洲精久久久久久| 91浏览器打开| 青娱乐精品在线视频| 国产精品视频线看| 欧美日韩一区国产| 国产精品一区二区视频| 亚洲精选视频免费看| 日韩一级片在线播放| 成人国产精品免费观看视频| 亚洲影院久久精品| www国产成人| 在线一区二区三区四区五区 | 欧美亚洲禁片免费| 国产一区二区三区在线观看免费| 最新国产成人在线观看| 欧美一级免费观看| 91老司机福利 在线| 国产尤物一区二区| 一区二区三区电影在线播| 26uuu久久天堂性欧美| 99这里都是精品| 久久av资源网| 亚洲一区二区三区四区在线免费观看| 精品国产一区二区三区忘忧草 | 亚洲第一搞黄网站| 亚洲国产激情av| 精品欧美乱码久久久久久| 在线一区二区三区四区| 国产成人亚洲综合a∨猫咪| 日韩成人一区二区三区在线观看| 国产精品久久久久久久久久免费看| 欧美久久久久免费| 91蜜桃在线观看| 成人小视频在线| 国产精品资源站在线| 免费成人av在线| 婷婷六月综合网| 亚洲小少妇裸体bbw| 国产精品久久久久一区 | 日韩欧美不卡一区| 久久激情五月激情| 国产成人av一区二区三区在线观看| 亚洲免费av高清| 精品久久久久久综合日本欧美| 在线看国产日韩| 99久久久免费精品国产一区二区 | 日本亚洲一区二区| 亚洲无人区一区| 夜夜亚洲天天久久| 亚洲精品视频在线观看网站| 中文字幕不卡在线| 亚洲精品一线二线三线无人区| 欧美精品在线视频| 欧美日本在线看| 欧美剧在线免费观看网站 | 久久伊人中文字幕| 久久亚洲免费视频| 久久色在线视频| 欧美经典三级视频一区二区三区| 久久奇米777| 国产欧美日韩视频在线观看| 中文字幕成人在线观看| 中文字幕中文字幕在线一区| 国产99久久久久| 国产成人在线电影| 成人免费高清在线观看| 99精品国产99久久久久久白柏| 99精品热视频| 欧美在线观看视频一区二区 | 国产精品国产a级| 国产精品久久久久一区二区三区| 国产精品成人免费在线| 亚洲激情图片qvod| 亚洲成a人片综合在线| 精品系列免费在线观看| 国产成a人亚洲| 欧洲精品一区二区| 精品美女在线播放| 国产精品麻豆网站| 午夜久久久久久久久久一区二区| 免费成人深夜小野草| 国产99精品在线观看| 欧洲亚洲国产日韩| 欧美精品一区二区高清在线观看| 欧美国产精品一区二区三区| 亚洲综合在线五月| 久久99精品一区二区三区| voyeur盗摄精品| 欧美一区二区美女| 日韩理论片一区二区| 人人精品人人爱| 99精品久久免费看蜜臀剧情介绍| 欧美精品丝袜中出| 国产欧美精品一区二区色综合 | 国产精品中文有码| 欧美亚一区二区| 国产精品伦理一区二区| 免费亚洲电影在线| 欧美在线制服丝袜| 亚洲国产精品国自产拍av|