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

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

?? usb_drv.asm

?? 單片機USB接口模擬鍵盤,該程序可以控制PC機的PS/2鍵盤的NUM LOCK和SCROLL LOCK的燈,以此說明通訊正常
?? ASM
?? 第 1 頁 / 共 3 頁
字號:
    MOV    A, REG[USB_EP0DATA+wLengthHi] ;
    MOV    [USB_TransferSize], A       ;
.L9:
    MOV    [USB_TransferByteCount], 0  ;
    MOV    [USB_TransferByteCount+1], 0;

    OR     [USB_EP0DataToggle], 1 ; setup EP0 data toggle
    JMP    USB_LoadEndpoint            ;
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_ControlReadDataStage
;
;  DESCRIPTION:   This routine processes the data stage of a control read.  It
;                 must be JUMPed to, not called.  It assumes a tranfer descriptor
;                 has been loaded into the driver USB_CurrentTD
;                 data structure.
;
;-----------------------------------------------------------------------------
 USB_ControlReadDataStage:
    JMP     USB_LoadEndpoint

;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_ControlReadStatusStage
;
;  DESCRIPTION:   This routine processes the status stage of a control read.  It
;                 must be JUMPed to, not called.  It handles short or 0 packet
;                 It assumes a tranfer descriptor has been loaded into the
;                 driver USB_CurrentTD data structure.
;
;-----------------------------------------------------------------------------
 USB_ControlReadStatusStage:
    MOV    A, [USB_LastSize]           ; Get the number of bytes from the last transfer
    ADD    [USB_TransferByteCount + 1], A ; Update the transfer byte count
    ADC    [USB_TransferByteCount], 0  ;
    MOV    A, USB_XFER_STATUS_ACK      ; Return a Status ACK Completion
    CALL   USB_UpdateStatusBlock
    MOV    [USB_TransferType], USB_TRANS_STATE_IDLE
    MOV    A, 0                        ; Count Register
    MOV    X, USB_MODE_STALL_IN_OUT
    JMP    USB_EP0_UPD_MODE_EXIT
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_NoDataStageControlTransfer
;                 USB_InitNoDataStageControlTransfer
;
;  DESCRIPTION:   This routine processes the status stage of a no data control
;                 write.  It must be JUMPed to, not called.
;
;-----------------------------------------------------------------------------
 USB_NoDataStageControlTransfer:
 USB_InitNoDataStageControlTransfer:
    CALL    USB_InitializeStatusBlock

    MOV    [USB_TransferType], USB_TRANS_STATE_NO_DATA_CONTROL

    MOV    A, 0                        ; Count Register
    MOV    X, USB_MODE_STATUS_IN_ONLY
    JMP    USB_EP0_UPD_MODE_EXIT
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_InitControlWrite
;
;  DESCRIPTION:   This routine initializes control write.  It must be JUMPed
;                 to, not called.  It assumes a tranfer descriptor has been loaded
;                 into the driver USB_CurrentTD data structure.
;
;-----------------------------------------------------------------------------
 USB_InitControlWrite:
    MOV     A, [USB_DataSource]        ; Need to make sure the destination is not ROM
    CMP     A, USB_DS_ROM
    JZ      USB_Not_Supported_Local_Drv

    CALL    USB_InitializeStatusBlock

    MOV    [USB_TransferType], USB_TRANS_STATE_CONTROL_WRITE

    OR     [USB_EP0DataToggle], 1 ; setup EP0 data toggle

    MOV    A, 0                        ; Count Register
    MOV    X, USB_MODE_ACK_OUT_STATUS_IN
    JMP    USB_EP0_UPD_MODE_EXIT
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_ControlWriteDataStage
;
;  DESCRIPTION:   This routine processes the data stage of a control
;                 write.  It must be JUMPed to, not called.  It assumes a
;                 tranfer descriptor has been loaded into the driver
;                 USB_CurrentTD data structure.
;
;-----------------------------------------------------------------------------
 USB_ControlWriteDataStage:
    XOR    [USB_EP0DataToggle], 1      ; Update data toggle

    MOV    A,REG[USB_EP0CNT]           ; Get the count

    AND     A, 0x0F
    SUB     A, 2                       ; Count include the two byte checksum

    MOV     [USB_t2], A                ; Assume we have room to receive the whole packet

    MOV     A, 0
    CMP     A, [USB_TransferSize]      ; If the MSB has anything just use the count
    JNZ     .L1

    MOV     A, [USB_t2]
    CMP     A, [USB_TransferSize+1]    ;
    JZ      .L6
.L1:
    JC      .L6
    MOV     [USB_t2], [USB_TransferSize+1]

.L6:
    MOV     A, [USB_t2]
    SUB     [USB_TransferSize+1],A     ; Update the bytes remaining
    SBB     [USB_TransferSize], 0      ;

    ADD     [USB_TransferByteCount + 1], A ; Update the transfer byte count
    ADC     [USB_TransferByteCount], 0 ;

    MOV     X,0                        ; Start the index at 0

.RAM_COPY:
    MOV     A, REG[X+USB_EP0DATA]      ; Get the data
    MVI     [USB_DataPtr+1], A         ; Store the data, bump the destination

    INC     X                          ; Bump the destination offset
    MOV     A,X                        ; Are we done?
    CMP     A, [USB_t2]
    JC      .RAM_COPY                  ; Not done

    MOV    A, 0                        ; Count Register
    MOV    X, USB_MODE_ACK_OUT_STATUS_IN
    JMP    USB_EP0_UPD_MODE_EXIT

; Jump here on data toggle error
.error:
    MOV    [USB_TransferType], USB_TRANS_STATE_IDLE  ; This simply aborts the transfer
    MOV    A, 0                        ; Count Register
    MOV    X, USB_MODE_STALL_IN_OUT
    JMP    USB_EP0_UPD_MODE_EXIT
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_ControlWriteStatusStage
;
;  DESCRIPTION:   This routine processes the status stage of a control
;                 write.  It must be JUMPed to, not called.  It assumes a
;                 tranfer descriptor has been loaded into the driver
;                 USB_CurrentTD data structure.
;
;-----------------------------------------------------------------------------
 USB_ControlWriteStatusStage:
    MOV    A, USB_XFER_STATUS_ACK      ; Return a Status ACK Completion
    CALL   USB_UpdateStatusBlock
    MOV    [USB_TransferType], USB_TRANS_STATE_IDLE  ; The packet is done
    MOV    A, 0                        ; Count Register
    MOV    X, USB_MODE_STALL_IN_OUT
    JMP    USB_EP0_UPD_MODE_EXIT
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_NoDataControlStatusStage
;
;  DESCRIPTION:   This routine processes the status stage of a control
;                 write.  It must be JUMPed to, not called.  It assumes a
;                 tranfer descriptor has been loaded into the driver
;                 USB_CurrentTD data structure.
;
;                 USB Device Addressing happens here because we can't change
;                 the SIE Address before the Status IN is received.
;
;-----------------------------------------------------------------------------
 USB_NoDataControlStatusStage:
    MOV     A, USB_XFER_STATUS_ACK     ; Return a Status ACK Completion
    CALL    USB_UpdateStatusBlock
    ; Dispatch to the proper handler
    CMP     [USB_fDataPending], USB_ADDRESS_CHANGE_PENDING
    JNZ     .L1

    ; USB ADDRESS CHANGE
    MOV     A, [USB_TransferBuffer]    ; Get the pending data

    OR      A, USB_ADDR_ENABLE         ; Set the enable bit
    MOV     REG[USB_ADDR], A           ; Update the SIE address
    JMP     .EXIT
.L1:

.EXIT:
    MOV     [USB_fDataPending], 0      ; Clear data pending

    MOV    A, 0                        ; Count Register
    MOV    X, USB_MODE_STATUS_IN_ONLY  ; Wait for the next SETUP
    JMP    USB_EP0_UPD_MODE_EXIT
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_NoDataControlError
;
;  DESCRIPTION:   This routine handles the condition when we expected a
;                 status IN, but receive an OUT
;
;-----------------------------------------------------------------------------
 USB_NoDataControlError:
    MOV    A, USB_XFER_ERROR           ; Return Transaction Error
    CALL   USB_UpdateStatusBlock
    MOV    A, 0                        ; Count Register
    MOV    X, USB_MODE_STALL_IN_OUT    ; Set the mode register
    JMP    USB_EP0_UPD_MODE_EXIT
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_LoadEndpoint
;
;  DESCRIPTION:  Load the endpoint buffer with the next data for the control
;                transfer.  It assumes a tranfer descriptor has been loaded
;                into the driver USB_CurrentTD data structure.
;
;-----------------------------------------------------------------------------
USB_LoadEndpoint:
    MOV     A, [USB_LastSize]          ; Get the number of bytes from the last transfer
    ADD     [USB_TransferByteCount + 1], A ; Update the transfer byte count
    ADC     [USB_TransferByteCount], 0 ;
    MOV     A,  [USB_TransferSize]     ; Check to see if we have any
    OR      A,  [USB_TransferSize+1]   ;  more data to send
    JNZ     .cont                      ; Jump if we have to send more data

; Flow here if there is no more data to send
    CMP     [USB_LastSize], 8          ; Was it a full packet?
    JZ      .START_TRANSFER            ; Jump if it was full (need to send a zero length)

; Flow here if we are entering the status stage
    MOV    A, 0                        ; Count Register
    MOV    [USB_LastSize], A           ; Clear the byte count
    MOV    X, USB_MODE_STATUS_OUT_ONLY ; Only ACK the Status Out
    JMP    USB_EP0_UPD_MODE_EXIT

; Jump here to determine how many bytes should we transfer
.cont:
    CMP     [USB_TransferSize], 0      ; Check the MSB
    JNZ     .L1

    CMP     [USB_TransferSize+1], 8    ; Check the LSB
    JNC     .L1

    MOV     A,[USB_TransferSize+1]     ; Transfer all the remaing data
    JMP     .L3

.L1:
    MOV     A, 8                       ; Just transfer the next 8 bytes

.L3:

    SUB     [USB_TransferSize+1],A     ; Update the bytes remaining
    SBB     [USB_TransferSize],0

    MOV     [USB_t2],A                 ; Save the count
    MOV     X,0

    CMP     [USB_DataSource],USB_DS_ROM  ; RAM or ROM copy?
    JNZ     .RAM_COPY

; Copy data from a ROM source
.ROM_COPY:
    PUSH    X                          ; Save the destination offset
    MOV     A,[USB_DataPtr]            ; Get the transfer source MSB
    MOV     X,[USB_DataPtr+1]          ; Set the transfer source LSB
    INC     [USB_DataPtr+1]            ; Increment the data pointer
    ADC     [USB_DataPtr], 0           ;   MSB if necessary

    ROMX                               ; Get the data byte

    POP     X                          ; Get the destination offset
    MOV     REG[X + USB_EP0DATA], A    ; Load the data
    INC     X                          ; Bump the destination offset
    MOV     A,X                        ; Are we done?
    CMP     A, [USB_t2]
    JC      .ROM_COPY                  ; Not done
    JMP     .START_TRANSFER            ; Otherwise go start the transfer

; Copy data from a RAM source
.RAM_COPY:
    MVI     A, [USB_DataPtr+1]         ; Get the data, bump the source

    MOV     REG[X +USB_EP0DATA], A     ; Load the data
    INC     X                          ; Bump the destination offset
    MOV     A,X                        ; Are we done?
    CMP     A, [USB_t2]
    JC      .RAM_COPY                  ; Not done

;; Set up the IN transfer count/mode/etc
;    A contains the byte count
.START_TRANSFER:
    MOV     [USB_LastSize], A          ; Save the packet size

    MOV     A, 1
    AND     A, [USB_EP0DataToggle]
    JZ      .BYPASS_T1
    MOV     A, USB_CNT_TOGGLE          ; Or T1 in the data toggle

.BYPASS_T1:
    OR      A, [USB_LastSize]
    XOR     [USB_EP0DataToggle], 1     ; Update the data toggle for next time

    MOV    X, USB_MODE_ACK_IN_STATUS_OUT  ; Set the mode register
    JMP    USB_EP0_UPD_MODE_EXIT
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_GetTableEntry
;
;  DESCRIPTION:   Copies a TD to the USB_CurrentTD data structure.
;
;-----------------------------------------------------------------------------
EXPORT USB_GetTableEntry
USB_GetTableEntry:

    INC     X                          ; Point to the first table entry
    ADC     A, 0                       ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品新av中文字幕| 国产精品综合久久| 青娱乐精品视频| 麻豆成人综合网| 国产精品自拍在线| 亚洲第四色夜色| 人人爽香蕉精品| 国产伦精品一区二区三区免费| 国产乱国产乱300精品| 成人美女视频在线观看| 色999日韩国产欧美一区二区| 欧美巨大另类极品videosbest| 91麻豆精品国产91久久久 | 国产精品无遮挡| 亚洲一区在线观看免费 | 欧美精品一区男女天堂| 中文字幕亚洲区| 久久不见久久见免费视频7| 成人va在线观看| 久久综合久久综合亚洲| 亚洲三级在线免费观看| 国产一区在线看| 欧美精品v日韩精品v韩国精品v| 26uuu国产在线精品一区二区| 亚洲激情欧美激情| 国产精品一区二区你懂的| 欧美日韩极品在线观看一区| 99视频一区二区| 丁香桃色午夜亚洲一区二区三区| 在线影院国内精品| 国产精品久久久久久久久图文区| 亚洲va国产va欧美va观看| 色婷婷综合久久久久中文| 国产网红主播福利一区二区| 精品一区二区三区久久| 日韩亚洲欧美在线观看| 午夜久久久久久电影| 欧美色倩网站大全免费| 亚洲国产成人91porn| 欧美日韩综合在线免费观看| 亚洲女女做受ⅹxx高潮| 欧美亚洲丝袜传媒另类| 亚洲国产cao| 日韩精品专区在线影院重磅| 麻豆国产精品官网| 久久久久九九视频| 99国产精品久久久久久久久久久| 亚洲国产精品二十页| 一本色道a无线码一区v| 亚洲第一主播视频| 精品国产青草久久久久福利| 国产精品一区在线| 亚洲色图欧美偷拍| 日韩视频免费观看高清完整版| 蜜桃精品视频在线观看| 国产女主播一区| 欧美色综合影院| 国产一区二区三区在线观看免费| 国产精品麻豆久久久| 欧美午夜精品久久久久久超碰| 日本亚洲欧美天堂免费| 中文字幕综合网| 日韩精品一区在线| 欧美日韩亚洲另类| 成人午夜碰碰视频| 极品少妇xxxx精品少妇偷拍| 中文字幕日韩一区二区| 日韩欧美中文字幕一区| 日本韩国一区二区| 国产一区三区三区| 免费在线成人网| 亚洲一区二区三区爽爽爽爽爽| 国产午夜三级一区二区三| 日韩欧美一区电影| 欧美日韩一区二区三区免费看| 不卡一区二区三区四区| 国产一区不卡视频| 国产伦精品一区二区三区免费 | 51午夜精品国产| 欧美无砖砖区免费| 欧美日韩一区二区三区不卡| 亚洲国产视频网站| 久久这里只有精品视频网| 91精品麻豆日日躁夜夜躁| 欧美一二三四在线| 日韩天堂在线观看| 欧美一区二区不卡视频| 欧美蜜桃一区二区三区| 欧美三级午夜理伦三级中视频| 日本韩国欧美在线| 欧美日韩午夜影院| 欧美大片在线观看| 久久嫩草精品久久久久| 国产精品视频看| 亚洲精品中文在线| 日产精品久久久久久久性色| 久久99精品国产麻豆婷婷 | 69堂精品视频| 国产日韩精品一区二区三区在线| 中文字幕不卡的av| 一区二区高清在线| 麻豆精品在线播放| 99国产精品久久久久| 欧美一区二区三区播放老司机| 精品国产区一区| 亚洲综合激情另类小说区| 久久99久久久久| 精品视频色一区| 国产欧美一区二区精品久导航| 亚洲综合小说图片| 成人免费高清在线| 欧美一区二区三区公司| 亚洲人成网站在线| 国产成人在线视频网站| 91麻豆精品久久久久蜜臀| 亚洲精品亚洲人成人网在线播放| 蜜臀av一区二区在线观看| 欧洲精品在线观看| 亚洲女人小视频在线观看| 国产精品一区2区| 精品国精品自拍自在线| 日韩av一级片| 欧美日韩激情在线| 天天综合色天天| 精品视频在线视频| 亚洲v精品v日韩v欧美v专区| 成人综合婷婷国产精品久久蜜臀 | 成人免费观看视频| 久久久久久亚洲综合影院红桃| 久热成人在线视频| 欧美一区二区三区四区在线观看| 亚洲午夜视频在线| 欧美日韩国产精选| 日韩电影在线一区| 精品成a人在线观看| 国产精品1区2区| 国产精品美女久久久久久2018 | 精品三级在线观看| 亚洲综合成人在线| 欧美日韩日日摸| 麻豆视频观看网址久久| 久久先锋影音av鲁色资源| 国产福利电影一区二区三区| 国产视频一区二区三区在线观看| 国产精一区二区三区| 国产亚洲美州欧州综合国| 成人污污视频在线观看| 亚洲视频电影在线| 色老头久久综合| 亚洲图片欧美综合| 精品三级在线观看| 日本精品视频一区二区三区| 水蜜桃久久夜色精品一区的特点 | 婷婷久久综合九色综合绿巨人| 在线成人午夜影院| 丁香婷婷深情五月亚洲| 午夜日韩在线观看| 亚洲综合视频在线观看| 亚洲国产精品精华液2区45| 欧美中文字幕不卡| 91啪在线观看| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 色婷婷亚洲综合| 粉嫩av一区二区三区| 国产精品夜夜爽| 日韩影院免费视频| 五月婷婷色综合| 亚洲国产欧美在线人成| 依依成人综合视频| 亚洲一区二区在线播放相泽| 亚洲欧洲日本在线| 中文字幕制服丝袜成人av| 久久精品在这里| 亚洲国产精品ⅴa在线观看| 久久综合视频网| 亚洲国产激情av| 亚洲精品成人少妇| 亚洲高清一区二区三区| 日韩高清一区二区| 国产成人99久久亚洲综合精品| 国产精品一区二区三区四区| 99久久精品免费看国产| 欧美性猛片xxxx免费看久爱| 欧美私模裸体表演在线观看| 91精品国产麻豆国产自产在线 | 国产日产亚洲精品系列| 1024成人网色www| 免费成人在线播放| 99视频精品在线| www国产精品av| 椎名由奈av一区二区三区| 日韩精品福利网| 91丨九色丨国产丨porny| 欧美日韩高清在线| 国产精品日韩成人| 蜜臀av性久久久久av蜜臀妖精 | 欧美国产激情二区三区 | 欧美亚洲自拍偷拍| 中文字幕国产精品一区二区| 免费在线观看不卡|