; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\usb_istr.o --depend=.\Obj\usb_istr.d --device=DARMSTM --apcs=interwork -O3 -I.\usb_library\inc -Id:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DVECT_TAB_FLASH --omf_browse=.\Obj\usb_istr.crf usb_istr.c]
                          THUMB

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

                  USB_Istr PROC
;;;62     *******************************************************************************/
;;;63     void USB_Istr(void)
000000  b570              PUSH     {r4-r6,lr}
;;;64     {
;;;65     
;;;66       wIstr = _GetISTR();
000002  4c2c              LDR      r4,|L1.180|
000004  f8d40c44          LDR      r0,[r4,#0xc44]
000008  4d2b              LDR      r5,|L1.184|
00000a  8068              STRH     r0,[r5,#2]
;;;67     
;;;68     #if (IMR_MSK & ISTR_RESET)
;;;69       if (wIstr & ISTR_RESET & wInterrupt_Mask)
00000c  8868              LDRH     r0,[r5,#2]  ; wIstr
00000e  4e2b              LDR      r6,|L1.188|
000010  8831              LDRH     r1,[r6,#0]  ; wInterrupt_Mask
000012  4008              ANDS     r0,r0,r1
000014  0540              LSLS     r0,r0,#21
000016  d506              BPL      |L1.38|
;;;70       {
;;;71         _SetISTR((u16)CLR_RESET);
000018  f64f30ff          MOV      r0,#0xfbff
00001c  f8c40c44          STR      r0,[r4,#0xc44]
;;;72         Device_Property.Reset();
000020  4827              LDR      r0,|L1.192|
000022  6840              LDR      r0,[r0,#4]  ; Device_Property
000024  4780              BLX      r0
                  |L1.38|
;;;73     #ifdef RESET_CALLBACK
;;;74         RESET_Callback();
;;;75     #endif
;;;76       }
;;;77     #endif
;;;78       /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
;;;79     #if (IMR_MSK & ISTR_DOVR)
;;;80       if (wIstr & ISTR_DOVR & wInterrupt_Mask)
;;;81       {
;;;82         _SetISTR((u16)CLR_DOVR);
;;;83     #ifdef DOVR_CALLBACK
;;;84         DOVR_Callback();
;;;85     #endif
;;;86       }
;;;87     #endif
;;;88       /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
;;;89     #if (IMR_MSK & ISTR_ERR)
;;;90       if (wIstr & ISTR_ERR & wInterrupt_Mask)
000026  8869              LDRH     r1,[r5,#2]  ; wIstr
000028  8830              LDRH     r0,[r6,#0]  ; wInterrupt_Mask
00002a  4001              ANDS     r1,r1,r0
00002c  0489              LSLS     r1,r1,#18
00002e  d503              BPL      |L1.56|
;;;91       {
;;;92         _SetISTR((u16)CLR_ERR);
000030  f64d71ff          MOV      r1,#0xdfff
000034  f8c41c44          STR      r1,[r4,#0xc44]
                  |L1.56|
;;;93     #ifdef ERR_CALLBACK
;;;94         ERR_Callback();
;;;95     #endif
;;;96       }
;;;97     #endif
;;;98       /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
;;;99     #if (IMR_MSK & ISTR_WKUP)
;;;100      if (wIstr & ISTR_WKUP & wInterrupt_Mask)
000038  8869              LDRH     r1,[r5,#2]  ; wIstr
00003a  4001              ANDS     r1,r1,r0
00003c  04c8              LSLS     r0,r1,#19
00003e  d506              BPL      |L1.78|
;;;101      {
;;;102        _SetISTR((u16)CLR_WKUP);
000040  f64e70ff          MOV      r0,#0xefff
000044  f8c40c44          STR      r0,[r4,#0xc44]
;;;103        Resume(RESUME_EXTERNAL);
000048  2000              MOVS     r0,#0
00004a  f7fffffe          BL       Resume
                  |L1.78|
;;;104    #ifdef WKUP_CALLBACK
;;;105        WKUP_Callback();
;;;106    #endif
;;;107      }
;;;108    #endif
;;;109      /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
;;;110    #if (IMR_MSK & ISTR_SUSP)
;;;111      if (wIstr & ISTR_SUSP & wInterrupt_Mask)
00004e  8868              LDRH     r0,[r5,#2]  ; wIstr
000050  8831              LDRH     r1,[r6,#0]  ; wInterrupt_Mask
000052  4008              ANDS     r0,r0,r1
000054  0500              LSLS     r0,r0,#20
000056  d50c              BPL      |L1.114|
;;;112      {
;;;113    
;;;114        /* check if SUSPEND is possible */
;;;115        if (fSuspendEnabled)
000058  481a              LDR      r0,|L1.196|
00005a  7800              LDRB     r0,[r0,#0]  ; fSuspendEnabled
00005c  b110              CBZ      r0,|L1.100|
;;;116        {
;;;117          Suspend();
00005e  f7fffffe          BL       Suspend
000062  e002              B        |L1.106|
                  |L1.100|
;;;118        }
;;;119        else
;;;120        {
;;;121          /* if not possible then resume after xx ms */
;;;122          Resume(RESUME_LATER);
000064  2002              MOVS     r0,#2
000066  f7fffffe          BL       Resume
                  |L1.106|
;;;123        }
;;;124        /* clear of the ISTR bit must be done after setting of CNTR_FSUSP */
;;;125        _SetISTR((u16)CLR_SUSP);
00006a  f24f70ff          MOV      r0,#0xf7ff
00006e  f8c40c44          STR      r0,[r4,#0xc44]
                  |L1.114|
;;;126    #ifdef SUSP_CALLBACK
;;;127        SUSP_Callback();
;;;128    #endif
;;;129      }
;;;130    #endif
;;;131      /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
;;;132    #if (IMR_MSK & ISTR_SOF)
;;;133      if (wIstr & ISTR_SOF & wInterrupt_Mask)
000072  8869              LDRH     r1,[r5,#2]  ; wIstr
000074  8830              LDRH     r0,[r6,#0]  ; wInterrupt_Mask
000076  4001              ANDS     r1,r1,r0
000078  0589              LSLS     r1,r1,#22
00007a  d506              BPL      |L1.138|
;;;134      {
;;;135        _SetISTR((u16)CLR_SOF);
00007c  f64f51ff          MOV      r1,#0xfdff
000080  f8c41c44          STR      r1,[r4,#0xc44]
;;;136        bIntPackSOF++;
000084  7829              LDRB     r1,[r5,#0]  ; bIntPackSOF
000086  1c49              ADDS     r1,r1,#1
000088  7029              STRB     r1,[r5,#0]
                  |L1.138|
;;;137    
;;;138    #ifdef SOF_CALLBACK
;;;139        SOF_Callback();
;;;140    #endif
;;;141      }
;;;142    #endif
;;;143      /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
;;;144    #if (IMR_MSK & ISTR_ESOF)
;;;145      if (wIstr & ISTR_ESOF & wInterrupt_Mask)
00008a  8869              LDRH     r1,[r5,#2]  ; wIstr
00008c  4001              ANDS     r1,r1,r0
00008e  05c8              LSLS     r0,r1,#23
000090  d506              BPL      |L1.160|
;;;146      {
;;;147        _SetISTR((u16)CLR_ESOF);
000092  f64f60ff          MOV      r0,#0xfeff
000096  f8c40c44          STR      r0,[r4,#0xc44]
;;;148        /* resume handling timing is made with ESOFs */
;;;149        Resume(RESUME_ESOF); /* request without change of the machine state */
00009a  2007              MOVS     r0,#7
00009c  f7fffffe          BL       Resume
                  |L1.160|
;;;150    
;;;151    #ifdef ESOF_CALLBACK
;;;152        ESOF_Callback();
;;;153    #endif
;;;154      }
;;;155    #endif
;;;156      /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
;;;157    #if (IMR_MSK & ISTR_CTR)
;;;158      if (wIstr & ISTR_CTR & wInterrupt_Mask)
0000a0  8868              LDRH     r0,[r5,#2]  ; wIstr
0000a2  8831              LDRH     r1,[r6,#0]  ; wInterrupt_Mask
0000a4  4008              ANDS     r0,r0,r1
0000a6  0400              LSLS     r0,r0,#16
0000a8  d503              BPL      |L1.178|
;;;159      {
;;;160        /* servicing of the endpoint correct transfer interrupt */
;;;161        /* clear of the CTR flag into the sub */
;;;162        CTR_LP();
0000aa  e8bd4070          POP      {r4-r6,lr}
0000ae  f7ffbffe          B.W      CTR_LP
                  |L1.178|
;;;163    #ifdef CTR_CALLBACK
;;;164        CTR_Callback();
;;;165    #endif
;;;166      }
;;;167    #endif
;;;168    } /* USB_Istr */
0000b2  bd70              POP      {r4-r6,pc}
;;;169    
                          ENDP

                  |L1.180|
                          DCD      0x40005000
                  |L1.184|
                          DCD      ||.data||
                  |L1.188|
                          DCD      wInterrupt_Mask
                  |L1.192|
                          DCD      Device_Property
                  |L1.196|
                          DCD      fSuspendEnabled

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

                  bIntPackSOF
000000  0000              DCB      0x00,0x00
                  wIstr
000002  0000              DCB      0x00,0x00

                          AREA ||area_number.5||, DATA, ALIGN=2

                          EXPORTAS ||area_number.5||, ||.data||
                  pEpInt_IN
                          DCD      NOP_Process
                          DCD      NOP_Process
                          DCD      NOP_Process
                          DCD      NOP_Process
                          DCD      NOP_Process
                          DCD      NOP_Process
                          DCD      NOP_Process

                          AREA ||area_number.6||, DATA, ALIGN=2

                          EXPORTAS ||area_number.6||, ||.data||
                  pEpInt_OUT
                          DCD      NOP_Process
                          DCD      NOP_Process
                          DCD      NOP_Process
                          DCD      NOP_Process
                          DCD      NOP_Process
                          DCD      NOP_Process
                          DCD      NOP_Process
