; generated by ARM C/C++ Compiler, 4.1 [Build 894]
; commandline ArmCC [--c99 --list --split_sections --debug -c --asm --interleave -o.\obj\nano1xx_usb.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\nano1xx_usb.d --cpu=Cortex-M0 --apcs=interwork -I..\inc -I..\drv -I..\bsp -I..\bsp\Cmsis -I..\bsp\Driver -I..\bsp\system -I..\lib -I..\lib\libtk -IC:\Keil\ARM\RV31\Inc -IC:\Keil\ARM\CMSIS\Include -D__MICROLIB -D__LCDDISPLAY_BTL001_H --omf_browse=.\obj\nano1xx_usb.crf ..\bsp\Driver\nano1xx_usb.c]
                          THUMB

                          AREA ||i.USBD_DeInit||, CODE, READONLY, ALIGN=2

                  USBD_DeInit PROC
;;;78       */
;;;79     void USBD_DeInit(void)
000000  4805              LDR      r0,|L1.24|
;;;80     {
;;;81         /* Disable USB */
;;;82     	USB_DISABLE_USB();
000002  6801              LDR      r1,[r0,#0]
000004  0849              LSRS     r1,r1,#1
000006  0049              LSLS     r1,r1,#1
000008  6001              STR      r1,[r0,#0]
;;;83     	
;;;84     	/* Disable the USB clock */
;;;85     	CLK->APBCLK &= ~CLK_APBCLK_USBD_EN;
00000a  4804              LDR      r0,|L1.28|
00000c  6881              LDR      r1,[r0,#8]
00000e  0482              LSLS     r2,r0,#18
000010  4391              BICS     r1,r1,r2
000012  6081              STR      r1,[r0,#8]
;;;86     }
000014  4770              BX       lr
;;;87     
                          ENDP

000016  0000              DCW      0x0000
                  |L1.24|
                          DCD      0x40060000
                  |L1.28|
                          DCD      0x50000200

                          AREA ||i.USBD_Init||, CODE, READONLY, ALIGN=2

                  USBD_Init PROC
;;;51       */
;;;52     void USBD_Init(void)
000000  b510              PUSH     {r4,lr}
;;;53     {
;;;54     	uint32_t volatile temp= 0x100;
;;;55     	uint32_t volatile delay=500;
;;;56      
;;;57         /* Enable USB Clock */
;;;58     	CLK->APBCLK |= CLK_APBCLK_USBD_EN;
000002  4817              LDR      r0,|L2.96|
000004  22ff              MOVS     r2,#0xff              ;54
000006  3201              ADDS     r2,#1                 ;54
000008  21ff              MOVS     r1,#0xff              ;55
00000a  6883              LDR      r3,[r0,#8]
00000c  31f5              ADDS     r1,r1,#0xf5           ;55
00000e  0484              LSLS     r4,r0,#18
000010  4323              ORRS     r3,r3,r4
000012  6083              STR      r3,[r0,#8]
;;;59     
;;;60         /* Reset USB */
;;;61     	GCR->IPRST_CTL2 |= GCR_IPRSTCTL2_USBD;
000014  2305              MOVS     r3,#5
000016  071b              LSLS     r3,r3,#28
000018  68d8              LDR      r0,[r3,#0xc]
00001a  4320              ORRS     r0,r0,r4
00001c  60d8              STR      r0,[r3,#0xc]
                  |L2.30|
;;;62     	while(delay--);
00001e  4608              MOV      r0,r1
000020  1e49              SUBS     r1,r1,#1
000022  2800              CMP      r0,#0
000024  d1fb              BNE      |L2.30|
;;;63     	GCR->IPRST_CTL2 &= ~GCR_IPRSTCTL2_USBD;
000026  68d8              LDR      r0,[r3,#0xc]
000028  43a0              BICS     r0,r0,r4
00002a  60d8              STR      r0,[r3,#0xc]
;;;64     
;;;65     	USBD->CTRL = (USB_CTRL_WAKEUP_EN|USB_CTRL_DPPU_EN|USB_CTRL_DRVSE0|USB_CTRL_PWRDB|USB_CTRL_PHY_EN|USB_CTRL_USB_EN);
00002c  480e              LDR      r0,|L2.104|
00002e  490d              LDR      r1,|L2.100|
000030  6001              STR      r1,[r0,#0]
;;;66     	USBD->PDMA |= USB_PDMA_BYTEM_BYTE;
000032  490d              LDR      r1,|L2.104|
000034  3180              ADDS     r1,r1,#0x80
000036  6a4b              LDR      r3,[r1,#0x24]
000038  2404              MOVS     r4,#4
00003a  4323              ORRS     r3,r3,r4
00003c  624b              STR      r3,[r1,#0x24]
;;;67     	USB_ENABLE_USB();
00003e  6801              LDR      r1,[r0,#0]
000040  230f              MOVS     r3,#0xf
000042  4319              ORRS     r1,r1,r3
000044  6001              STR      r1,[r0,#0]
;;;68     	USB_ENABLE_SE0();	
000046  6801              LDR      r1,[r0,#0]
000048  2310              MOVS     r3,#0x10
00004a  4319              ORRS     r1,r1,r3
00004c  6001              STR      r1,[r0,#0]
                  |L2.78|
;;;69         while(temp--);   
00004e  4611              MOV      r1,r2
000050  1e52              SUBS     r2,r2,#1
000052  2900              CMP      r1,#0
000054  d1fb              BNE      |L2.78|
;;;70     	USB_DISABLE_SE0();
000056  6801              LDR      r1,[r0,#0]
000058  4399              BICS     r1,r1,r3
00005a  6001              STR      r1,[r0,#0]
;;;71     }
00005c  bd10              POP      {r4,pc}
;;;72     
                          ENDP

00005e  0000              DCW      0x0000
                  |L2.96|
                          DCD      0x50000200
                  |L2.100|
                          DCD      0x0000021f
                  |L2.104|
                          DCD      0x40060000

                          AREA ||i.USB_BusEvent||, CODE, READONLY, ALIGN=2

                  USB_BusEvent PROC
;;;190      */
;;;191    void USB_BusEvent()
000000  b530              PUSH     {r4,r5,lr}
;;;192    {
;;;193    	uint8_t u8BUSSTS = USBD->BUSSTS;
000002  4a12              LDR      r2,|L3.76|
000004  6850              LDR      r0,[r2,#4]
;;;194    	
;;;195        /* Clear event flag */
;;;196    	USBD->INTSTS = USB_INTSTS_BUS_STS;
000006  2101              MOVS     r1,#1
000008  b2c0              UXTB     r0,r0                 ;193
00000a  60d1              STR      r1,[r2,#0xc]
;;;197    	
;;;198    	/* Just return if USB detached. */
;;;199    	if (gUsbCtrl.CurrentState == USB_STATE_DETACHED)
00000c  4b10              LDR      r3,|L3.80|
00000e  7819              LDRB     r1,[r3,#0]  ; gUsbCtrl
000010  2900              CMP      r1,#0
000012  d011              BEQ      |L3.56|
;;;200    		return;
;;;201    
;;;202        /* Process USB bus command if USB is attached. */
;;;203    	if (u8BUSSTS & USB_BUSSTS_USBRST)
000014  07c5              LSLS     r5,r0,#31
;;;204    	{	
;;;205    	    /* Enable USB and enable PHY */
;;;206            USB_ENABLE_USB();		
000016  240f              MOVS     r4,#0xf
000018  2d00              CMP      r5,#0                 ;203
00001a  d004              BEQ      |L3.38|
00001c  6810              LDR      r0,[r2,#0]
00001e  4320              ORRS     r0,r0,r4
000020  6010              STR      r0,[r2,#0]
;;;207    
;;;208    		/* Enter default state */
;;;209    		gUsbCtrl.CurrentState = USB_STATE_DEFAULT;
000022  2011              MOVS     r0,#0x11
000024  e010              B        |L3.72|
                  |L3.38|
;;;210    	}
;;;211    	else if (u8BUSSTS & USB_BUSSTS_SUSPEND)
000026  0785              LSLS     r5,r0,#30
000028  d507              BPL      |L3.58|
;;;212    	{	
;;;213    	    /* Enable USB but disable PHY */
;;;214            USB_DISABLE_PHY();
00002a  6810              LDR      r0,[r2,#0]
00002c  2402              MOVS     r4,#2
00002e  43a0              BICS     r0,r0,r4
000030  6010              STR      r0,[r2,#0]
;;;215    		
;;;216    		/* Update the USB state */
;;;217    		gUsbCtrl.CurrentState |= USB_STATE_FLAG_SUSPENDED;
000032  2080              MOVS     r0,#0x80
000034  4301              ORRS     r1,r1,r0
000036  7019              STRB     r1,[r3,#0]
                  |L3.56|
;;;218    	}
;;;219    	else if (u8BUSSTS & USB_BUSSTS_RESUME)
;;;220    	{
;;;221    	    /* Enable USB and enable PHY */
;;;222    		USB_ENABLE_USB();
;;;223    		
;;;224    		/* Clear the suspend state */
;;;225    		gUsbCtrl.CurrentState &= ~USB_STATE_FLAG_SUSPENDED;
;;;226    	}
;;;227    }
000038  bd30              POP      {r4,r5,pc}
                  |L3.58|
00003a  0740              LSLS     r0,r0,#29             ;219
00003c  d5fc              BPL      |L3.56|
00003e  6810              LDR      r0,[r2,#0]            ;222
000040  4320              ORRS     r0,r0,r4              ;222
000042  6010              STR      r0,[r2,#0]            ;222
000044  0648              LSLS     r0,r1,#25             ;225
000046  0e40              LSRS     r0,r0,#25             ;225
                  |L3.72|
000048  7018              STRB     r0,[r3,#0]            ;209
00004a  bd30              POP      {r4,r5,pc}
;;;228    
                          ENDP

                  |L3.76|
                          DCD      0x40060000
                  |L3.80|
                          DCD      ||.bss||+0x6c

                          AREA ||i.USB_CtrlInAck||, CODE, READONLY, ALIGN=2

                  USB_CtrlInAck PROC
;;;558      */
;;;559    void USB_CtrlInAck(void)
000000  b5f0              PUSH     {r4-r7,lr}
;;;560    {
;;;561    	uint8_t *ptr;
;;;562    
;;;563    	/* get control pipe SRAM buffer */
;;;564    	ptr = (uint8_t *)((uint32_t)USBD_SRAM_BASE + (uint32_t)USBD->BUFSEG0);
000002  4c2a              LDR      r4,|L4.172|
000004  6a20              LDR      r0,[r4,#0x20]
000006  492a              LDR      r1,|L4.176|
;;;565    
;;;566    	switch (gUsbCtrl.StateFlag)
000008  4d2a              LDR      r5,|L4.180|
00000a  1840              ADDS     r0,r0,r1              ;564
00000c  6869              LDR      r1,[r5,#4]  ; gUsbCtrl
;;;567    	{
;;;568    		/* Out ACK */
;;;569    		case FLAG_OUT_ACK:
;;;570    			gUsbCtrl.pDesc = 0;
;;;571    			gUsbCtrl.ReqLen = 0;
;;;572    			USBD->MXPLD1 = 0;
;;;573    			break;
;;;574    		/* Set Address */
;;;575    		case FLAG_SET_ADDRESS:
;;;576    		{
;;;577    			if (gUsbCtrl.DeviceAddress == 0)
;;;578    				gUsbCtrl.CurrentState = USB_STATE_DEFAULT;
;;;579    			else
;;;580    				gUsbCtrl.CurrentState = USB_STATE_ADDRESS;
00000e  2231              MOVS     r2,#0x31
000010  2600              MOVS     r6,#0                 ;570
000012  2904              CMP      r1,#4                 ;566
000014  d02a              BEQ      |L4.108|
000016  dc09              BGT      |L4.44|
000018  2901              CMP      r1,#1                 ;566
00001a  d020              BEQ      |L4.94|
00001c  2902              CMP      r1,#2                 ;566
00001e  d12d              BNE      |L4.124|
000020  7868              LDRB     r0,[r5,#1]            ;577  ; gUsbCtrl
000022  2800              CMP      r0,#0                 ;577
000024  d01f              BEQ      |L4.102|
000026  702a              STRB     r2,[r5,#0]
                  |L4.40|
;;;581    
;;;582    			USBD->DADDR = gUsbCtrl.DeviceAddress;
000028  6120              STR      r0,[r4,#0x10]
;;;583    			break;
00002a  e026              B        |L4.122|
                  |L4.44|
00002c  2908              CMP      r1,#8                 ;566
00002e  d01d              BEQ      |L4.108|
000030  2920              CMP      r1,#0x20              ;566
000032  d123              BNE      |L4.124|
;;;584    		}
;;;585    		/* Set Interface */
;;;586    		case FLAG_SET_INTERFACE:
;;;587    		/* Set Configuration */
;;;588    		case FLAG_SET_CONFIG:
;;;589    		{
;;;590    			if (gUsbCtrl.ConfigState == 0)
;;;591    				gUsbCtrl.CurrentState = USB_STATE_ADDRESS;
;;;592    			else
;;;593    				gUsbCtrl.CurrentState = USB_STATE_CONFIGURED;
;;;594    			break;
;;;595    		}
;;;596    		/* EP0 Data In */
;;;597    		case FLAG_EP0_DATA_IN:
;;;598    			if (gUsbCtrl.ReqLen >= gCtrlMaxPacketSize)
000034  4f20              LDR      r7,|L4.184|
000036  491f              LDR      r1,|L4.180|
000038  696b              LDR      r3,[r5,#0x14]  ; gUsbCtrl
00003a  683a              LDR      r2,[r7,#0]            ;566  ; gCtrlMaxPacketSize
00003c  6909              LDR      r1,[r1,#0x10]         ;566
00003e  4293              CMP      r3,r2
000040  d327              BCC      |L4.146|
;;;599    			{
;;;600    				my_memcpy(ptr, (void *)gUsbCtrl.pDesc, gCtrlMaxPacketSize);
000042  f7fffffe          BL       my_memcpy
;;;601    				gUsbCtrl.pDesc = gUsbCtrl.pDesc + gCtrlMaxPacketSize;
000046  6929              LDR      r1,[r5,#0x10]  ; gUsbCtrl
000048  6838              LDR      r0,[r7,#0]  ; gCtrlMaxPacketSize
;;;602    				if (gUsbCtrl.EP0_Toggle)
;;;603    				{
;;;604    					gUsbCtrl.EP0_Toggle = 0;
;;;605    					USBD->CFG0 &= ~USB_CFG_DSQ_SYNC_DATA1;
00004a  2280              MOVS     r2,#0x80
00004c  1809              ADDS     r1,r1,r0              ;601
00004e  6129              STR      r1,[r5,#0x10]         ;602  ; gUsbCtrl
000050  78e9              LDRB     r1,[r5,#3]            ;602  ; gUsbCtrl
000052  2900              CMP      r1,#0                 ;602
000054  d013              BEQ      |L4.126|
000056  70ee              STRB     r6,[r5,#3]            ;604
000058  6aa1              LDR      r1,[r4,#0x28]
00005a  4391              BICS     r1,r1,r2
00005c  e013              B        |L4.134|
                  |L4.94|
00005e  612e              STR      r6,[r5,#0x10]         ;571  ; gUsbCtrl
000060  616e              STR      r6,[r5,#0x14]         ;572  ; gUsbCtrl
000062  6366              STR      r6,[r4,#0x34]         ;572
000064  e009              B        |L4.122|
                  |L4.102|
000066  2111              MOVS     r1,#0x11              ;578
000068  7029              STRB     r1,[r5,#0]            ;578
00006a  e7dd              B        |L4.40|
                  |L4.108|
00006c  78a8              LDRB     r0,[r5,#2]            ;590  ; gUsbCtrl
00006e  2800              CMP      r0,#0                 ;590
000070  d002              BEQ      |L4.120|
000072  2071              MOVS     r0,#0x71              ;593
000074  7028              STRB     r0,[r5,#0]            ;593
000076  e000              B        |L4.122|
                  |L4.120|
000078  702a              STRB     r2,[r5,#0]            ;591
                  |L4.122|
;;;606    				}
;;;607    				else
;;;608    				{
;;;609    					gUsbCtrl.EP0_Toggle = 1;
;;;610    					USBD->CFG0 |= USB_CFG_DSQ_SYNC_DATA1;
;;;611    				}
;;;612    				USBD->MXPLD0 = gCtrlMaxPacketSize;
;;;613    				gUsbCtrl.ReqLen -= gCtrlMaxPacketSize;
;;;614    			}
;;;615    			else
;;;616    			{
;;;617    				my_memcpy(ptr, (void *)gUsbCtrl.pDesc, gUsbCtrl.ReqLen);
;;;618    				USBD->MXPLD0 = gUsbCtrl.ReqLen;
;;;619    				if (gUsbCtrl.ReqLen == 0)
;;;620    					USBD->MXPLD1 = 0;
;;;621    				else
;;;622    					gUsbCtrl.StateFlag = FLAG_OUT_ACK;
;;;623    			}
;;;624    			return;
;;;625    		default:
;;;626    			return;
;;;627    	}
;;;628    	gUsbCtrl.StateFlag = 0;
;;;629    }
00007a  606e              STR      r6,[r5,#4]  ; gUsbCtrl
                  |L4.124|
00007c  bdf0              POP      {r4-r7,pc}
                  |L4.126|
00007e  2101              MOVS     r1,#1                 ;609
000080  70e9              STRB     r1,[r5,#3]            ;609
000082  6aa1              LDR      r1,[r4,#0x28]         ;610
000084  4311              ORRS     r1,r1,r2              ;610
                  |L4.134|
000086  62a1              STR      r1,[r4,#0x28]         ;610
000088  6260              STR      r0,[r4,#0x24]         ;612
00008a  6969              LDR      r1,[r5,#0x14]         ;613  ; gUsbCtrl
00008c  1a08              SUBS     r0,r1,r0              ;613
00008e  6168              STR      r0,[r5,#0x14]         ;613  ; gUsbCtrl
000090  bdf0              POP      {r4-r7,pc}
                  |L4.146|
000092  461a              MOV      r2,r3
000094  f7fffffe          BL       my_memcpy
000098  6968              LDR      r0,[r5,#0x14]         ;618  ; gUsbCtrl
00009a  6260              STR      r0,[r4,#0x24]         ;618
00009c  2800              CMP      r0,#0                 ;619
00009e  d002              BEQ      |L4.166|
0000a0  2001              MOVS     r0,#1                 ;622
0000a2  6068              STR      r0,[r5,#4]            ;622  ; gUsbCtrl
0000a4  bdf0              POP      {r4-r7,pc}
                  |L4.166|
0000a6  6366              STR      r6,[r4,#0x34]         ;620
0000a8  bdf0              POP      {r4-r7,pc}
;;;630    
                          ENDP

0000aa  0000              DCW      0x0000
                  |L4.172|
                          DCD      0x40060000
                  |L4.176|
                          DCD      0x40060100
                  |L4.180|
                          DCD      ||.bss||+0x6c
                  |L4.184|
                          DCD      ||.data||

                          AREA ||i.USB_CtrlOutAck||, CODE, READONLY, ALIGN=2

                  USB_CtrlOutAck PROC
;;;636      */
;;;637    void USB_CtrlOutAck(void)
000000  b5f0              PUSH     {r4-r7,lr}
;;;638    {
;;;639    	switch (gUsbCtrl.StateFlag)
000002  4c28              LDR      r4,|L5.164|
;;;640    	{
;;;641    		case FLAG_UAC_SET_CUR:
;;;642    		{
;;;643    			if (gUsbInfo.UsbDeviceClass & USB_CLASS_AUDIO)
;;;644    			{
;;;645    				uint8_t *ptr;
;;;646    				/* get control pipe SRAM buffer */
;;;647    				ptr = (uint8_t *)((uint32_t)USBD_SRAM_BASE + (uint32_t)USBD->BUFSEG0);
000004  4928              LDR      r1,|L5.168|
000006  6862              LDR      r2,[r4,#4]            ;639  ; gUsbCtrl
000008  4620              MOV      r0,r4                 ;643
00000a  3aff              SUBS     r2,r2,#0xff           ;639
00000c  386c              SUBS     r0,r0,#0x6c           ;643
00000e  3a01              SUBS     r2,#1                 ;639
;;;648    
;;;649    				if (gUsbCtrl.UsbSetupBuf[5] == 0x05)	/* REC_FEATURE_UNITID */
;;;650    				{
;;;651    					if (gUsbCtrl.UsbSetupBuf[3] == 0x01)	/* MUTE_CONTROL */
;;;652    						gUacInfo.RecMute = *ptr;
;;;653    					else if (gUsbCtrl.UsbSetupBuf[3] == 0x02)	/* VOLUME_CONTROL */
;;;654    						gUacInfo.RecVolume = (int16_t) (*ptr | (*(ptr+1) << 8));
;;;655    				}
;;;656    				else if (gUsbCtrl.UsbSetupBuf[5] == 0x06)	/* PLAY_FEATURE_UNITID */
;;;657    				{
;;;658    					if (gUsbCtrl.UsbSetupBuf[3] == 0x01)	/* MUTE_CONTROL */
;;;659    						gUacInfo.PlayMute = *ptr;
;;;660    					else if (gUsbCtrl.UsbSetupBuf[3] == 0x02)	/* VOLUME_CONTROL */
;;;661    					{
;;;662    						if (gUsbCtrl.UsbSetupBuf[2] == 1)
;;;663    							gUacInfo.PlayVolumeL = (int16_t) (*ptr | (*(ptr+1) << 8));
;;;664    						else
;;;665    							gUacInfo.PlayVolumeR = (int16_t) (*ptr | (*(ptr+1) << 8));
;;;666    					}
;;;667    				}
;;;668    				USBD->CFG0 |= USB_CFG_DSQ_SYNC_DATA1;
000010  2780              MOVS     r7,#0x80
000012  6800              LDR      r0,[r0,#0]            ;643
000014  4e25              LDR      r6,|L5.172|
;;;669    				USBD->MXPLD0 = 0;
000016  2500              MOVS     r5,#0
000018  2a00              CMP      r2,#0                 ;639
00001a  d003              BEQ      |L5.36|
00001c  3aff              SUBS     r2,r2,#0xff           ;639
00001e  3a01              SUBS     r2,#1                 ;639
000020  d13e              BNE      |L5.160|
000022  e034              B        |L5.142|
                  |L5.36|
000024  0740              LSLS     r0,r0,#29             ;643
000026  d53b              BPL      |L5.160|
000028  6a30              LDR      r0,[r6,#0x20]         ;647
00002a  4a1e              LDR      r2,|L5.164|
00002c  1840              ADDS     r0,r0,r1              ;647
00002e  491d              LDR      r1,|L5.164|
000030  7b63              LDRB     r3,[r4,#0xd]          ;649  ; gUsbCtrl
000032  3218              ADDS     r2,r2,#0x18           ;652
000034  7ac9              LDRB     r1,[r1,#0xb]          ;651
000036  2b05              CMP      r3,#5                 ;649
000038  d002              BEQ      |L5.64|
00003a  2b06              CMP      r3,#6                 ;656
00003c  d00e              BEQ      |L5.92|
00003e  e01d              B        |L5.124|
                  |L5.64|
000040  2901              CMP      r1,#1                 ;651
000042  d002              BEQ      |L5.74|
000044  2902              CMP      r1,#2                 ;653
000046  d003              BEQ      |L5.80|
000048  e018              B        |L5.124|
                  |L5.74|
00004a  7800              LDRB     r0,[r0,#0]            ;652
00004c  7090              STRB     r0,[r2,#2]            ;652
00004e  e015              B        |L5.124|
                  |L5.80|
000050  7841              LDRB     r1,[r0,#1]            ;654
000052  7803              LDRB     r3,[r0,#0]            ;654
000054  0208              LSLS     r0,r1,#8              ;654
000056  4318              ORRS     r0,r0,r3              ;654
000058  8090              STRH     r0,[r2,#4]            ;654
00005a  e00f              B        |L5.124|
                  |L5.92|
00005c  2901              CMP      r1,#1                 ;658
00005e  d002              BEQ      |L5.102|
000060  2902              CMP      r1,#2                 ;660
000062  d003              BEQ      |L5.108|
000064  e00a              B        |L5.124|
                  |L5.102|
000066  7800              LDRB     r0,[r0,#0]            ;659
000068  70d0              STRB     r0,[r2,#3]            ;659
00006a  e007              B        |L5.124|
                  |L5.108|
00006c  7aa1              LDRB     r1,[r4,#0xa]          ;662  ; gUsbCtrl
00006e  7803              LDRB     r3,[r0,#0]            ;665
000070  2901              CMP      r1,#1                 ;662
000072  7841              LDRB     r1,[r0,#1]            ;665
000074  d007              BEQ      |L5.134|
000076  0208              LSLS     r0,r1,#8              ;665
000078  4318              ORRS     r0,r0,r3              ;665
00007a  81d0              STRH     r0,[r2,#0xe]          ;665
                  |L5.124|
00007c  6ab0              LDR      r0,[r6,#0x28]         ;668
00007e  4338              ORRS     r0,r0,r7              ;668
000080  62b0              STR      r0,[r6,#0x28]         ;668
000082  6275              STR      r5,[r6,#0x24]
;;;670    			}
000084  e00c              B        |L5.160|
                  |L5.134|
000086  0208              LSLS     r0,r1,#8              ;663
000088  4318              ORRS     r0,r0,r3              ;663
00008a  8190              STRH     r0,[r2,#0xc]          ;663
00008c  e7f6              B        |L5.124|
                  |L5.142|
;;;671    			break;
;;;672    		}
;;;673    
;;;674    		case FLAG_SET_LINE_CODE:
;;;675    		{
;;;676    			if (gUsbInfo.UsbDeviceClass & USB_CLASS_CDC)
00008e  0780              LSLS     r0,r0,#30
000090  d506              BPL      |L5.160|
;;;677    			{
;;;678    				my_memcpy((void *)&gCdcInfo, (uint8_t *)((uint32_t)USBD_SRAM_BASE + (uint32_t)USBD->BUFSEG0), USBD->MXPLD1);
000092  6b72              LDR      r2,[r6,#0x34]
000094  6a30              LDR      r0,[r6,#0x20]
000096  1841              ADDS     r1,r0,r1
000098  4805              LDR      r0,|L5.176|
00009a  f7fffffe          BL       my_memcpy
;;;679    				USBD->CFG0 |= USB_CFG_DSQ_SYNC_DATA1;
;;;680    				USBD->MXPLD0 = 0;
;;;681    				break;
00009e  e7ed              B        |L5.124|
                  |L5.160|
;;;682    			}
;;;683    		}
;;;684    		default:
;;;685    			;
;;;686    	}
;;;687    	gUsbCtrl.StateFlag = 0;
0000a0  6065              STR      r5,[r4,#4]  ; gUsbCtrl
;;;688    }
0000a2  bdf0              POP      {r4-r7,pc}
;;;689    
                          ENDP

                  |L5.164|
                          DCD      ||.bss||+0x6c
                  |L5.168|
                          DCD      0x40060100
                  |L5.172|
                          DCD      0x40060000
                  |L5.176|
                          DCD      ||.data||+0x10

                          AREA ||i.USB_FloatDetect||, CODE, READONLY, ALIGN=2

                  USB_FloatDetect PROC
;;;162      */
;;;163    void USB_FloatDetect()
000000  480a              LDR      r0,|L6.44|
;;;164    {
;;;165    	uint32_t u32FLDET = (USBD->BUSSTS & USB_BUSSTS_FLDET_IN)? TRUE : FALSE;
000002  6841              LDR      r1,[r0,#4]
000004  06c9              LSLS     r1,r1,#27
000006  0fc9              LSRS     r1,r1,#31
;;;166    
;;;167    	USBD->INTSTS = USB_INTSTS_FLD_STS;
000008  2204              MOVS     r2,#4
00000a  60c2              STR      r2,[r0,#0xc]
;;;168    	
;;;169    	if (u32FLDET)
;;;170    	{
;;;171    	    /* USB Plug In */
;;;172    		gUsbCtrl.CurrentState = USB_STATE_ATTACHED;
00000c  4a08              LDR      r2,|L6.48|
00000e  2900              CMP      r1,#0                 ;169
000010  d005              BEQ      |L6.30|
000012  2101              MOVS     r1,#1
000014  7011              STRB     r1,[r2,#0]
;;;173    	    /* Enable USB and enable PHY */
;;;174            USB_ENABLE_USB();
000016  6801              LDR      r1,[r0,#0]
000018  220f              MOVS     r2,#0xf
00001a  4311              ORRS     r1,r1,r2
00001c  e004              B        |L6.40|
                  |L6.30|
;;;175    	}
;;;176    	else
;;;177    	{
;;;178    	    /* USB Un-plug */
;;;179    		gUsbCtrl.CurrentState = USB_STATE_DETACHED;
00001e  2100              MOVS     r1,#0
000020  7011              STRB     r1,[r2,#0]
;;;180    	    /* Disable USB, Disable remote weak up, and disable PHY */
;;;181            USB_DISABLE_USB();
000022  6801              LDR      r1,[r0,#0]
000024  0849              LSRS     r1,r1,#1
000026  0049              LSLS     r1,r1,#1
                  |L6.40|
000028  6001              STR      r1,[r0,#0]            ;174
;;;182    	}
;;;183    }
00002a  4770              BX       lr
;;;184    
                          ENDP

                  |L6.44|
                          DCD      0x40060000
                  |L6.48|
                          DCD      ||.bss||+0x6c

                          AREA ||i.USB_Open||, CODE, READONLY, ALIGN=2

                  USB_Open PROC
;;;93       */
;;;94     void USB_Open(STR_USBD_T *sParam)
000000  b5f8              PUSH     {r3-r7,lr}
;;;95     {
000002  4605              MOV      r5,r0
;;;96     	uint32_t volatile i, regAddr, regVal;
;;;97     
;;;98     	memset((void *)&gUsbCtrl, 0, sizeof(STR_USBD_CTRL_T));
000004  2118              MOVS     r1,#0x18
000006  4839              LDR      r0,|L7.236|
000008  f7fffffe          BL       __aeabi_memclr4
;;;99     	memset((void *)&gUsbInfo, 0, sizeof(STR_USBD_T));
00000c  4837              LDR      r0,|L7.236|
00000e  216c              MOVS     r1,#0x6c
000010  386c              SUBS     r0,r0,#0x6c
000012  f7fffffe          BL       __aeabi_memclr4
;;;100    	memcpy(&gUsbInfo, sParam, sizeof(STR_USBD_T));
000016  4835              LDR      r0,|L7.236|
000018  226c              MOVS     r2,#0x6c
00001a  4629              MOV      r1,r5
00001c  386c              SUBS     r0,r0,#0x6c
00001e  f7fffffe          BL       __aeabi_memcpy4
;;;101    
;;;102    	if (sParam->UsbDeviceClass & USB_CLASS_AUDIO)
000022  682c              LDR      r4,[r5,#0]
000024  0760              LSLS     r0,r4,#29
000026  d504              BPL      |L7.50|
;;;103    		memset((void *)&gUacInfo, 0, sizeof(STR_USBD_UAC_T));
000028  4830              LDR      r0,|L7.236|
00002a  2116              MOVS     r1,#0x16
00002c  3018              ADDS     r0,r0,#0x18
00002e  f7fffffe          BL       __aeabi_memclr
                  |L7.50|
;;;104    	if (sParam->UsbDeviceClass & USB_CLASS_MASS_STORAGE)
000032  06e2              LSLS     r2,r4,#27
;;;105    		memset((void *)&gUdcInfo, 0, sizeof(STR_USBD_UDC_T));
000034  2000              MOVS     r0,#0
000036  492e              LDR      r1,|L7.240|
000038  2a00              CMP      r2,#0                 ;104
00003a  da01              BGE      |L7.64|
00003c  6088              STR      r0,[r1,#8]  ; gUdcInfo
00003e  60c8              STR      r0,[r1,#0xc]  ; gUdcInfo
                  |L7.64|
;;;106    	if (sParam->UsbDeviceClass & USB_CLASS_CDC)
000040  682a              LDR      r2,[r5,#0]
;;;107    	{
;;;108    		memset((void *)&gCdcInfo, 0, sizeof(STR_USBD_CDC_T));
;;;109    		gCdcInfo.u32DTERate = 115200;	/* Baud rate : 115200 */
;;;110    		gCdcInfo.u8CharFormat = 0;		/* stop bit */
;;;111    		gCdcInfo.u8ParityType = 0;		/* parity */
;;;112    		gCdcInfo.u8DataBits = 8;		/* data bits */
000042  2308              MOVS     r3,#8
000044  0792              LSLS     r2,r2,#30             ;106
000046  2a00              CMP      r2,#0                 ;106
000048  da08              BGE      |L7.92|
00004a  24e1              MOVS     r4,#0xe1              ;109
00004c  4a28              LDR      r2,|L7.240|
00004e  0264              LSLS     r4,r4,#9              ;109
000050  3210              ADDS     r2,r2,#0x10           ;109
000052  6148              STR      r0,[r1,#0x14]         ;109  ; gCdcInfo
000054  6014              STR      r4,[r2,#0]            ;110  ; gCdcInfo
000056  7110              STRB     r0,[r2,#4]            ;110
000058  7150              STRB     r0,[r2,#5]            ;111
00005a  7193              STRB     r3,[r2,#6]
                  |L7.92|
;;;113    	}
;;;114        /***************************************************************/
;;;115    	/* Init control end point */
;;;116    	USBD->BUFSEG = 0;					/* Buffer for setup packet */
00005c  4825              LDR      r0,|L7.244|
00005e  2200              MOVS     r2,#0
000060  6182              STR      r2,[r0,#0x18]
;;;117    
;;;118    	/* EP0 ==> control IN end point, address 0 */
;;;119        USBD->CFG0 = (USB_CFG_CSTALL | USB_CFG_EPMODE_IN  | 0 | 0x8000);	/* Clear EP0 CTRL IN Ready Flag */
000062  4a25              LDR      r2,|L7.248|
000064  6282              STR      r2,[r0,#0x28]
;;;120        USBD->BUFSEG0 = 0x8;				/* Buffer for EP0 */
000066  6203              STR      r3,[r0,#0x20]
;;;121    
;;;122    	/* EP1 ==> control OUT end point, address 0 */
;;;123        USBD->CFG1 = (USB_CFG_CSTALL | USB_CFG_EPMODE_OUT | 0 | 0x8000); 	/* Clear EP1 CTRL OUT Ready Flag */
000068  4a23              LDR      r2,|L7.248|
00006a  3a20              SUBS     r2,r2,#0x20
00006c  6382              STR      r2,[r0,#0x38]
;;;124        USBD->BUFSEG1 = 0x8;  				/* Buffer for EP1 */
00006e  6303              STR      r3,[r0,#0x30]
;;;125    
;;;126    	/* save Ctrl Max. Packet Size and current SRAM buffer */
;;;127    	gCtrlMaxPacketSize = sParam->u32CtrlMaxPacketSize;
000070  491f              LDR      r1,|L7.240|
000072  6868              LDR      r0,[r5,#4]
;;;128    	gCurrentSramBuffer = 0x8 + sParam->u32CtrlMaxPacketSize;
000074  6008              STR      r0,[r1,#0]  ; gCtrlMaxPacketSize
000076  3008              ADDS     r0,r0,#8
;;;129    
;;;130        /***************************************************************/
;;;131    	/* Init other endpoint */
;;;132    	for (i=0; i<sParam->u32EndpointCount; i++)
000078  2200              MOVS     r2,#0
00007a  6048              STR      r0,[r1,#4]  ; gCurrentSramBuffer
00007c  e020              B        |L7.192|
                  |L7.126|
;;;133    	{
;;;134    		regAddr = (uint32_t)(0x40060048 + 0x10 * i);	/* USBD CFG2 */
00007e  481d              LDR      r0,|L7.244|
000080  0114              LSLS     r4,r2,#4
000082  3048              ADDS     r0,r0,#0x48
000084  1826              ADDS     r6,r4,r0
;;;135    		regVal = ((sParam->EP[i].IsDirIN? USB_CFG_EPMODE_IN: USB_CFG_EPMODE_OUT) | sParam->EP[i].u32EpNum | 0x8000);
000086  1960              ADDS     r0,r4,r5
000088  6941              LDR      r1,[r0,#0x14]
00008a  68c3              LDR      r3,[r0,#0xc]
00008c  2900              CMP      r1,#0
00008e  d001              BEQ      |L7.148|
000090  2140              MOVS     r1,#0x40
000092  e000              B        |L7.150|
                  |L7.148|
000094  2120              MOVS     r1,#0x20
                  |L7.150|
000096  2701              MOVS     r7,#1
000098  03ff              LSLS     r7,r7,#15
00009a  4339              ORRS     r1,r1,r7
00009c  430b              ORRS     r3,r3,r1
;;;136    		if (sParam->EP[i].IsIsoTransfer)
00009e  6981              LDR      r1,[r0,#0x18]
0000a0  2900              CMP      r1,#0
0000a2  d001              BEQ      |L7.168|
;;;137    			regVal |= USB_CFG_ISOCH;
0000a4  2110              MOVS     r1,#0x10
0000a6  430b              ORRS     r3,r3,r1
                  |L7.168|
;;;138    
;;;139    		*((__IO uint32_t *) (regAddr)) = regVal;
0000a8  6033              STR      r3,[r6,#0]
;;;140    		regAddr = (uint32_t)(0x40060040 + 0x10 * i);	/* USBD BUFSEG2 */
0000aa  4912              LDR      r1,|L7.244|
0000ac  3140              ADDS     r1,r1,#0x40
0000ae  1863              ADDS     r3,r4,r1
;;;141    		*((__IO uint32_t *) (regAddr)) = gCurrentSramBuffer;
0000b0  490f              LDR      r1,|L7.240|
0000b2  684c              LDR      r4,[r1,#4]  ; gCurrentSramBuffer
0000b4  601c              STR      r4,[r3,#0]
;;;142    		gCurrentSramBuffer += sParam->EP[i].u32MaxPacketSize;
0000b6  6900              LDR      r0,[r0,#0x10]
0000b8  684b              LDR      r3,[r1,#4]  ; gCurrentSramBuffer
0000ba  18c0              ADDS     r0,r0,r3
0000bc  1c52              ADDS     r2,r2,#1              ;132
0000be  6048              STR      r0,[r1,#4]            ;132  ; gCurrentSramBuffer
                  |L7.192|
0000c0  68a8              LDR      r0,[r5,#8]            ;132
0000c2  4290              CMP      r0,r2                 ;132
0000c4  d8db              BHI      |L7.126|
;;;143    	}
;;;144    
;;;145    	gUsbCtrl.CurrentState = USB_STATE_DETACHED;
0000c6  4909              LDR      r1,|L7.236|
0000c8  2000              MOVS     r0,#0
0000ca  7008              STRB     r0,[r1,#0]
;;;146    	USB_FloatDetect();
0000cc  f7fffffe          BL       USB_FloatDetect
;;;147    
;;;148    	/* Enable Interrupt Handler */
;;;149    	USBD->INTEN = (USB_INTEN_BUSEVT | USB_INTEN_USBEVT | USB_INTEN_FLDET | USB_INTEN_WAKEUP);
0000d0  4808              LDR      r0,|L7.244|
0000d2  210f              MOVS     r1,#0xf
0000d4  6081              STR      r1,[r0,#8]
0000d6  4909              LDR      r1,|L7.252|
0000d8  6808              LDR      r0,[r1,#0]
0000da  0200              LSLS     r0,r0,#8
0000dc  0a00              LSRS     r0,r0,#8
0000de  074a              LSLS     r2,r1,#29
0000e0  4310              ORRS     r0,r0,r2
0000e2  6008              STR      r0,[r1,#0]
0000e4  4906              LDR      r1,|L7.256|
0000e6  0a10              LSRS     r0,r2,#8
0000e8  6008              STR      r0,[r1,#0]
;;;150    	NVIC_SetPriority (USBD_IRQn, (1<<__NVIC_PRIO_BITS) - 2);
;;;151    	NVIC_EnableIRQ(USBD_IRQn);
;;;152    }
0000ea  bdf8              POP      {r3-r7,pc}
;;;153    
                          ENDP

                  |L7.236|
                          DCD      ||.bss||+0x6c
                  |L7.240|
                          DCD      ||.data||
                  |L7.244|
                          DCD      0x40060000
                  |L7.248|
                          DCD      0x00008140
                  |L7.252|
                          DCD      0xe000e414
                  |L7.256|
                          DCD      0xe000e100

                          AREA ||i.USB_ProcessSetup||, CODE, READONLY, ALIGN=2

                  USB_ProcessSetup PROC
;;;516      */
;;;517    void USB_ProcessSetup(void)
000000  b570              PUSH     {r4-r6,lr}
;;;518    {
;;;519    	uint32_t i;
;;;520    
;;;521        /* Clear the data IN/OUT ready flag of control end-points */
;;;522        USBD->CFG0 |= 0x8000;
000002  4b15              LDR      r3,|L8.88|
000004  6a99              LDR      r1,[r3,#0x28]
000006  2001              MOVS     r0,#1
000008  03c0              LSLS     r0,r0,#15
00000a  4301              ORRS     r1,r1,r0
00000c  6299              STR      r1,[r3,#0x28]
;;;523        USBD->CFG1 |= 0x8000;
00000e  6b99              LDR      r1,[r3,#0x38]
000010  4301              ORRS     r1,r1,r0
000012  6399              STR      r1,[r3,#0x38]
;;;524    	
;;;525    	/* Copy Setup Packet */
;;;526    	for (i = 0; i < 8; i++)
;;;527    		gUsbCtrl.UsbSetupBuf[i] = *(uint8_t *)((uint32_t)USBD_SRAM_BASE + i);
000014  4911              LDR      r1,|L8.92|
000016  4a12              LDR      r2,|L8.96|
000018  2000              MOVS     r0,#0                 ;526
                  |L8.26|
00001a  1844              ADDS     r4,r0,r1
00001c  1815              ADDS     r5,r2,r0
00001e  7824              LDRB     r4,[r4,#0]
000020  1c40              ADDS     r0,r0,#1              ;526
000022  722c              STRB     r4,[r5,#8]
000024  2808              CMP      r0,#8                 ;526
000026  d3f8              BCC      |L8.26|
;;;528    
;;;529    	/* USB device request in setup packet: offset 0, D[6..5]: 0=Stardard, 1=Class, 2=Vendor, 3=Reserved */
;;;530    	switch (gUsbCtrl.UsbSetupBuf[0] & 0x60)
000028  7a10              LDRB     r0,[r2,#8]  ; gUsbCtrl
00002a  2160              MOVS     r1,#0x60
00002c  4008              ANDS     r0,r0,r1
00002e  d00c              BEQ      |L8.74|
000030  2820              CMP      r0,#0x20
000032  d00d              BEQ      |L8.80|
000034  2840              CMP      r0,#0x40
000036  d007              BEQ      |L8.72|
;;;531    	{
;;;532    		case REQ_STANDARD:
;;;533    			USB_StandardRequest();
;;;534    			break;
;;;535    
;;;536    		case REQ_CLASS:
;;;537    			USB_ClassRequest();
;;;538    			break;
;;;539    
;;;540    		case REQ_VENDOR:
;;;541    			USB_VendorRequest();
;;;542    			break;
;;;543    
;;;544    		default:
;;;545    		{
;;;546    		    /* Setup error, stall the device */
;;;547    			USBD->CFG0 |= (USB_CFG_SSTALL | 0x8000);
000038  6a99              LDR      r1,[r3,#0x28]
00003a  2041              MOVS     r0,#0x41
00003c  0240              LSLS     r0,r0,#9
00003e  4301              ORRS     r1,r1,r0
000040  6299              STR      r1,[r3,#0x28]
;;;548    			USBD->CFG1 |= (USB_CFG_SSTALL | 0x8000);
000042  6b99              LDR      r1,[r3,#0x38]
000044  4301              ORRS     r1,r1,r0
000046  6399              STR      r1,[r3,#0x38]
                  |L8.72|
;;;549    		}
;;;550    	}
;;;551    }
000048  bd70              POP      {r4-r6,pc}
                  |L8.74|
00004a  f7fffffe          BL       USB_StandardRequest
00004e  bd70              POP      {r4-r6,pc}
                  |L8.80|
000050  f7fffffe          BL       USB_ClassRequest
000054  bd70              POP      {r4-r6,pc}
;;;552    
                          ENDP

000056  0000              DCW      0x0000
                  |L8.88|
                          DCD      0x40060000
                  |L8.92|
                          DCD      0x40060100
                  |L8.96|
                          DCD      ||.bss||+0x6c

                          AREA ||i.USB_StandardRequest||, CODE, READONLY, ALIGN=2

                  USB_StandardRequest PROC
;;;322      */
;;;323    uint32_t USB_StandardRequest(void)
000000  b5f0              PUSH     {r4-r7,lr}
;;;324    {
;;;325    	uint8_t *ptr;
;;;326    
;;;327    	/* check if after DEFAULT state (RESET) */
;;;328    	if ((gUsbCtrl.CurrentState & USB_STATE_FLAG_DEFAULT) == 0x00)
000002  4a5f              LDR      r2,|L9.384|
000004  b085              SUB      sp,sp,#0x14           ;324
000006  7810              LDRB     r0,[r2,#0]  ; gUsbCtrl
000008  9004              STR      r0,[sp,#0x10]
00000a  06c0              LSLS     r0,r0,#27
00000c  d562              BPL      |L9.212|
;;;329    		return FALSE;
;;;330    
;;;331    	/* get control pipe SRAM buffer */
;;;332    	ptr = (uint8_t *)((uint32_t)USBD_SRAM_BASE + (uint32_t)USBD->BUFSEG0);
00000e  4e5d              LDR      r6,|L9.388|
000010  6a30              LDR      r0,[r6,#0x20]
000012  495d              LDR      r1,|L9.392|
;;;333    
;;;334    	/* parse the request in setup packet */	
;;;335        switch (gUsbCtrl.UsbSetupBuf[1])
;;;336    	{
;;;337    		case GET_DESCRIPTOR:
;;;338    		{
;;;339    			return USB_ProcessDescriptor(ptr, gCtrlMaxPacketSize);
;;;340    		}
;;;341    		case SET_ADDRESS:
;;;342    		{
;;;343    			/* Accept set address command only before USB configured */
;;;344    			if((gUsbCtrl.CurrentState & USB_STATE_FLAG_CONFIGURED) == 0)
;;;345    			{
;;;346    				/* Get the device address */
;;;347    				gUsbCtrl.DeviceAddress = gUsbCtrl.UsbSetupBuf[2];
;;;348    				USBD->CFG0 |= USB_CFG_DSQ_SYNC_DATA1;
;;;349    				USBD->MXPLD0 = 0;
;;;350    
;;;351    				gUsbCtrl.StateFlag = FLAG_SET_ADDRESS;
;;;352    				return TRUE;
;;;353    			}
;;;354    			return FALSE;
;;;355    		}
;;;356    		case SET_CONFIGURATION:
;;;357    		{
;;;358    			gUsbCtrl.ConfigState = gUsbCtrl.UsbSetupBuf[2];
;;;359                
;;;360    			USBD->CFG0 |= USB_CFG_DSQ_SYNC_DATA1;
;;;361    			USBD->MXPLD0 = 0;
;;;362    			gUsbCtrl.StateFlag = FLAG_SET_CONFIG;
;;;363    			USB_DeviceStart();
;;;364    			return TRUE;
;;;365    		}
;;;366    		case CLEAR_FEATURE:
;;;367    		case SET_FEATURE:
;;;368    		{
;;;369    			if (gUsbInfo.UsbDeviceClass & USB_CLASS_MASS_STORAGE)
000014  4614              MOV      r4,r2
000016  1840              ADDS     r0,r0,r1              ;332
000018  4613              MOV      r3,r2                 ;328
00001a  3c6c              SUBS     r4,r4,#0x6c
00001c  7a57              LDRB     r7,[r2,#9]            ;335  ; gUsbCtrl
00001e  7a99              LDRB     r1,[r3,#0xa]          ;347
000020  6824              LDR      r4,[r4,#0]
;;;370    			{
;;;371    				if (gUdcInfo.CBWInvalid)
;;;372    				{
;;;373    					USBD->CFG0 |= USB_CFG_DSQ_SYNC_DATA1;
;;;374    					USBD->MXPLD0 = 0;
;;;375    					return TRUE;
;;;376    				}
;;;377    			}
;;;378    
;;;379    			if((gUsbCtrl.UsbSetupBuf[0] == 2) && (gUsbCtrl.UsbSetupBuf[2] == FEATURE_ENDPOINT_HALT))
000022  9400              STR      r4,[sp,#0]
000024  7a1c              LDRB     r4,[r3,#8]
;;;380                {
;;;381    				uint32_t u32CfgAddr;
;;;382    				uint32_t u32Cfg;
;;;383    
;;;384    				u32CfgAddr = (uint32_t)((gUsbCtrl.UsbSetupBuf[4] & 0xF) << 4) + (uint32_t)0x40060028; /* USBD_CFG0 */
000026  9401              STR      r4,[sp,#4]
000028  7b1b              LDRB     r3,[r3,#0xc]
00002a  4d56              LDR      r5,|L9.388|
00002c  9303              STR      r3,[sp,#0xc]
00002e  071b              LSLS     r3,r3,#28
000030  3528              ADDS     r5,r5,#0x28
000032  0e1b              LSRS     r3,r3,#24
000034  195b              ADDS     r3,r3,r5
000036  9302              STR      r3,[sp,#8]            ;335
000038  2400              MOVS     r4,#0                 ;329
00003a  2580              MOVS     r5,#0x80              ;348
00003c  003b              MOVS     r3,r7                 ;335
00003e  f7fffffe          BL       __ARM_common_switch8
000042  0c42              DCB      0x0c,0x42
000044  22492249          DCB      0x22,0x49,0x22,0x49
000048  0d074940          DCB      0x0d,0x07,0x49,0x40
00004c  185c6b49          DCB      0x18,0x5c,0x6b,0x49
000050  494e              LDR      r1,|L9.396|
000052  6809              LDR      r1,[r1,#0]            ;339  ; gCtrlMaxPacketSize
000054  f7fffffe          BL       USB_ProcessDescriptor
                  |L9.88|
;;;385    
;;;386    				u32Cfg = *((__IO uint32_t *) (u32CfgAddr));
;;;387    
;;;388    				if(gUsbCtrl.UsbSetupBuf[1] == CLEAR_FEATURE)
;;;389    					u32Cfg &= ~USB_CFG_SSTALL;
;;;390    				else
;;;391    					u32Cfg |= USB_CFG_SSTALL;
;;;392    				*((__IO uint32_t *) (u32CfgAddr)) = u32Cfg;
;;;393    			}
;;;394    			else
;;;395    				return FALSE;
;;;396    				
;;;397    			USBD->CFG0 |= USB_CFG_DSQ_SYNC_DATA1;
;;;398    			USBD->MXPLD0 = 0;
;;;399    			return TRUE;
;;;400    		}
;;;401    		case GET_CONFIGURATION:
;;;402    		{
;;;403    			*ptr = gUsbCtrl.ConfigState;
;;;404                
;;;405    			USBD->CFG0 |= USB_CFG_DSQ_SYNC_DATA1;
;;;406    			USBD->MXPLD0 = 1;
;;;407    			gUsbCtrl.StateFlag = FLAG_OUT_ACK;
;;;408    			return TRUE;
;;;409    		}
;;;410    		case GET_STATUS:
;;;411    		{
;;;412                uint8_t u8Data;
;;;413    
;;;414                u8Data = gUsbCtrl.UsbSetupBuf[0];
;;;415    			// Device
;;;416    			if (u8Data == 0x80)
;;;417                	ptr[0] = 1;	// Self-Powered
;;;418    			
;;;419    			// Interface
;;;420    			else if (u8Data == 0x81)
;;;421                	ptr[0] = 0;
;;;422    			
;;;423    			// Endpoint
;;;424    			else if (u8Data == 0x82)
;;;425                {
;;;426    				uint32_t u32CfgAddr;
;;;427    				u32CfgAddr = (uint32_t)((gUsbCtrl.UsbSetupBuf[4] & 0xF) << 4) + (uint32_t)0x40060028; /* USBD_CFG0 */
;;;428    
;;;429    				ptr[0] = *((__IO uint32_t *) (u32CfgAddr)) & USB_CFG_SSTALL? 1: 0;
;;;430    			}
;;;431    			else
;;;432    				return FALSE;
;;;433       			
;;;434                ptr[1] = 0;
;;;435    
;;;436    			USBD->CFG0 |= USB_CFG_DSQ_SYNC_DATA1;
;;;437    			USBD->MXPLD0 = 2;
;;;438    			gUsbCtrl.StateFlag = FLAG_OUT_ACK;
;;;439    			return TRUE;
;;;440    		}
;;;441    		case GET_INTERFACE:
;;;442    		{
;;;443    			if (gUsbInfo.UsbDeviceClass & USB_CLASS_AUDIO)
;;;444    				ptr[0] = gUacInfo.AlternativeSetting;
;;;445    			else
;;;446    				ptr[0] = 0;
;;;447    
;;;448    			USBD->CFG0 |= USB_CFG_DSQ_SYNC_DATA1;
;;;449    			USBD->MXPLD0 = 1;
;;;450    			gUsbCtrl.StateFlag = FLAG_OUT_ACK;
;;;451    			return TRUE;
;;;452    		}
;;;453    		case SET_INTERFACE:
;;;454    		{
;;;455    			gUsbCtrl.StateFlag = FLAG_SET_INTERFACE;
;;;456    
;;;457    			if (gUsbInfo.UsbDeviceClass & USB_CLASS_AUDIO)
;;;458    			{
;;;459    				gUacInfo.AlternativeSetting = gUsbCtrl.UsbSetupBuf[2];
;;;460    
;;;461    				if (gUsbCtrl.UsbSetupBuf[4] == 1)
;;;462    				{ /* Audio Iso IN interface */
;;;463    					if (gUacInfo.AlternativeSetting == 1)
;;;464    					{
;;;465    						gUacInfo.AudioState = 1;	/* UAC_START_AUDIO_RECORD */
;;;466    						USBD->CFG2 |= USB_CFG_DSQ_SYNC_DATA1;
;;;467    						USBD->MXPLD2 = 0;
;;;468    						UAC_DeviceEnable(0);		/* UAC_MICROPHONE */
;;;469    					}
;;;470    					else if (gUacInfo.AlternativeSetting == 0)
;;;471    					{
;;;472    						UAC_DeviceDisable(0);		/* UAC_MICROPHONE */
;;;473    						USBD->CFG2 |= USB_CFG_DSQ_SYNC_DATA1;
;;;474    						USBD->MXPLD2 = 0;
;;;475    						gUacInfo.AudioState = 0;	/* UAC_STOP_AUDIO_RECORD */
;;;476    					}
;;;477    				}
;;;478    				else if (gUsbCtrl.UsbSetupBuf[4] == 2)
;;;479    				{ /* Audio Iso OUT interface */
;;;480    					if (gUacInfo.AlternativeSetting == 1)
;;;481    					{
;;;482    						USBD->MXPLD3 = gUsbInfo.EP[gUsbCtrl.UsbSetupBuf[4]-1].u32MaxPacketSize;
;;;483    						UAC_DeviceEnable(1);		/* UAC_SPEAKER */
;;;484    					}
;;;485    					else
;;;486    						UAC_DeviceDisable(1);		/* UAC_SPEAKER */
;;;487    				}
;;;488    			}
;;;489    
;;;490    			USBD->CFG0 |= USB_CFG_DSQ_SYNC_DATA1;
;;;491    			USBD->MXPLD0 = 0;
;;;492    			return TRUE;
;;;493    		}
;;;494    		default:
;;;495    			return FALSE;
;;;496    	}
;;;497    }
000058  b005              ADD      sp,sp,#0x14
00005a  bdf0              POP      {r4-r7,pc}
00005c  9804              LDR      r0,[sp,#0x10]         ;344
00005e  0640              LSLS     r0,r0,#25             ;344
000060  d438              BMI      |L9.212|
000062  7051              STRB     r1,[r2,#1]            ;347
000064  6ab0              LDR      r0,[r6,#0x28]         ;348
000066  4328              ORRS     r0,r0,r5              ;348
000068  62b0              STR      r0,[r6,#0x28]         ;348
00006a  6274              STR      r4,[r6,#0x24]         ;349
00006c  2002              MOVS     r0,#2                 ;351
                  |L9.110|
00006e  6050              STR      r0,[r2,#4]            ;351  ; gUsbCtrl
000070  e015              B        |L9.158|
000072  7091              STRB     r1,[r2,#2]            ;358
000074  6ab0              LDR      r0,[r6,#0x28]         ;360
000076  4328              ORRS     r0,r0,r5              ;360
000078  62b0              STR      r0,[r6,#0x28]         ;360
00007a  6274              STR      r4,[r6,#0x24]         ;361
00007c  2004              MOVS     r0,#4                 ;362
00007e  6050              STR      r0,[r2,#4]            ;363  ; gUsbCtrl
000080  f7fffffe          BL       USB_DeviceStart
000084  e00b              B        |L9.158|
000086  9800              LDR      r0,[sp,#0]            ;369
000088  06c0              LSLS     r0,r0,#27             ;369
00008a  d50a              BPL      |L9.162|
00008c  483f              LDR      r0,|L9.396|
00008e  3008              ADDS     r0,r0,#8              ;371
000090  7800              LDRB     r0,[r0,#0]            ;371  ; gUdcInfo
000092  2800              CMP      r0,#0                 ;371
000094  d005              BEQ      |L9.162|
                  |L9.150|
000096  6ab0              LDR      r0,[r6,#0x28]         ;373
000098  4328              ORRS     r0,r0,r5              ;373
00009a  62b0              STR      r0,[r6,#0x28]         ;373
00009c  6274              STR      r4,[r6,#0x24]         ;374
                  |L9.158|
00009e  2001              MOVS     r0,#1                 ;492
0000a0  e7da              B        |L9.88|
                  |L9.162|
0000a2  9801              LDR      r0,[sp,#4]            ;379
0000a4  2802              CMP      r0,#2                 ;379
0000a6  d115              BNE      |L9.212|
0000a8  2900              CMP      r1,#0                 ;379
0000aa  d113              BNE      |L9.212|
0000ac  9902              LDR      r1,[sp,#8]            ;386
0000ae  6808              LDR      r0,[r1,#0]            ;386
0000b0  2201              MOVS     r2,#1                 ;389
0000b2  0252              LSLS     r2,r2,#9              ;389
0000b4  2f01              CMP      r7,#1                 ;388
0000b6  d002              BEQ      |L9.190|
0000b8  4310              ORRS     r0,r0,r2              ;391
                  |L9.186|
0000ba  6008              STR      r0,[r1,#0]            ;392
0000bc  e7eb              B        |L9.150|
                  |L9.190|
0000be  4390              BICS     r0,r0,r2              ;389
0000c0  e7fb              B        |L9.186|
0000c2  7891              LDRB     r1,[r2,#2]            ;403  ; gUsbCtrl
0000c4  e01f              B        |L9.262|
0000c6  9901              LDR      r1,[sp,#4]            ;416
0000c8  2980              CMP      r1,#0x80              ;416
0000ca  d005              BEQ      |L9.216|
0000cc  2981              CMP      r1,#0x81              ;420
0000ce  d005              BEQ      |L9.220|
0000d0  2982              CMP      r1,#0x82              ;424
0000d2  d005              BEQ      |L9.224|
                  |L9.212|
0000d4  2000              MOVS     r0,#0                 ;495
0000d6  e7bf              B        |L9.88|
                  |L9.216|
0000d8  2101              MOVS     r1,#1                 ;417
0000da  e005              B        |L9.232|
                  |L9.220|
0000dc  7004              STRB     r4,[r0,#0]            ;421
0000de  e004              B        |L9.234|
                  |L9.224|
0000e0  9902              LDR      r1,[sp,#8]            ;429
0000e2  6809              LDR      r1,[r1,#0]            ;429
0000e4  0589              LSLS     r1,r1,#22             ;429
0000e6  0fc9              LSRS     r1,r1,#31             ;429
                  |L9.232|
0000e8  7001              STRB     r1,[r0,#0]            ;429
                  |L9.234|
0000ea  7044              STRB     r4,[r0,#1]            ;434
0000ec  6ab0              LDR      r0,[r6,#0x28]         ;436
0000ee  4328              ORRS     r0,r0,r5              ;436
0000f0  62b0              STR      r0,[r6,#0x28]         ;436
0000f2  2002              MOVS     r0,#2                 ;437
0000f4  6270              STR      r0,[r6,#0x24]         ;437
0000f6  2001              MOVS     r0,#1                 ;438
0000f8  e7b9              B        |L9.110|
0000fa  9900              LDR      r1,[sp,#0]            ;443
0000fc  0749              LSLS     r1,r1,#29             ;443
0000fe  d504              BPL      |L9.266|
000100  491f              LDR      r1,|L9.384|
000102  3118              ADDS     r1,r1,#0x18           ;444
000104  7849              LDRB     r1,[r1,#1]            ;444  ; gUacInfo
                  |L9.262|
000106  7001              STRB     r1,[r0,#0]            ;403
000108  e000              B        |L9.268|
                  |L9.266|
00010a  7004              STRB     r4,[r0,#0]            ;446
                  |L9.268|
00010c  6ab0              LDR      r0,[r6,#0x28]         ;448
00010e  4328              ORRS     r0,r0,r5              ;448
000110  62b0              STR      r0,[r6,#0x28]         ;448
000112  2001              MOVS     r0,#1                 ;449
000114  6270              STR      r0,[r6,#0x24]         ;449
000116  e7aa              B        |L9.110|
000118  2008              MOVS     r0,#8                 ;455
00011a  6050              STR      r0,[r2,#4]            ;457  ; gUsbCtrl
00011c  4818              LDR      r0,|L9.384|
00011e  9a00              LDR      r2,[sp,#0]            ;457
000120  386c              SUBS     r0,r0,#0x6c           ;457
000122  0752              LSLS     r2,r2,#29             ;457
000124  d5b7              BPL      |L9.150|
000126  4602              MOV      r2,r0                 ;459
000128  3284              ADDS     r2,r2,#0x84           ;459
00012a  7051              STRB     r1,[r2,#1]            ;459
00012c  4f15              LDR      r7,|L9.388|
00012e  9b03              LDR      r3,[sp,#0xc]          ;461
000130  3740              ADDS     r7,r7,#0x40           ;466
000132  2b01              CMP      r3,#1                 ;461
000134  d007              BEQ      |L9.326|
000136  2b02              CMP      r3,#2                 ;478
000138  d1ad              BNE      |L9.150|
00013a  2901              CMP      r1,#1                 ;480
00013c  d01a              BEQ      |L9.372|
00013e  2001              MOVS     r0,#1                 ;486
000140  f7fffffe          BL       UAC_DeviceDisable
000144  e7a7              B        |L9.150|
                  |L9.326|
000146  2901              CMP      r1,#1                 ;463
000148  d00c              BEQ      |L9.356|
00014a  2900              CMP      r1,#0                 ;470
00014c  d1a3              BNE      |L9.150|
00014e  2000              MOVS     r0,#0                 ;472
000150  f7fffffe          BL       UAC_DeviceDisable
000154  68b8              LDR      r0,[r7,#8]            ;473
000156  4328              ORRS     r0,r0,r5              ;473
000158  60b8              STR      r0,[r7,#8]            ;473
00015a  607c              STR      r4,[r7,#4]            ;474
00015c  4808              LDR      r0,|L9.384|
00015e  3018              ADDS     r0,r0,#0x18           ;475
000160  7004              STRB     r4,[r0,#0]            ;475
000162  e798              B        |L9.150|
                  |L9.356|
000164  2001              MOVS     r0,#1                 ;465
000166  7010              STRB     r0,[r2,#0]            ;465
000168  68b8              LDR      r0,[r7,#8]            ;466
00016a  4328              ORRS     r0,r0,r5              ;466
00016c  60b8              STR      r0,[r7,#8]            ;466
00016e  607c              STR      r4,[r7,#4]            ;467
000170  2000              MOVS     r0,#0                 ;468
000172  e002              B        |L9.378|
                  |L9.372|
000174  6a00              LDR      r0,[r0,#0x20]         ;482
000176  6178              STR      r0,[r7,#0x14]         ;482
000178  2001              MOVS     r0,#1                 ;483
                  |L9.378|
00017a  f7fffffe          BL       UAC_DeviceEnable
00017e  e78a              B        |L9.150|
;;;498    
                          ENDP

                  |L9.384|
                          DCD      ||.bss||+0x6c
                  |L9.388|
                          DCD      0x40060000
                  |L9.392|
                          DCD      0x40060100
                  |L9.396|
                          DCD      ||.data||

                          AREA ||i.USB_UsbEvent||, CODE, READONLY, ALIGN=2

                  USB_UsbEvent PROC
;;;234      */
;;;235    void USB_UsbEvent(uint32_t u32INTSTS)
000000  b570              PUSH     {r4-r6,lr}
;;;236    {
;;;237    	/* Just return if USB detached. */
;;;238    	if (gUsbCtrl.CurrentState == USB_STATE_DETACHED)
000002  4938              LDR      r1,|L10.228|
000004  7809              LDRB     r1,[r1,#0]  ; gUsbCtrl
000006  2900              CMP      r1,#0
000008  d006              BEQ      |L10.24|
;;;239    		return;
;;;240    
;;;241    	if (u32INTSTS & USB_INTSTS_SETUP)
;;;242    	{	
;;;243    	    /* Clear setup event */
;;;244    		USBD->INTSTS = USB_INTSTS_SETUP;
00000a  4c37              LDR      r4,|L10.232|
00000c  2800              CMP      r0,#0                 ;241
00000e  da04              BGE      |L10.26|
000010  03a0              LSLS     r0,r4,#14
000012  60e0              STR      r0,[r4,#0xc]
;;;245    		USB_ProcessSetup();
000014  f7fffffe          BL       USB_ProcessSetup
                  |L10.24|
;;;246    	}
;;;247    	else if(u32INTSTS & USB_INTSTS_EPEVT0)
;;;248    	{	
;;;249    	    /* Ctrl In */
;;;250    		USBD->INTSTS = USB_INTSTS_EPEVT0;
;;;251    		USB_CtrlInAck();
;;;252    	}
;;;253    	else if(u32INTSTS & USB_INTSTS_EPEVT1)
;;;254    	{	
;;;255    	    /* Ctrl Out */
;;;256    		USBD->INTSTS = USB_INTSTS_EPEVT1;
;;;257    		USB_CtrlOutAck();
;;;258    	}
;;;259    	else if(u32INTSTS & USB_INTSTS_EPEVT2)
;;;260    	{	
;;;261    		USBD->INTSTS = USB_INTSTS_EPEVT2;
;;;262    		if (gUsbInfo.UsbDeviceClass & USB_CLASS_MASS_STORAGE)
;;;263    			gUdcInfo.OutToggle = USBD->EPSTS;
;;;264    		USB_EpAck0();
;;;265    	}
;;;266    	else if(u32INTSTS & USB_INTSTS_EPEVT3)
;;;267    	{	
;;;268    		USBD->INTSTS = USB_INTSTS_EPEVT3;
;;;269    		if (gUsbInfo.UsbDeviceClass & USB_CLASS_MASS_STORAGE)
;;;270    		{
;;;271    			if (gUdcInfo.OutToggle == USBD->EPSTS & 0x00F00000)
;;;272    				USBD->MXPLD3 = gUsbInfo.EP[1].u32MaxPacketSize;
;;;273    			else
;;;274    			{
;;;275    				if (USB_EpAck1())
;;;276    					gUdcInfo.OutToggle = USBD->EPSTS & 0x00F00000;
;;;277    				else
;;;278    				{
;;;279    				    /* stall */
;;;280    					gUdcInfo.CBWInvalid = TRUE;
;;;281    				    USBD->CFG2 |= (USB_CFG_SSTALL | 0x8000);
;;;282    				    USBD->CFG3 |= (USB_CFG_SSTALL | 0x8000);
;;;283    				}
;;;284    			}
;;;285    		}
;;;286    		else
;;;287    			USB_EpAck1();
;;;288    	}
;;;289    	else if(u32INTSTS & USB_INTSTS_EPEVT4)
;;;290    	{
;;;291    		USBD->INTSTS = USB_INTSTS_EPEVT4;
;;;292    		USB_EpAck2();
;;;293    	}	
;;;294    	else if(u32INTSTS & USB_INTSTS_EPEVT5)
;;;295    	{
;;;296    		USBD->INTSTS = USB_INTSTS_EPEVT5;
;;;297    		USB_EpAck3();
;;;298    	}	
;;;299    	else if(u32INTSTS & USB_INTSTS_EPEVT6)
;;;300    	{
;;;301    		USBD->INTSTS = USB_INTSTS_EPEVT6;
;;;302    		USB_EpAck4();
;;;303    	}	
;;;304    	else if(u32INTSTS & USB_INTSTS_EPEVT7)
;;;305    	{
;;;306    		USBD->INTSTS = USB_INTSTS_EPEVT7;
;;;307    		USB_EpAck5();
;;;308    	}	
;;;309    	else
;;;310    	{	/* Unknow event */
;;;311    		USBD->INTSTS = USB_INTSTS_USB_STS;
;;;312    	}
;;;313    }
000018  bd70              POP      {r4-r6,pc}
                  |L10.26|
00001a  03c1              LSLS     r1,r0,#15             ;247
00001c  d505              BPL      |L10.42|
00001e  2001              MOVS     r0,#1                 ;250
000020  0400              LSLS     r0,r0,#16             ;250
000022  60e0              STR      r0,[r4,#0xc]          ;250
000024  f7fffffe          BL       USB_CtrlInAck
000028  bd70              POP      {r4-r6,pc}
                  |L10.42|
00002a  0381              LSLS     r1,r0,#14             ;253
00002c  d505              BPL      |L10.58|
00002e  2001              MOVS     r0,#1                 ;256
000030  0440              LSLS     r0,r0,#17             ;256
000032  60e0              STR      r0,[r4,#0xc]          ;256
000034  f7fffffe          BL       USB_CtrlOutAck
000038  bd70              POP      {r4-r6,pc}
                  |L10.58|
00003a  492c              LDR      r1,|L10.236|
00003c  4d2c              LDR      r5,|L10.240|
00003e  6809              LDR      r1,[r1,#0]            ;262
000040  0342              LSLS     r2,r0,#13             ;259
000042  d509              BPL      |L10.88|
000044  2001              MOVS     r0,#1                 ;261
000046  0480              LSLS     r0,r0,#18             ;261
000048  60e0              STR      r0,[r4,#0xc]          ;261
00004a  06c8              LSLS     r0,r1,#27             ;262
00004c  d501              BPL      |L10.82|
00004e  6960              LDR      r0,[r4,#0x14]         ;263
000050  6068              STR      r0,[r5,#4]            ;263  ; gUdcInfo
                  |L10.82|
000052  f7fffffe          BL       USB_EpAck0
000056  bd70              POP      {r4-r6,pc}
                  |L10.88|
000058  0302              LSLS     r2,r0,#12             ;266
00005a  d51f              BPL      |L10.156|
00005c  2001              MOVS     r0,#1                 ;268
00005e  04c0              LSLS     r0,r0,#19             ;268
000060  60e0              STR      r0,[r4,#0xc]          ;268
000062  06c8              LSLS     r0,r1,#27             ;269
000064  d517              BPL      |L10.150|
000066  6960              LDR      r0,[r4,#0x14]         ;271
000068  f7fffffe          BL       USB_EpAck1
00006c  2800              CMP      r0,#0                 ;275
00006e  d005              BEQ      |L10.124|
000070  6960              LDR      r0,[r4,#0x14]         ;276
000072  210f              MOVS     r1,#0xf               ;276
000074  0509              LSLS     r1,r1,#20             ;276
000076  4008              ANDS     r0,r0,r1              ;276
000078  6068              STR      r0,[r5,#4]            ;276  ; gUdcInfo
00007a  bd70              POP      {r4-r6,pc}
                  |L10.124|
00007c  2001              MOVS     r0,#1                 ;280
00007e  7028              STRB     r0,[r5,#0]            ;280
000080  4819              LDR      r0,|L10.232|
000082  3040              ADDS     r0,r0,#0x40           ;281
000084  6882              LDR      r2,[r0,#8]            ;281
000086  2141              MOVS     r1,#0x41              ;281
000088  0249              LSLS     r1,r1,#9              ;281
00008a  430a              ORRS     r2,r2,r1              ;281
00008c  6082              STR      r2,[r0,#8]            ;281
00008e  6982              LDR      r2,[r0,#0x18]         ;282
000090  430a              ORRS     r2,r2,r1              ;282
000092  6182              STR      r2,[r0,#0x18]         ;282
000094  bd70              POP      {r4-r6,pc}
                  |L10.150|
000096  f7fffffe          BL       USB_EpAck1
00009a  bd70              POP      {r4-r6,pc}
                  |L10.156|
00009c  02c1              LSLS     r1,r0,#11             ;289
00009e  d505              BPL      |L10.172|
0000a0  2001              MOVS     r0,#1                 ;291
0000a2  0500              LSLS     r0,r0,#20             ;291
0000a4  60e0              STR      r0,[r4,#0xc]          ;291
0000a6  f7fffffe          BL       USB_EpAck2
0000aa  bd70              POP      {r4-r6,pc}
                  |L10.172|
0000ac  0281              LSLS     r1,r0,#10             ;294
0000ae  d505              BPL      |L10.188|
0000b0  2001              MOVS     r0,#1                 ;296
0000b2  0540              LSLS     r0,r0,#21             ;296
0000b4  60e0              STR      r0,[r4,#0xc]          ;296
0000b6  f7fffffe          BL       USB_EpAck3
0000ba  bd70              POP      {r4-r6,pc}
                  |L10.188|
0000bc  0241              LSLS     r1,r0,#9              ;299
0000be  d505              BPL      |L10.204|
0000c0  2001              MOVS     r0,#1                 ;301
0000c2  0580              LSLS     r0,r0,#22             ;301
0000c4  60e0              STR      r0,[r4,#0xc]          ;301
0000c6  f7fffffe          BL       USB_EpAck4
0000ca  bd70              POP      {r4-r6,pc}
                  |L10.204|
0000cc  0200              LSLS     r0,r0,#8              ;304
0000ce  d505              BPL      |L10.220|
0000d0  2001              MOVS     r0,#1                 ;306
0000d2  05c0              LSLS     r0,r0,#23             ;306
0000d4  60e0              STR      r0,[r4,#0xc]          ;306
0000d6  f7fffffe          BL       USB_EpAck5
0000da  bd70              POP      {r4-r6,pc}
                  |L10.220|
0000dc  2002              MOVS     r0,#2                 ;311
0000de  60e0              STR      r0,[r4,#0xc]          ;311
0000e0  bd70              POP      {r4-r6,pc}
;;;314    
                          ENDP

0000e2  0000              DCW      0x0000
                  |L10.228|
                          DCD      ||.bss||+0x6c
                  |L10.232|
                          DCD      0x40060000
                  |L10.236|
                          DCD      ||.bss||
                  |L10.240|
                          DCD      ||.data||+0x8

                          AREA ||i.USB_VendorRequest||, CODE, READONLY, ALIGN=1

                  USB_VendorRequest PROC
;;;505      */
;;;506    uint32_t USB_VendorRequest(void)
000000  2000              MOVS     r0,#0
;;;507    {
;;;508    	return FALSE;
;;;509    }
000002  4770              BX       lr
;;;510    
                          ENDP


                          AREA ||i.my_memcpy||, CODE, READONLY, ALIGN=1

                  my_memcpy PROC
;;;37       */
;;;38     void my_memcpy(void *dest, void *src, int32_t size)
000000  b510              PUSH     {r4,lr}
;;;39     {
;;;40         int32_t i;
;;;41     
;;;42         for (i = 0; i < size; i++)
000002  2300              MOVS     r3,#0
000004  e002              B        |L12.12|
                  |L12.6|
;;;43            *((uint8_t *)dest + i) = *((uint8_t *)src + i);
000006  5ccc              LDRB     r4,[r1,r3]
000008  54c4              STRB     r4,[r0,r3]
00000a  1c5b              ADDS     r3,r3,#1              ;42
                  |L12.12|
00000c  4293              CMP      r3,r2                 ;42
00000e  dbfa              BLT      |L12.6|
;;;44     }
000010  bd10              POP      {r4,pc}
;;;45     
                          ENDP


                          AREA ||.bss||, DATA, NOINIT, ALIGN=2

                  gUsbInfo
                          %        108
                  gUsbCtrl
                          %        24
                  gUacInfo
                          %        22

                          AREA ||.data||, DATA, ALIGN=2

                  gCtrlMaxPacketSize
                          DCD      0x00000008
                  gCurrentSramBuffer
                          DCD      0x00000000
                  gUdcInfo
                          %        8
                  gCdcInfo
                          %        8

                          AREA ||i.__ARM_common_switch8||, COMGROUP=__ARM_common_switch8, CODE, READONLY, ALIGN=1

                  __ARM_common_switch8 PROC
000000  b430              PUSH     {r4,r5}
000002  4674              MOV      r4,lr
000004  1e64              SUBS     r4,r4,#1
000006  7825              LDRB     r5,[r4,#0]
000008  1c64              ADDS     r4,r4,#1
00000a  42ab              CMP      r3,r5
00000c  d200              BCS      |L81.16|
00000e  461d              MOV      r5,r3
                  |L81.16|
000010  5d63              LDRB     r3,[r4,r5]
000012  005b              LSLS     r3,r3,#1
000014  18e3              ADDS     r3,r4,r3
000016  bc30              POP      {r4,r5}
000018  4718              BX       r3
                          ENDP


;*** Start embedded assembler ***

#line 1 "..\\bsp\\Driver\\nano1xx_usb.c"
	AREA ||.rev16_text||, CODE, READONLY
	THUMB
	EXPORT |__asm___13_nano1xx_usb_c_6634fbec____REV16|
#line 115 "C:\\Keil\\ARM\\CMSIS\\Include\\core_cmInstr.h"
|__asm___13_nano1xx_usb_c_6634fbec____REV16| PROC
#line 116

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE, READONLY
	THUMB
	EXPORT |__asm___13_nano1xx_usb_c_6634fbec____REVSH|
#line 130
|__asm___13_nano1xx_usb_c_6634fbec____REVSH| PROC
#line 131

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***
