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

📄 usb_istr.s79

📁 用于监视I2C通信总线
💻 S79
字号:
//////////////////////////////////////////////////////////////////////////////
//                                                                           /
// IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION   10/Nov/2008  11:44:07 /
// Copyright 1999-2005 IAR Systems. All rights reserved.                     /
//                                                                           /
//    Cpu mode        =  thumb                                               /
//    Endian          =  little                                              /
//    Stack alignment =  4                                                   /
//    Source file     =  D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\sou /
//                       rce\usb_istr.c                                      /
//    Command line    =  D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\sou /
//                       rce\usb_istr.c -D VECT_TAB_FLASH -D                 /
//                       USE_STM3210E_EVAL -lA D:\资料\ST\ST\usb\USBLib\demo /
//                       s\Virtual_COM_Port\project\EWARMv4\STM3210E-EVAL\Li /
//                       st\ -o D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_P /
//                       ort\project\EWARMv4\STM3210E-EVAL\Obj\ -z9 --debug  /
//                       --cpu_mode thumb --endian little --cpu cortex-M3    /
//                       --stack_align 4 --require_prototypes --fpu None     /
//                       --dlib_config "C:\Program Files\IAR                 /
//                       Systems\Embedded Workbench 4.0                      /
//                       Evaluation\arm\LIB\dl7mptnnl8f.h" -I                /
//                       D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\pro /
//                       ject\EWARMv4\..\..\include\ -I                      /
//                       D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\pro /
//                       ject\EWARMv4\..\..\..\..\library\inc\ -I            /
//                       D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\pro /
//                       ject\EWARMv4\..\..\..\..\..\FWLib\library\inc\ -I   /
//                       "C:\Program Files\IAR Systems\Embedded Workbench    /
//                       4.0 Evaluation\arm\INC\" --inline_threshold=2       /
//    List file       =  D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\pro /
//                       ject\EWARMv4\STM3210E-EVAL\List\usb_istr.s79        /
//                                                                           /
//                                                                           /
//////////////////////////////////////////////////////////////////////////////

        NAME usb_istr

        RTMODEL "StackAlign4", "USED"
        RTMODEL "__cpu_mode", "__pcs__thumb"
        RTMODEL "__data_model", "absolute"
        RTMODEL "__endian", "little"
        RTMODEL "__rt_version", "6"

        RSEG CSTACK:DATA:NOROOT(2)

        PUBWEAK `?*?DATA_ID`
        MULTWEAK ??CTR_LP??rT
        PUBWEAK ?init?tab?DATA_I
        PUBWEAK ?init?tab?DATA_Z
        PUBLIC USB_Istr
        FUNCTION USB_Istr,0203H
        LOCFRAME CSTACK, 16, STACK
        PUBLIC bIntPackSOF
        PUBLIC pEpInt_IN
        PUBLIC pEpInt_OUT
        PUBLIC wIstr
        
        CFI Names cfiNames0
        CFI StackFrame CFA R13 HUGEDATA
        CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
        CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, R13:32, R14:32
        CFI VirtualResource ?RET:32
        CFI EndNames cfiNames0
        
        CFI Common cfiCommon0 Using cfiNames0
        CFI CodeAlign 2
        CFI DataAlign 4
        CFI ReturnAddress ?RET CODE
        CFI CFA R13+0
        CFI R0 Undefined
        CFI R1 Undefined
        CFI R2 Undefined
        CFI R3 Undefined
        CFI R4 SameValue
        CFI R5 SameValue
        CFI R6 SameValue
        CFI R7 SameValue
        CFI R8 SameValue
        CFI R9 SameValue
        CFI R10 SameValue
        CFI R11 SameValue
        CFI R12 Undefined
        CFI R14 Undefined
        CFI ?RET R14
        CFI EndCommon cfiCommon0
        
CTR_LP              SYMBOL "CTR_LP"
??CTR_LP??rT        SYMBOL "??rT", CTR_LP

        EXTERN CTR_LP
        FUNCTION CTR_LP,0202H
        EXTERN Device_Property
        EXTERN EP1_IN_Callback
        FUNCTION EP1_IN_Callback,0602H
        EXTERN EP3_OUT_Callback
        FUNCTION EP3_OUT_Callback,0602H
        EXTERN NOP_Process
        FUNCTION NOP_Process,0602H
        EXTERN wInterrupt_Mask

// D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\source\usb_istr.c
//    1 /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
//    2 * File Name          : usb_istr.c
//    3 * Author             : MCD Application Team
//    4 * Version            : V2.2.0
//    5 * Date               : 06/13/2008
//    6 * Description        : ISTR events interrupt service routines
//    7 ********************************************************************************
//    8 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
//    9 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
//   10 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
//   11 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
//   12 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
//   13 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
//   14 *******************************************************************************/
//   15 
//   16 /* Includes ------------------------------------------------------------------*/
//   17 #include "usb_lib.h"
//   18 #include "usb_prop.h"
//   19 #include "usb_pwr.h"
//   20 #include "usb_istr.h"
//   21 
//   22 /* Private typedef -----------------------------------------------------------*/
//   23 /* Private define ------------------------------------------------------------*/
//   24 /* Private macro -------------------------------------------------------------*/
//   25 /* Private variables ---------------------------------------------------------*/

        RSEG DATA_Z:DATA:SORT:NOROOT(1)
//   26 volatile u16 wIstr;  /* ISTR register last read value */
//   27 volatile u8 bIntPackSOF = 0;  /* SOFs received between 2 consecutive packets */
bIntPackSOF:
        DS8 1
        DS8 1
wIstr:
        DS8 2
//   28 
//   29 /* Extern variables ----------------------------------------------------------*/
//   30 /* Private function prototypes -----------------------------------------------*/
//   31 /* Private functions ---------------------------------------------------------*/
//   32 /* function pointers to non-control endpoints service routines */

        RSEG DATA_I:DATA:SORT:NOROOT(2)
//   33 void (*pEpInt_IN[7])(void) =
pEpInt_IN:
        DS8 28
        REQUIRE `?<Initializer for pEpInt_IN>`
//   34   {
//   35     EP1_IN_Callback,
//   36     EP2_IN_Callback,
//   37     EP3_IN_Callback,
//   38     EP4_IN_Callback,
//   39     EP5_IN_Callback,
//   40     EP6_IN_Callback,
//   41     EP7_IN_Callback,
//   42   };
//   43 

        RSEG DATA_I:DATA:SORT:NOROOT(2)
//   44 void (*pEpInt_OUT[7])(void) =
pEpInt_OUT:
        DS8 28
        REQUIRE `?<Initializer for pEpInt_OUT>`
//   45   {
//   46     EP1_OUT_Callback,
//   47     EP2_OUT_Callback,
//   48     EP3_OUT_Callback,
//   49     EP4_OUT_Callback,
//   50     EP5_OUT_Callback,
//   51     EP6_OUT_Callback,
//   52     EP7_OUT_Callback,
//   53   };
//   54 
//   55 
//   56 /*******************************************************************************
//   57 * Function Name  : USB_Istr.
//   58 * Description    : ISTR events interrupt service routine.
//   59 * Input          : None.
//   60 * Output         : None.
//   61 * Return         : None.
//   62 *******************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function USB_Istr
        THUMB
//   63 void USB_Istr(void)
//   64 {
USB_Istr:
        PUSH     {R4-R6,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R6 Frame(CFA, -8)
        CFI R5 Frame(CFA, -12)
        CFI R4 Frame(CFA, -16)
        CFI CFA R13+16
//   65 
//   66   wIstr = _GetISTR();
        LDR.N    R5,??USB_Istr_0  ;; 0x40005c44
        LDR.N    R4,??USB_Istr_0+0x4  ;; bIntPackSOF
//   67 
//   68 #if (IMR_MSK & ISTR_RESET)
//   69   if (wIstr & ISTR_RESET & wInterrupt_Mask)
        LDR.N    R6,??USB_Istr_0+0x8  ;; wInterrupt_Mask
        LDR      R0,[R5, #+0]
        STRH     R0,[R4, #+2]
        LDRH     R0,[R4, #+2]
        LDRH     R1,[R6, #+0]
        ANDS     R1,R1,R0
        LSLS     R0,R1,#+21
        BPL.N    ??USB_Istr_1
//   70   {
//   71     _SetISTR((u16)CLR_RESET);
        LDR.N    R0,??USB_Istr_0+0xC  ;; 0xfbff
        STR      R0,[R5, #+0]
//   72     Device_Property.Reset();
        LDR.N    R0,??USB_Istr_0+0x10  ;; Device_Property + 4
        LDR      R0,[R0, #+0]
        BLX      R0
//   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)
//   91   {
//   92     _SetISTR((u16)CLR_ERR);
//   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)
//  101   {
//  102     _SetISTR((u16)CLR_WKUP);
//  103     Resume(RESUME_EXTERNAL);
//  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)
//  112   {
//  113 
//  114     /* check if SUSPEND is possible */
//  115     if (fSuspendEnabled)
//  116     {
//  117       Suspend();
//  118     }
//  119     else
//  120     {
//  121       /* if not possible then resume after xx ms */
//  122       Resume(RESUME_LATER);
//  123     }
//  124     /* clear of the ISTR bit must be done after setting of CNTR_FSUSP */
//  125     _SetISTR((u16)CLR_SUSP);
//  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)
??USB_Istr_1:
        LDRH     R0,[R6, #+0]
        LDRH     R1,[R4, #+2]
        ANDS     R1,R1,R0
        LSLS     R1,R1,#+22
        BPL.N    ??USB_Istr_2
//  134   {
//  135     _SetISTR((u16)CLR_SOF);
        LDR.N    R1,??USB_Istr_0+0x14  ;; 0xfdff
        STR      R1,[R5, #+0]
//  136     bIntPackSOF++;
        LDRB     R1,[R4, #+0]
        ADDS     R1,R1,#+1
        STRB     R1,[R4, #+0]
//  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)
//  146   {
//  147     _SetISTR((u16)CLR_ESOF);
//  148     /* resume handling timing is made with ESOFs */
//  149     Resume(RESUME_ESOF); /* request without change of the machine state */
//  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)
??USB_Istr_2:
        LDRH     R1,[R4, #+2]
        ANDS     R0,R0,R1
        LSLS     R0,R0,#+16
        IT      MI 
//  159   {
//  160     /* servicing of the endpoint correct transfer interrupt */
//  161     /* clear of the CTR flag into the sub */
//  162     CTR_LP();
        _BLFMI   CTR_LP,??CTR_LP??rT
//  163 #ifdef CTR_CALLBACK
//  164     CTR_Callback();
//  165 #endif
//  166   }
//  167 #endif
//  168 } /* USB_Istr */
        POP      {R4-R6,PC}       ;; return
        Nop      
        DATA
??USB_Istr_0:
        DC32     0x40005c44
        DC32     bIntPackSOF
        DC32     wInterrupt_Mask
        DC32     0xfbff
        DC32     Device_Property + 4
        DC32     0xfdff
        CFI EndBlock cfiBlock0

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon0
        CFI NoFunction
        THUMB
??CTR_LP??rT:
        LDR.N    R3,??Subroutine0_0  ;; CTR_LP
        BX       R3
        DATA
??Subroutine0_0:
        DC32     CTR_LP
        CFI EndBlock cfiBlock1

        RSEG DATA_ID:CONST:SORT:NOROOT(2)
`?<Initializer for pEpInt_IN>`:
        DATA
        DC32 EP1_IN_Callback, NOP_Process, NOP_Process, NOP_Process
        DC32 NOP_Process, NOP_Process, NOP_Process

        RSEG DATA_ID:CONST:SORT:NOROOT(2)
`?<Initializer for pEpInt_OUT>`:
        DATA
        DC32 NOP_Process, NOP_Process, EP3_OUT_Callback, NOP_Process
        DC32 NOP_Process, NOP_Process, NOP_Process

        RSEG DATA_ID:CONST:SORT:NOROOT(2)
`?*?DATA_ID`:

        RSEG INITTAB:CODE:ROOT(2)
        DATA
?init?tab?DATA_I:
        DCD      sfe(DATA_I) - sfb(DATA_I), sfb(DATA_I), sfb(DATA_ID)

        RSEG INITTAB:CODE:ROOT(2)
        DATA
?init?tab?DATA_Z:
        DCD      sfe(DATA_Z) - sfb(DATA_Z), sfb(DATA_Z), sfb(DATA_Z)

        END
//  169 
//  170 /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
// 
// 100 bytes in segment CODE
//  56 bytes in segment DATA_I
//  56 bytes in segment DATA_ID
//   4 bytes in segment DATA_Z
//  24 bytes in segment INITTAB
// 
// 92 bytes of CODE  memory (+ 32 bytes shared)
// 56 bytes of CONST memory
// 60 bytes of DATA  memory
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

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