📄 isr.src
字号:
;
; void bus_reset(void)
RSEG ?PR?bus_reset?ISR
bus_reset:
; SOURCE LINE # 114
; {
; SOURCE LINE # 115
; }
; SOURCE LINE # 116
RET
; END OF bus_reset
;
; // Control OUT handler
; void ProcessCtrlOutEP(void)
RSEG ?PR?ProcessCtrlOutEP?ISR
ProcessCtrlOutEP:
USING 0
; SOURCE LINE # 119
; {
; SOURCE LINE # 120
; unsigned char ep_last, i;
;
; /* Clear corresponding endpoint interrupt flag */
; ep_last = D12_ReadLastTransactionStatus(0);
; SOURCE LINE # 124
CLR A
MOV R7,A
LCALL _D12_ReadLastTransactionStatus
;---- Variable 'ep_last?442' assigned to Register 'R7' ----
;
; /* check to see if the current received status is a SETUP package,
; if so, SETUP endpoints have to be 'ACK'ed. */
; if (ep_last & D12_SETUPPACKET) { /* SETUP package ? */
; SOURCE LINE # 128
MOV A,R7
JB ACC.5,$ + 6H
LJMP ?C0014
; ControlData.wLength = 0;
; SOURCE LINE # 129
CLR A
MOV ControlData+08H,A
MOV ControlData+09H,A
; ControlData.wCount = 0;
; SOURCE LINE # 130
MOV ControlData+0AH,A
MOV ControlData+0BH,A
;
; /* Select control OUT endpoint, readbuffer, if validate device request,
; save to deviceRequest clear buffer */
; if( D12_ReadEndpoint(0, (unsigned char *)(&(ControlData.DeviceRequest)),
; SOURCE LINE # 134
MOV R3,A
MOV R2,#HIGH (ControlData)
MOV R1,#LOW (ControlData)
MOV ?_D12_ReadEndpoint?BYTE+04H,#08H
MOV R7,A
LCALL _D12_ReadEndpoint
MOV A,R7
XRL A,#08H
JZ ?C0015
; sizeof(ControlData.DeviceRequest)) != sizeof(DEVICE_REQUEST) ) {
; SOURCE LINE # 135
;
; stall_ep0; /* stall control endpoints */
; SOURCE LINE # 137
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 138
LJMP ?C0035
;
; return;
; }
; SOURCE LINE # 141
?C0015:
;
; /* swap data low byte and high byte, for USB data structure is different
; from C51 data structure */
; ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
; SOURCE LINE # 145
MOV A,ControlData+02H
MOV R5,A
MOV A,ControlData+03H
MOV ControlData+02H,A
MOV A,R5
MOV ControlData+03H,A
; ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
; SOURCE LINE # 146
MOV A,ControlData+04H
MOV R5,A
MOV A,ControlData+05H
MOV ControlData+04H,A
MOV A,R5
MOV ControlData+05H,A
; ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
; SOURCE LINE # 147
MOV A,ControlData+06H
MOV R5,A
MOV A,ControlData+07H
MOV ControlData+06H,A
MOV A,R5
MOV ControlData+07H,A
;
; /* Acknowledge SETUP command to both IN and OUT endpoints, to reanable validate
; and ClearBuffer commands. */
; D12_AcknowledgeEndpoint(0);
; SOURCE LINE # 151
CLR A
MOV R7,A
LCALL _D12_AcknowledgeEndpoint
; D12_AcknowledgeEndpoint(1);
; SOURCE LINE # 152
MOV R7,#01H
LCALL _D12_AcknowledgeEndpoint
;
; /* If ControlRead, wLength means the number of bytes to be sent to host;
; if ControlWrite,wLength means the number of bytes to be got from host. */
; ControlData.wLength = ControlData.DeviceRequest.wLength;
; SOURCE LINE # 156
MOV ControlData+08H,ControlData+06H
MOV ControlData+09H,ControlData+07H
; ControlData.wCount = 0;
; SOURCE LINE # 157
CLR A
MOV ControlData+0AH,A
MOV ControlData+0BH,A
;
; /* Verify whether the contro transfer is Control READ/WRITE ? */
; if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
; SOURCE LINE # 160
MOV A,ControlData
JNB ACC.7,?C0017
; /* Control Read (get command, device will need to send data packet back to host) */
; bEPPflags.bits.setup_packet = 1; // set event SETUP packet
; SOURCE LINE # 162
MOV R7,bEPPflags
MOV A,R7
ORL A,#08H
MOV bEPPflags,A
; bEPPflags.bits.control_state = USB_TRANSMIT;
; SOURCE LINE # 163
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
ORL A,#040H
MOV bEPPflags,A
; }
; SOURCE LINE # 164
RET
?C0017:
; else { /* Control Write (set command) */
; SOURCE LINE # 165
; if (ControlData.DeviceRequest.wLength == 0) {
; SOURCE LINE # 166
MOV A,ControlData+07H
ORL A,ControlData+06H
JNZ ?C0019
; /* Control Write without data */
; bEPPflags.bits.setup_packet = 1; // set event SETUP packet
; SOURCE LINE # 168
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 169
; }
; SOURCE LINE # 170
SJMP ?C0036
?C0019:
; else { /*Control Write with data */
; SOURCE LINE # 171
; if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
; SOURCE LINE # 172
SETB C
MOV A,ControlData+07H
SUBB A,#08H
MOV A,ControlData+06H
SUBB A,#00H
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
JC ?C0021
; /* data length not acceptable */
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 174
MOV bEPPflags,A
; stall_ep0; /* stall control endpoints */
; SOURCE LINE # 175
; }
; SOURCE LINE # 176
RET
?C0021:
; else {
; SOURCE LINE # 177
; /* Device need to be received number of wLength bytes of data from host */
; bEPPflags.bits.control_state = USB_RECEIVE; /* set command with OUT token */
; SOURCE LINE # 179
ORL A,#080H
MOV bEPPflags,A
; }
; SOURCE LINE # 180
; } // set command with data
; SOURCE LINE # 181
; } // else set command
; SOURCE LINE # 182
; } // if setup packet
; SOURCE LINE # 183
RET
?C0014:
;
; else if (bEPPflags.bits.control_state == USB_RECEIVE) {
; SOURCE LINE # 185
MOV R7,bEPPflags
MOV A,R7
SWAP A
RRC A
RRC A
ANL A,#03H
XRL A,#02H
JNZ ?C0024
; i = D12_ReadEndpoint(0, ControlData.dataBuffer + ControlData.wCount,
; SOURCE LINE # 186
MOV A,#LOW (ControlData+0FH)
ADD A,ControlData+0BH
MOV R1,A
CLR A
MOV R2,A
MOV R3,A
MOV ?_D12_ReadEndpoint?BYTE+04H,#010H
MOV R7,A
LCALL _D12_ReadEndpoint
;---- Variable 'i?443' assigned to Register 'R7' ----
; EP0_PACKET_SIZE);
;
; ControlData.wCount += i;
; SOURCE LINE # 189
MOV A,R7
ADD A,ControlData+0BH
MOV ControlData+0BH,A
CLR A
ADDC A,ControlData+0AH
MOV ControlData+0AH,A
; if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) {
; SOURCE LINE # 190
CJNE R7,#010H,?C0026
CLR C
MOV A,ControlData+0BH
SUBB A,ControlData+09H
MOV A,ControlData+0AH
SUBB A,ControlData+08H
JC ?C0016
?C0026:
; bEPPflags.bits.setup_packet = 1;
; SOURCE LINE # 191
?C0036:
MOV R7,bEPPflags
MOV A,R7
ORL A,#08H
MOV bEPPflags,A
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 192
; }
; SOURCE LINE # 193
; }
; SOURCE LINE # 194
SJMP ?C0037
?C0024:
;
; else {
; SOURCE LINE # 196
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 197
?C0035:
?C0037:
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
MOV bEPPflags,A
; }
; SOURCE LINE # 198
; }
; SOURCE LINE # 199
?C0016:
RET
; END OF ProcessCtrlOutEP
;
; // Control IN handler
; void ProcessCtrlInEP(void)
RSEG ?PR?ProcessCtrlInEP?ISR
ProcessCtrlInEP:
USING 0
; SOURCE LINE # 202
; {
; SOURCE LINE # 203
; short i = ControlData.wLength - ControlData.wCount;
; SOURCE LINE # 204
CLR C
MOV A,ControlData+09H
SUBB A,ControlData+0BH
MOV i?544+01H,A
MOV A,ControlData+08H
SUBB A,ControlData+0AH
MOV i?544,A
;
; D12_ReadLastTransactionStatus(1); /* Clear interrupt flag */
; SOURCE LINE # 206
MOV R7,#01H
LCALL _D12_ReadLastTransactionStatus
;
; /* if not in transmit status, return */
; if (bEPPflags.bits.control_state != USB_TRANSMIT)
; SOURCE LINE # 209
MOV R7,bEPPflags
MOV A,R7
SWAP A
RRC A
RRC A
ANL A,#03H
XRL A,#01H
JNZ ?C0029
?C0028:
; return;
;
; /* number of rest bytes to be sent is more then EP0_PACKET_SIZE bytes, send EP0_PACKET_SIZE bytes */
; if( i >= EP0_PACKET_SIZE) {
; SOURCE LINE # 213
CLR C
MOV A,i?544+01H
SUBB A,#010H
MOV A,i?544
XRL A,#080H
SUBB A,#080H
JC ?C0030
; D12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, EP0_PACKET_SIZE);
; SOURCE LINE # 214
MOV R3,ControlData+0CH
MOV A,ControlData+0EH
ADD A,ControlData+0BH
MOV R1,A
MOV A,ControlData+0DH
ADDC A,ControlData+0AH
MOV R2,A
MOV ?_D12_WriteEndpoint?BYTE+04H,#010H
MOV R7,#01H
LCALL _D12_WriteEndpoint
; ControlData.wCount += EP0_PACKET_SIZE;
; SOURCE LINE # 215
MOV A,#010H
ADD A,ControlData+0BH
MOV ControlData+0BH,A
CLR A
ADDC A,ControlData+0AH
MOV ControlData+0AH,A
;
; bEPPflags.bits.control_state = USB_TRANSMIT;
; SOURCE LINE # 217
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
ORL A,#040H
MOV bEPPflags,A
; }
; SOURCE LINE # 218
RET
?C0030:
; /* send rest of bytes (number of bytes is less than EP0_PACKET_SIZE bytes) */
; else if( i != 0) {
; SOURCE LINE # 220
MOV A,i?544+01H
ORL A,i?544
JZ ?C0032
; D12_WriteEndpoint(1, ControlData.pData + ControlData.wCount, i);
; SOURCE LINE # 221
MOV R3,ControlData+0CH
MOV A,ControlData+0EH
ADD A,ControlData+0BH
MOV R1,A
MOV A,ControlData+0DH
ADDC A,ControlData+0AH
MOV R2,A
MOV ?_D12_WriteEndpoint?BYTE+04H,i?544+01H
MOV R7,#01H
LCALL _D12_WriteEndpoint
; ControlData.wCount += i;
; SOURCE LINE # 222
MOV A,i?544+01H
ADD A,ControlData+0BH
MOV ControlData+0BH,A
MOV A,i?544
ADDC A,ControlData+0AH
MOV ControlData+0AH,A
;
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 224
; }
; SOURCE LINE # 225
SJMP ?C0038
?C0032:
; /* Send zero packet at the end, if no data phase,
; IO device acknowledging receipt of setup phase (status phanse) */
; else if (i == 0){
; SOURCE LINE # 228
MOV A,i?544+01H
ORL A,i?544
JNZ ?C0029
; D12_WriteEndpoint(1, 0, 0);
; SOURCE LINE # 229
MOV R3,A
MOV R2,A
MOV R1,A
MOV ?_D12_WriteEndpoint?BYTE+04H,A
MOV R7,#01H
LCALL _D12_WriteEndpoint
;
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 231
?C0038:
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
MOV bEPPflags,A
; }
; SOURCE LINE # 232
; }
; SOURCE LINE # 233
?C0029:
RET
; END OF ProcessCtrlInEP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -