亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产日韩欧美不卡在线| 884aa四虎影成人精品一区| 日韩av午夜在线观看| 亚洲在线一区二区三区| 亚洲黄色av一区| 亚洲精品日日夜夜| 性做久久久久久| 亚洲成在人线免费| 免费成人在线播放| 激情五月婷婷综合网| 国产a久久麻豆| 91婷婷韩国欧美一区二区| 在线视频欧美精品| 69堂成人精品免费视频| 日韩久久精品一区| 国产午夜精品久久久久久免费视| 国产精品无遮挡| 亚洲自拍欧美精品| 免费成人你懂的| av亚洲精华国产精华精华| 99re视频精品| 在线成人高清不卡| 久久久久国产精品免费免费搜索| 国产亚洲成年网址在线观看| 中文字幕一区二区三区不卡在线| 亚洲精品成人悠悠色影视| 亚洲成人手机在线| 国产精品一区二区三区乱码| av电影天堂一区二区在线观看| 一本色道久久综合亚洲91| 精品第一国产综合精品aⅴ| 中文av字幕一区| 亚洲国产另类精品专区| 国模少妇一区二区三区| 99精品久久99久久久久| 欧美一区二区精美| 亚洲欧美在线高清| 国模冰冰炮一区二区| 色噜噜狠狠色综合中国| 精品国产电影一区二区| 亚洲欧美视频在线观看视频| 蜜桃久久久久久| 91蝌蚪porny九色| 久久免费视频色| 午夜精品福利在线| 成人性生交大片免费| 69精品人人人人| 1024精品合集| 国产成人精品网址| 日韩女优制服丝袜电影| 依依成人综合视频| 99久久综合99久久综合网站| 欧美成人伊人久久综合网| 亚洲一区二区三区四区五区中文 | 尤物在线观看一区| 国产成人午夜高潮毛片| 精品久久一二三区| 丝瓜av网站精品一区二区 | 亚洲欧美福利一区二区| 激情五月婷婷综合网| 这里只有精品视频在线观看| 一区二区三区欧美日| 91免费国产视频网站| 国产日韩欧美电影| 欧美性做爰猛烈叫床潮| **性色生活片久久毛片| 成人av在线资源网| 国产精品久久久久四虎| 国产精品一卡二卡| 国产肉丝袜一区二区| 国产suv精品一区二区6| 国产免费成人在线视频| 成人午夜免费av| 国产欧美一区二区精品仙草咪| 国产在线不卡一卡二卡三卡四卡| 欧美大片在线观看一区| 国内精品在线播放| 国产欧美日韩另类一区| 成人一区在线观看| 亚洲天堂2016| 在线视频综合导航| 午夜精品爽啪视频| 欧美日韩视频第一区| 日韩电影在线一区| 精品国产三级a在线观看| 国产一区二区精品久久| 国产精品国产精品国产专区不蜜 | 久久精品视频一区| 东方欧美亚洲色图在线| 一色屋精品亚洲香蕉网站| 色网站国产精品| 五月开心婷婷久久| 久久夜色精品一区| 色综合 综合色| 日韩激情一二三区| 亚洲精品一区二区三区香蕉| 高清在线不卡av| 亚洲午夜精品网| 精品国精品国产尤物美女| 成人夜色视频网站在线观看| 伊人色综合久久天天| 日韩免费高清电影| 99精品偷自拍| 日韩电影网1区2区| 日本一区免费视频| 91精品午夜视频| 不卡免费追剧大全电视剧网站| 亚洲精品乱码久久久久久日本蜜臀| 欧美精选在线播放| 成人免费高清视频| 日韩电影网1区2区| 成人欧美一区二区三区| 亚洲欧洲另类国产综合| 91精品蜜臀在线一区尤物| 成人一二三区视频| 麻豆精品久久精品色综合| 中文字幕一区不卡| 精品理论电影在线观看| 色噜噜狠狠成人中文综合| 久久99国内精品| 一区二区高清免费观看影视大全| 欧美大尺度电影在线| 欧美亚洲一区二区三区四区| 国产成人av影院| 韩日av一区二区| 日本亚洲视频在线| 亚洲影院免费观看| 亚洲欧美一区二区久久| 久久精品日产第一区二区三区高清版| 欧美日韩免费观看一区二区三区 | 国产成人在线色| 喷水一区二区三区| 亚洲午夜影视影院在线观看| 中文字幕乱码久久午夜不卡| 91.成人天堂一区| 一本久久综合亚洲鲁鲁五月天| 国产成人在线观看免费网站| 石原莉奈在线亚洲二区| 亚洲激情自拍视频| 亚洲乱码国产乱码精品精可以看| 久久久久国产一区二区三区四区| 日韩一本二本av| 91精品久久久久久久99蜜桃| 欧美日韩精品三区| 欧美综合久久久| 色素色在线综合| 色老头久久综合| 在线观看欧美精品| 欧美亚洲综合久久| 欧美午夜不卡在线观看免费| 色又黄又爽网站www久久| 色综合久久天天| 91在线码无精品| 色婷婷av一区二区三区大白胸 | 东方aⅴ免费观看久久av| 国产精品 日产精品 欧美精品| 久久99精品久久久| 国产精品综合二区| 国产成人精品www牛牛影视| 成人午夜视频在线观看| 99久久精品免费| 色哟哟亚洲精品| 欧美人体做爰大胆视频| 精品免费视频.| 欧美国产1区2区| 亚洲女与黑人做爰| 亚洲gay无套男同| 裸体在线国模精品偷拍| 国产精品99久久久久久久vr| 国产999精品久久久久久| 色婷婷av一区二区三区大白胸| 欧美性一级生活| 欧美一区二区三区视频免费| 精品免费日韩av| 亚洲女子a中天字幕| 秋霞电影网一区二区| 国产成人在线色| 欧美美女黄视频| 国产婷婷精品av在线| 亚洲bt欧美bt精品777| 精品一区二区综合| 91免费观看国产| 日韩欧美国产精品一区| 国产精品二三区| 天堂在线亚洲视频| 成人美女视频在线观看| 欧美日韩国产另类不卡| 久久久综合视频| 首页国产欧美久久| 从欧美一区二区三区| 欧美精品少妇一区二区三区| 久久综合久久99| 丝袜亚洲另类欧美综合| 成人小视频免费在线观看| 91.com视频| 亚洲自拍另类综合| 成人黄动漫网站免费app| 这里只有精品视频在线观看| 中文字幕色av一区二区三区| 久久精品噜噜噜成人av农村|