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

📄 usbdisk.lst

📁 采用Atmeag162单片机来制作的U盘程序源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
    044B F4E8      BCC	0x0469
(0207)   {
(0208)      Erase_Cluster(CANCEL_BLOCK);
    044C EF0F      LDI	R16,0xFF
    044D E017      LDI	R17,7
    044E 940E072A  CALL	_Erase_Cluster
(0209) 	 for(i=pageNum;i<32;i++)
    0450 80AE      LDD	R10,Y+6
    0451 C014      RJMP	0x0466
(0210)      {
(0211)         ReadPage(blockNum,i,PageBuf);
    0452 E480      LDI	R24,0x40
    0453 E091      LDI	R25,1
    0454 8399      STD	Y+1,R25
    0455 8388      STD	Y+0,R24
    0456 2D2A      MOV	R18,R10
    0457 2733      CLR	R19
    0458 0186      MOVW	R16,R12
    0459 940E0757  CALL	_ReadPage
(0212) 	    WritePage(CANCEL_BLOCK,i,PageBuf);
    045B E480      LDI	R24,0x40
    045C E091      LDI	R25,1
    045D 8399      STD	Y+1,R25
    045E 8388      STD	Y+0,R24
    045F 2D2A      MOV	R18,R10
    0460 2733      CLR	R19
    0461 EF0F      LDI	R16,0xFF
    0462 E017      LDI	R17,7
    0463 940E0790  CALL	_WritePage
    0465 94A3      INC	R10
    0466 2D8A      MOV	R24,R10
    0467 3280      CPI	R24,0x20
    0468 F348      BCS	0x0452
(0213)      }
(0214)   }  
(0215)   return TRUE;
    0469 E001      LDI	R16,1
    046A 9627      ADIW	R28,7
    046B 940E0EDA  CALL	pop_gset5
    046D 9508      RET
(0216) #undef  cdbWrite10
(0217) }
(0218) BOOLEAN  SPC_LockMedia(void)
(0219) {
(0220)   Bulk_ErrorHandler(CSW_GOOD,0); 
_SPC_LockMedia:
    046E 2722      CLR	R18
    046F 2733      CLR	R19
    0470 2700      CLR	R16
    0471 940E0E01  CALL	_Bulk_ErrorHandler
(0221)   Bulk_CSWHandler();
    0473 940E0D5A  CALL	_Bulk_CSWHandler
(0222)   return TRUE;
    0475 E001      LDI	R16,1
    0476 9508      RET
(0223) }
(0224) BOOLEAN  SPC_Reserve6(void)
(0225) {
(0226)   Bulk_ErrorHandler(CSW_FAIL,0); 
_SPC_Reserve6:
    0477 2722      CLR	R18
    0478 2733      CLR	R19
    0479 E001      LDI	R16,1
    047A 940E0E01  CALL	_Bulk_ErrorHandler
(0227)   Bulk_CSWHandler();
    047C 940E0D5A  CALL	_Bulk_CSWHandler
(0228)   return TRUE;
    047E E001      LDI	R16,1
    047F 9508      RET
FILE: D:\AvrUSB\CHAP9.C
(0001) #include <macros.h>
(0002) #include <stdio.h>
(0003) #include <string.h>
(0004) 
(0005) #include "D12CI.H"
(0006) #include "MAIN.H"
(0007) #include "USB100.H"
(0008) #include "CHAP9.H"
(0009) 
(0010) extern void single_transmit(unsigned char *buf,unsigned char len);
(0011) extern void code_transmit(const unsigned char * pRomData,unsigned short len);
(0012) extern void stall_ep0(void);
(0013) extern void init_unconfig(void);
(0014) extern void init_config(void);
(0015) 
(0016) #define NUM_ENDPOINTS 4
(0017) #define CONFIG_DESCRIPTOR_LENGTH  sizeof(USB_CONFIGURATION_DESCRIPTOR)\
(0018)                                  +sizeof(USB_INTERFACE_DESCRIPTOR)\
(0019)                                  +(NUM_ENDPOINTS*sizeof(USB_ENDPOINT_DESCRIPTOR))
(0020) extern CONTROL_XFER ControlData;
(0021) extern IO_REQUEST   ioRequest;
(0022) extern EPPFLAGS     bEPPflags;
(0023) 
(0024) const USB_DEVICE_DESCRIPTOR DeviceDescr=
(0025) {
(0026)   sizeof(USB_DEVICE_DESCRIPTOR),
(0027)   USB_DEVICE_DESCRIPTOR_TYPE,
(0028)   0x0001,//SWAP(0x0100),
(0029)   0,//USB_CLASS_CODE_TEST_CLASS_DEVICE,
(0030)   0,
(0031)   0,
(0032)   EP0_PACKET_SIZE,
(0033)   0x8405,//SWAP(0x0471),
(0034)   0x0100,//SWAP(0x0666),
(0035)   0x0001,//SWAP(0x0100),
(0036)   0,
(0037)   0,
(0038)   0,
(0039)   0x01
(0040) };
(0041) const USB_CONFIGURATION_DESCRIPTOR ConfigDescr=
(0042) {
(0043)   sizeof(USB_CONFIGURATION_DESCRIPTOR),
(0044)   USB_CONFIGURATION_DESCRIPTOR_TYPE,
(0045)   CONFIG_DESCRIPTOR_LENGTH,//SWAP(CONFIG_DESCRIPTOR_LENGTH),
(0046)   1,
(0047)   1,
(0048)   0,
(0049)   0x80,
(0050)   0xfa
(0051) };
(0052) const USB_INTERFACE_DESCRIPTOR InterfaceDescr=
(0053) {
(0054)   sizeof(USB_INTERFACE_DESCRIPTOR),
(0055)   USB_INTERFACE_DESCRIPTOR_TYPE,
(0056)   0,
(0057)   0,
(0058)   NUM_ENDPOINTS,
(0059)   USB_DEVICE_CLASS_STORAGE,
(0060)   0x06,//SCSI
(0061)   0x50,//bulk only Transport
(0062)   0
(0063) };
(0064) const USB_ENDPOINT_DESCRIPTOR EP1_TXDescr=
(0065) {
(0066)   sizeof(USB_ENDPOINT_DESCRIPTOR),
(0067)   USB_ENDPOINT_DESCRIPTOR_TYPE,
(0068)   0x81,
(0069)   USB_ENDPOINT_TYPE_INTERRUPT,
(0070)   EP1_PACKET_SIZE,//SWAP(EP1_PACKET_SIZE),
(0071)   10
(0072) };
(0073) const USB_ENDPOINT_DESCRIPTOR EP1_RXDescr=
(0074) {
(0075)   sizeof(USB_ENDPOINT_DESCRIPTOR),
(0076)   USB_ENDPOINT_DESCRIPTOR_TYPE,
(0077)   0x1,
(0078)   USB_ENDPOINT_TYPE_INTERRUPT,
(0079)   EP1_PACKET_SIZE,//SWAP(EP1_PACKET_SIZE),
(0080)   10
(0081) };
(0082) const USB_ENDPOINT_DESCRIPTOR EP2_TXDescr=
(0083) {
(0084)   sizeof(USB_ENDPOINT_DESCRIPTOR),
(0085)   USB_ENDPOINT_DESCRIPTOR_TYPE,
(0086)   0x82,
(0087)   USB_ENDPOINT_TYPE_BULK,
(0088)   EP2_PACKET_SIZE,//SWAP(EP2_PACKET_SIZE),
(0089)   10
(0090) };
(0091) const USB_ENDPOINT_DESCRIPTOR EP2_RXDescr=
(0092) {
(0093)   sizeof(USB_ENDPOINT_DESCRIPTOR),
(0094)   USB_ENDPOINT_DESCRIPTOR_TYPE,
(0095)   0x2,
(0096)   USB_ENDPOINT_TYPE_BULK,
(0097)   EP2_PACKET_SIZE,//SWAP(EP2_PACKET_SIZE),
(0098)   10
(0099) };
(0100) //USB Protocol layer
(0101) void reserved(void)
(0102) {
(0103)   stall_ep0();
(0104) }
_reserved:
    0480 940C0C4A  JMP	_stall_ep0
_get_status:
  c                    --> R20
  endp                 --> R22
  txdat                --> Y+0
  bRecipient           --> R20
    0482 940E0EF4  CALL	push_gset2
    0484 9722      SBIW	R28,2
(0105) //USB standard device requests
(0106) void get_status(void)
(0107) {
(0108)   unsigned char endp,txdat[2];
(0109)   unsigned char bRecipient=ControlData.DeviceRequest.bmRequestType&USB_RECIPIENT;
    0485 9140035D  LDS	R20,_ControlData
    0487 714F      ANDI	R20,0x1F
(0110)   unsigned char c;
(0111)   if(bRecipient==USB_RECIPIENT_DEVICE)
    0488 F4A1      BNE	0x049D
(0112)   {
(0113)     if(bEPPflags.bits.remote_wakeup==1)
    0489 9180035A  LDS	R24,_bEPPflags
    048B 9586      LSR	R24
    048C 9586      LSR	R24
    048D 9586      LSR	R24
    048E 7081      ANDI	R24,1
    048F 3081      CPI	R24,1
    0490 F419      BNE	0x0494
(0114)        txdat[0]=3;
    0491 E083      LDI	R24,3
    0492 8388      STD	Y+0,R24
    0493 C002      RJMP	0x0496
(0115)     else
(0116)        txdat[0]=1;
    0494 E081      LDI	R24,1
    0495 8388      STD	Y+0,R24
(0117)     txdat[1]=0;
    0496 2422      CLR	R2
    0497 8229      STD	Y+1,R2
(0118)     single_transmit(txdat,2);
    0498 E022      LDI	R18,2
    0499 018E      MOVW	R16,R28
    049A 940E0C58  CALL	_single_transmit
(0119)   }
    049C C034      RJMP	0x04D1
(0120)   else if(bRecipient==USB_RECIPIENT_INTERFACE)
    049D 3041      CPI	R20,1
    049E F441      BNE	0x04A7
(0121)   {
(0122)     txdat[0]=0;
    049F 2422      CLR	R2
    04A0 8228      STD	Y+0,R2
(0123)     txdat[1]=0;
    04A1 8229      STD	Y+1,R2
(0124)     single_transmit(txdat,2);
    04A2 E022      LDI	R18,2
    04A3 018E      MOVW	R16,R28
    04A4 940E0C58  CALL	_single_transmit
(0125)   }
    04A6 C02A      RJMP	0x04D1
(0126)   else if(bRecipient==USB_RECIPIENT_ENDPOINT)
    04A7 3042      CPI	R20,2
    04A8 F531      BNE	0x04CF
(0127)   {
(0128)     endp=(unsigned char)(ControlData.DeviceRequest.wIndex&MAX_ENDPOINTS);
    04A9 91600361  LDS	R22,0x361
    04AB 7063      ANDI	R22,3
    04AC 7070      ANDI	R23,0
(0129)     if(ControlData.DeviceRequest.wIndex&(unsigned char)USB_ENDPOINT_DIRECTION_MASK)
    04AD 90200361  LDS	R2,0x361
    04AF 90300362  LDS	R3,0x362
    04B1 FE27      SBRS	R2,7
    04B2 C008      RJMP	0x04BB
(0130)        c=D12_SelectEndpoint(endp*2+1);
    04B3 E082      LDI	R24,2
    04B4 9F86      MUL	R24,R22
    04B5 2D00      MOV	R16,R0
    04B6 5F0F      SUBI	R16,0xFF
    04B7 940E062B  CALL	_D12_SelectEndpoint
    04B9 2F40      MOV	R20,R16
    04BA C006      RJMP	0x04C1
(0131)     else
(0132)        c=D12_SelectEndpoint(endp*2);
    04BB E082      LDI	R24,2
    04BC 9F86      MUL	R24,R22
    04BD 2D00      MOV	R16,R0
    04BE 940E062B  CALL	_D12_SelectEndpoint
    04C0 2F40      MOV	R20,R16
(0133)     if(c&D12_STALL)
    04C1 FF41      SBRS	R20,1
    04C2 C003      RJMP	0x04C6
(0134)        txdat[0]=1;
    04C3 E081      LDI	R24,1
    04C4 8388      STD	Y+0,R24
    04C5 C002      RJMP	0x04C8
(0135)     else
(0136)        txdat[0]=0;
    04C6 2422      CLR	R2
    04C7 8228      STD	Y+0,R2
(0137)     txdat[1]=0;
    04C8 2422      CLR	R2
    04C9 8229      STD	Y+1,R2
(0138)     single_transmit(txdat,2);
    04CA E022      LDI	R18,2
    04CB 018E      MOVW	R16,R28
    04CC 940E0C58  CALL	_single_transmit
(0139)    }
    04CE C002      RJMP	0x04D1
(0140)   else  stall_ep0();
    04CF 940E0C4A  CALL	_stall_ep0
(0141) }
    04D1 9622      ADIW	R28,2
    04D2 940E0ED1  CALL	pop_gset2
    04D4 9508      RET
_clear_feature:
  endp                 --> R20
  bRecipient           --> R20
    04D5 940E0EDD  CALL	push_gset1
(0142) void clear_feature(void)
(0143) {
(0144)   unsigned char endp;
(0145)   unsigned char bRecipient=ControlData.DeviceRequest.bmRequestType&USB_RECIPIENT;
    04D7 9140035D  LDS	R20,_ControlData
    04D9 714F      ANDI	R20,0x1F
(0146)   if(bRecipient==USB_RECIPIENT_DEVICE
    04DA F4A9      BNE	0x04F0
    04DB 9180035F  LDS	R24,_ControlData+2
    04DD 91900360  LDS	R25,_ControlData+3
    04DF 3081      CPI	R24,1
    04E0 E0E0      LDI	R30,0
    04E1 079E      CPC	R25,R30
    04E2 F469      BNE	0x04F0
(0147)         &&ControlData.DeviceRequest.wValue==USB_FEATURE_REMOTE_WAKEUP)
(0148)   {
(0149)      DISABLE;
    04E3 94F8      BCLR	7
(0150)      bEPPflags.bits.remote_wakeup=0;
    04E4 9180035A  LDS	R24,_bEPPflags
    04E6 7F87      ANDI	R24,0xF7
    04E7 9380035A  STS	_bEPPflags,R24
(0151)      ENABLE;
    04E9 9478      BSET	7
(0152)      single_transmit(0,0);
    04EA 2722      CLR	R18
    04EB 2700      CLR	R16
    04EC 2711      CLR	R17
    04ED 940E0C58  CALL	_single_transmit
(0153)   }
    04EF C02A      RJMP	0x051A
(0154)   else if(bRecipient==USB_RECIPIENT_ENDPOINT
    04F0 3042      CPI	R20,2
    04F1 F531      BNE	0x0518
    04F2 9020035F  LDS	R2,_ControlData+2
    04F4 90300360  LDS	R3,_ControlData+3
    04F6 2022      TST	R2
    04F7 F501      BNE	0x0518
    04F8 2033      TST	R3
    04F9 F4F1      BNE	0x0518
(0155)        &&ControlData.DeviceRequest.wValue==USB_FEATURE_ENDPOINT_STALL)
(0156)   {
(0157)         endp=(unsigned char)(ControlData.DeviceRequest.wIndex&MAX_ENDPOINTS);
    04FA 91400361  LDS	R20,0x361
    04FC 7043      ANDI	R20,3
    04FD 7050      ANDI	R21,0
(0158)         if(ControlData.DeviceRequest.wIndex&(unsigned char)USB_ENDPOINT_DIRECTION_MASK)
    04FE 90200361  LDS	R2,0x361
    0500 90300362  LDS	R3,0x362
    0502 FE27      SBRS	R2,7
    0503 C008      RJMP	0x050C
(0159)             D12_SetEndpointStatus(endp*2+1,0);
    0504 2722      CLR	R18
    0505 E082      LDI	R24,2
    0506 9F84      MUL	R24,R20
    0507 2D00      MOV	R16,R0
    0508 5F0F      SUBI	R16,0xFF
    0509 940E0646  CALL	_D12_SetEndpointStatus
    050B C006      RJMP	0x0512
(0160)         else
(0161)             D12_SetEndpointStatus(endp*2,0);
    050C 2722      CLR	R18
    050D E082      LDI	R24,2
    050E 9F84      MUL	R24,R20
    050F 2D00      MOV	R16,R0
    0510 940E0646  CALL	_D12_SetEndpointStatus
(0162)         single_transmit(0,0);
    0512 2722      CLR	R18
    0513 2700      CLR	R16
    0514 2711      CLR	R17
    0515 940E0C58  CALL	_single_transmit
(0163)   }
    0517 C002      RJMP	0x051A
(0164)   else  stall_ep0();
    0518 940E0C4A  CALL	_stall_ep0
(0165) }
    051A 940E0EE0  CALL	pop_gset1
    051C 9508      RET
_set_feature:
  endp                 --> R20
  bRecipient           --> R20
    051D 940E0EDD  CALL	push_gset1
(0166) void set_feature(void)
(0167) {
(0168)   unsigned char endp;
(0169)   unsigned char bRecipient=ControlData.DeviceRequest.bmRequestType&USB_RECIPIENT;
    051F 9140035D  LDS	R20,_ControlData
    0521 714F      ANDI	R20,0x1F
(0170)   if(bRecipient==USB_RECIPIENT_DEVICE
    0522 F4A9      BNE	0x0538
    0523 9180035F  LDS	R24,_ControlData+2
    0525 91900360  LDS	R25,_ControlData+3
    0527 3081      CPI	R24,1
    0528 E0E0      LDI	R30,0
    0529 079E      CPC	R25,R30
    052A F469      BNE	0x0538
(0171)         &&ControlData.DeviceRequest.wValue==USB_FEATURE_REMOTE_WAKEUP)
(0172)   {
(0173)      DISABLE;
    052B 94F8      BCLR	7
(0174)      bEPPflags.bits.remote_wakeup=1;
    052C 9180035A  LDS	R24,_bEPPflags
    052E 6088      ORI	R24,0x8
    052F 9380035A  STS	_bEPPflags,R24
(0175)      ENABLE;
    0531 9478      BSET	7
(0176)      single_transmit(0,0);
    0532 2722      CLR	R18
    0533 2700      CLR	R16
    0534 2711      CLR	R17
    0535 940E0C58  CALL	_single_transmit
(0177)   }
    0537 C02A      RJMP	0x0562

⌨️ 快捷键说明

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