⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbdisk.lst

📁 采用Atmeag162单片机来制作的U盘程序源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0178)   else if(bRecipient==USB_RECIPIENT_ENDPOINT
    0538 3042      CPI	R20,2
    0539 F531      BNE	0x0560
    053A 9020035F  LDS	R2,_ControlData+2
    053C 90300360  LDS	R3,_ControlData+3
    053E 2022      TST	R2
    053F F501      BNE	0x0560
    0540 2033      TST	R3
    0541 F4F1      BNE	0x0560
(0179)        &&ControlData.DeviceRequest.wValue==USB_FEATURE_ENDPOINT_STALL)
(0180)   {
(0181)         endp=(unsigned char)(ControlData.DeviceRequest.wIndex&MAX_ENDPOINTS);
    0542 91400361  LDS	R20,0x361
    0544 7043      ANDI	R20,3
    0545 7050      ANDI	R21,0
(0182)         if(ControlData.DeviceRequest.wIndex&(unsigned char)USB_ENDPOINT_DIRECTION_MASK)
    0546 90200361  LDS	R2,0x361
    0548 90300362  LDS	R3,0x362
    054A FE27      SBRS	R2,7
    054B C008      RJMP	0x0554
(0183)             D12_SetEndpointStatus(endp*2+1,1);
    054C E021      LDI	R18,1
    054D E082      LDI	R24,2
    054E 9F84      MUL	R24,R20
    054F 2D00      MOV	R16,R0
    0550 5F0F      SUBI	R16,0xFF
    0551 940E0646  CALL	_D12_SetEndpointStatus
    0553 C006      RJMP	0x055A
(0184)         else
(0185)             D12_SetEndpointStatus(endp*2,1);
    0554 E021      LDI	R18,1
    0555 E082      LDI	R24,2
    0556 9F84      MUL	R24,R20
    0557 2D00      MOV	R16,R0
    0558 940E0646  CALL	_D12_SetEndpointStatus
(0186)         single_transmit(0,0);
    055A 2722      CLR	R18
    055B 2700      CLR	R16
    055C 2711      CLR	R17
    055D 940E0C58  CALL	_single_transmit
(0187)   }
    055F C002      RJMP	0x0562
(0188)   else  stall_ep0();
    0560 940E0C4A  CALL	_stall_ep0
(0189) }
    0562 940E0EE0  CALL	pop_gset1
    0564 9508      RET
(0190) void set_address(void)
(0191) {
(0192)   D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue&DEVICE_ADDRESS_MASK),1);
_set_address:
    0565 E021      LDI	R18,1
    0566 9100035F  LDS	R16,_ControlData+2
    0568 770F      ANDI	R16,0x7F
    0569 7010      ANDI	R17,0
    056A 940E0605  CALL	_D12_SetAddressEnable
(0193)   single_transmit(0,0);
    056C 2722      CLR	R18
    056D 2700      CLR	R16
    056E 2711      CLR	R17
(0194) }
    056F 940C0C58  JMP	_single_transmit
_get_descriptor:
  bDescriptor          --> R20
    0571 940E0EDD  CALL	push_gset1
(0195) void get_descriptor(void)
(0196) {
(0197)   unsigned char bDescriptor=MSB(ControlData.DeviceRequest.wValue);
    0573 9140035F  LDS	R20,_ControlData+2
    0575 91500360  LDS	R21,_ControlData+3
    0577 2F45      MOV	R20,R21
    0578 2755      CLR	R21
    0579 7050      ANDI	R21,0
(0198)   if(bDescriptor==USB_DEVICE_DESCRIPTOR_TYPE)
    057A 3041      CPI	R20,1
    057B F439      BNE	0x0583
(0199)   {
(0200)      code_transmit((unsigned char*)&DeviceDescr,sizeof(USB_DEVICE_DESCRIPTOR));
    057C E122      LDI	R18,0x12
    057D E030      LDI	R19,0
    057E EC00      LDI	R16,0xC0
    057F E010      LDI	R17,0
    0580 940E0C6A  CALL	_code_transmit
(0201)   }
    0582 C00B      RJMP	0x058E
(0202)   else if(bDescriptor==USB_CONFIGURATION_DESCRIPTOR_TYPE)
    0583 3042      CPI	R20,2
    0584 F439      BNE	0x058C
(0203)   {
(0204)      code_transmit((unsigned char *)&ConfigDescr,CONFIG_DESCRIPTOR_LENGTH);
    0585 E22E      LDI	R18,0x2E
    0586 E030      LDI	R19,0
    0587 ED02      LDI	R16,0xD2
    0588 E010      LDI	R17,0
    0589 940E0C6A  CALL	_code_transmit
(0205)   }
    058B C002      RJMP	0x058E
(0206)   else  stall_ep0();
    058C 940E0C4A  CALL	_stall_ep0
(0207) }
    058E 940E0EE0  CALL	pop_gset1
    0590 9508      RET
_get_configuration:
  c                    --> Y+0
    0591 9721      SBIW	R28,1
(0208) void get_configuration(void)
(0209) {
(0210)   unsigned char c=bEPPflags.bits.configuration;
    0592 9180035A  LDS	R24,_bEPPflags
    0594 9586      LSR	R24
    0595 9586      LSR	R24
    0596 9586      LSR	R24
    0597 9586      LSR	R24
    0598 9586      LSR	R24
    0599 9586      LSR	R24
    059A 9586      LSR	R24
    059B 7081      ANDI	R24,1
    059C 8388      STD	Y+0,R24
(0211)   single_transmit(&c,1);
    059D E021      LDI	R18,1
    059E 018E      MOVW	R16,R28
    059F 940E0C58  CALL	_single_transmit
(0212) }
    05A1 9621      ADIW	R28,1
    05A2 9508      RET
(0213) void set_configuration(void)
(0214) {
(0215)   if(ControlData.DeviceRequest.wValue==0)
_set_configuration:
    05A3 9020035F  LDS	R2,_ControlData+2
    05A5 90300360  LDS	R3,_ControlData+3
    05A7 2022      TST	R2
    05A8 F489      BNE	0x05BA
    05A9 2033      TST	R3
    05AA F479      BNE	0x05BA
(0216)   {
(0217)      single_transmit(0,0);
    05AB 2722      CLR	R18
    05AC 2700      CLR	R16
    05AD 2711      CLR	R17
    05AE 940E0C58  CALL	_single_transmit
(0218)      DISABLE;
    05B0 94F8      BCLR	7
(0219)      bEPPflags.bits.configuration=0;
    05B1 9180035A  LDS	R24,_bEPPflags
    05B3 778F      ANDI	R24,0x7F
    05B4 9380035A  STS	_bEPPflags,R24
(0220)      ENABLE;
    05B6 9478      BSET	7
(0221)      init_unconfig();
    05B7 940E0C52  CALL	_init_unconfig
(0222)   }
    05B9 C01B      RJMP	0x05D5
(0223)   else if(ControlData.DeviceRequest.wValue==1)
    05BA 9180035F  LDS	R24,_ControlData+2
    05BC 91900360  LDS	R25,_ControlData+3
    05BE 3081      CPI	R24,1
    05BF E0E0      LDI	R30,0
    05C0 079E      CPC	R25,R30
    05C1 F489      BNE	0x05D3
(0224)   {
(0225)      single_transmit(0,0);
    05C2 2722      CLR	R18
    05C3 2700      CLR	R16
    05C4 2711      CLR	R17
    05C5 940E0C58  CALL	_single_transmit
(0226)      init_unconfig();
    05C7 940E0C52  CALL	_init_unconfig
(0227)      init_config();
    05C9 940E0C55  CALL	_init_config
(0228)      DISABLE;
    05CB 94F8      BCLR	7
(0229)      bEPPflags.bits.configuration=1;
    05CC 9180035A  LDS	R24,_bEPPflags
    05CE 6880      ORI	R24,0x80
    05CF 9380035A  STS	_bEPPflags,R24
(0230)      ENABLE;
    05D1 9478      BSET	7
(0231)   }
    05D2 C002      RJMP	0x05D5
(0232)   else stall_ep0();
    05D3 940E0C4A  CALL	_stall_ep0
(0233) }
    05D5 9508      RET
_get_interface:
  txdat                --> Y+0
    05D6 9721      SBIW	R28,1
(0234) void get_interface(void)
(0235) {
(0236)   unsigned char txdat=0;
    05D7 2422      CLR	R2
    05D8 8228      STD	Y+0,R2
(0237)   single_transmit(&txdat,1);
    05D9 E021      LDI	R18,1
    05DA 018E      MOVW	R16,R28
    05DB 940E0C58  CALL	_single_transmit
(0238) }
    05DD 9621      ADIW	R28,1
    05DE 9508      RET
(0239) void set_interface(void)
(0240) {
(0241)    if(ControlData.DeviceRequest.wValue==0&&ControlData.DeviceRequest.wIndex==0)
_set_interface:
    05DF 9020035F  LDS	R2,_ControlData+2
    05E1 90300360  LDS	R3,_ControlData+3
    05E3 2022      TST	R2
    05E4 F481      BNE	0x05F5
    05E5 2033      TST	R3
    05E6 F471      BNE	0x05F5
    05E7 90200361  LDS	R2,0x361
    05E9 90300362  LDS	R3,0x362
    05EB 2022      TST	R2
    05EC F441      BNE	0x05F5
    05ED 2033      TST	R3
    05EE F431      BNE	0x05F5
(0242)       single_transmit(0,0);
    05EF 2722      CLR	R18
    05F0 2700      CLR	R16
    05F1 2711      CLR	R17
    05F2 940E0C58  CALL	_single_transmit
    05F4 C002      RJMP	0x05F7
(0243)    else stall_ep0();
    05F5 940E0C4A  CALL	_stall_ep0
(0244) }
    05F7 9508      RET
FILE: D:\AvrUSB\D12CI.C
(0001) #include <macros.h>
(0002) #include "D12CI.h"
(0003) #include "MAIN.h"
(0004) 
(0005) #define cwait  asm("nop")
(0006) #define cwait1 asm("nop");asm("nop")
(0007) 
(0008) extern EPPFLAGS bEPPflags;
(0009) 
(0010) void D12_SetEndpointEnable(unsigned char bEnable)
(0011) {
(0012)    D12_COMMAND=0xD8;
_D12_SetEndpointEnable:
  bEnable              --> R16
    05F8 ED88      LDI	R24,0xD8
    05F9 93807C01  STS	0x7C01,R24
(0013)    if(bEnable)
    05FB 2300      TST	R16
    05FC F021      BEQ	0x0601
(0014)      D12_DATA=1;
    05FD E081      LDI	R24,1
    05FE 93807C00  STS	0x7C00,R24
    0600 C003      RJMP	0x0604
(0015)    else
(0016)      D12_DATA=0;  
    0601 2422      CLR	R2
    0602 92207C00  STS	0x7C00,R2
(0017) }
    0604 9508      RET
(0018) void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
(0019) {
(0020)   D12_COMMAND=0xD0;
_D12_SetAddressEnable:
  bEnable              --> R18
  bAddress             --> R16
    0605 ED80      LDI	R24,0xD0
    0606 93807C01  STS	0x7C01,R24
(0021)   if(bEnable)
    0608 2322      TST	R18
    0609 F009      BEQ	0x060B
(0022)      bAddress|=0x80;
    060A 6800      ORI	R16,0x80
(0023)   D12_DATA=bAddress; 
    060B 93007C00  STS	0x7C00,R16
(0024) }
    060D 9508      RET
(0025) void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
(0026) {
(0027)    D12_COMMAND=0xF3;
_D12_SetMode:
  bClkDiv              --> R18
  bConfig              --> R16
    060E EF83      LDI	R24,0xF3
    060F 93807C01  STS	0x7C01,R24
(0028)    D12_DATA=bConfig;
    0611 93007C00  STS	0x7C00,R16
(0029)    cwait1;
    0613 0000      NOP
    0614 0000      NOP
(0030)    D12_DATA=bClkDiv;  
    0615 93207C00  STS	0x7C00,R18
(0031) }
    0617 9508      RET
(0032) void D12_SetDMA(unsigned char bMode)
(0033) {
(0034)    D12_COMMAND=0xFB;
_D12_SetDMA:
  bMode                --> R16
    0618 EF8B      LDI	R24,0xFB
    0619 93807C01  STS	0x7C01,R24
(0035)    cwait;
    061B 0000      NOP
(0036)    D12_DATA=bMode;
    061C 93007C00  STS	0x7C00,R16
(0037) }
    061E 9508      RET
(0038) unsigned char D12_ReadInterruptRegister(void)
(0039) {
(0040)    unsigned char bl;
(0041)    unsigned char j;
(0042)    j=0;
_D12_ReadInterruptRegister:
  j                    --> R18
  bl                   --> R16
    061F 2722      CLR	R18
(0043)    D12_COMMAND=0xF4;
    0620 EF84      LDI	R24,0xF4
    0621 93807C01  STS	0x7C01,R24
(0044)    cwait;
    0623 0000      NOP
(0045)    bl=D12_DATA;
    0624 91007C00  LDS	R16,0x7C00
(0046)    cwait1;
    0626 0000      NOP
    0627 0000      NOP
(0047)    j=D12_DATA;
    0628 91207C00  LDS	R18,0x7C00
(0048)    return bl;
    062A 9508      RET
_D12_SelectEndpoint:
  c                    --> R20
  bEndp                --> R16
    062B 940E0EDD  CALL	push_gset1
(0049) }
(0050) unsigned char D12_SelectEndpoint(unsigned char bEndp)
(0051) {
(0052)    unsigned char c;
(0053)    D12_COMMAND=bEndp;
    062D 93007C01  STS	0x7C01,R16
(0054)    cwait;
    062F 0000      NOP
(0055)    c=D12_DATA;
    0630 91407C00  LDS	R20,0x7C00
(0056)    return c;
    0632 2F04      MOV	R16,R20
    0633 940E0EE0  CALL	pop_gset1
    0635 9508      RET
(0057) }
(0058) unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
(0059) {
(0060)    D12_COMMAND=0x40+bEndp;
_D12_ReadLastTransactionStatus:
  bEndp                --> R16
    0636 2F80      MOV	R24,R16
    0637 5C80      SUBI	R24,0xC0
    0638 93807C01  STS	0x7C01,R24
(0061)    cwait;   
    063A 0000      NOP
(0062)    return D12_DATA;
    063B 91007C00  LDS	R16,0x7C00
    063D 9508      RET
(0063) }
(0064) unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
(0065) {
(0066)    D12_COMMAND=0x80+bEndp;
_D12_ReadEndpointStatus:
  bEndp                --> R16
    063E 2F80      MOV	R24,R16
    063F 5880      SUBI	R24,0x80
    0640 93807C01  STS	0x7C01,R24
(0067)    cwait;
    0642 0000      NOP
(0068)    return D12_DATA;
    0643 91007C00  LDS	R16,0x7C00
    0645 9508      RET
(0069) }
(0070) void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
(0071) {
(0072)    unsigned char c;
(0073)    D12_COMMAND=0x40+bEndp;
_D12_SetEndpointStatus:
  c                    --> Y+1
  bStalled             --> R18
  bEndp                --> R16
    0646 2F80      MOV	R24,R16
    0647 5C80      SUBI	R24,0xC0
    0648 93807C01  STS	0x7C01,R24
(0074)    cwait;
    064A 0000      NOP
(0075)    D12_DATA=bStalled;
    064B 93207C00  STS	0x7C00,R18
(0076) }
    064D 9508      RET
_D12_ReadEndpoint:
  j                    --> R20
  i                    --> R22
  buf                  --> R10
  len                  --> R18
  endp                 --> R16
    064E 940E0EF8  CALL	push_gset3
    0650 80AE      LDD	R10,Y+6
    0651 80BF      LDD	R11,Y+7
(0077) unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len,
(0078)                                unsigned char * buf)
(0079) {
(0080)   unsigned char i,j;
(0081)    D12_COMMAND=endp;
    0652 93007C01  STS	0x7C01,R16
(0082)    cwait;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -