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

📄 usb_int.s79

📁 用于监视I2C通信总线
💻 S79
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////////
//                                                                           /
// 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\library\src\usb_int.c      /
//    Command line    =  D:\资料\ST\ST\usb\USBLib\library\src\usb_int.c -D   /
//                       VECT_TAB_FLASH -D USE_STM3210E_EVAL -lA             /
//                       D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\pro /
//                       ject\EWARMv4\STM3210E-EVAL\List\ -o                 /
//                       D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\pro /
//                       ject\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_int.s79         /
//                                                                           /
//                                                                           /
//////////////////////////////////////////////////////////////////////////////

        NAME usb_int

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

        RSEG CSTACK:DATA:NOROOT(2)

??DataTable0 EQU 0
??DataTable1 EQU 0
??DataTable2 EQU 0
??DataTable3 EQU 0
??DataTable4 EQU 0
??DataTable5 EQU 0
??DataTable6 EQU 0
??DataTable7 EQU 0
??DataTable8 EQU 0
        MULTWEAK ??In0_Process??rT
        MULTWEAK ??Out0_Process??rT
        MULTWEAK ??Setup0_Process??rT
        PUBWEAK ?init?tab?DATA_Z
        PUBLIC CTR_HP
        FUNCTION CTR_HP,0203H
        LOCFRAME CSTACK, 12, STACK
        PUBLIC CTR_LP
        FUNCTION CTR_LP,0203H
        LOCFRAME CSTACK, 36, STACK
        PUBLIC SaveRState
        PUBLIC SaveTState
        
        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
        
In0_Process         SYMBOL "In0_Process"
Out0_Process        SYMBOL "Out0_Process"
Setup0_Process      SYMBOL "Setup0_Process"
??In0_Process??rT   SYMBOL "??rT", In0_Process
??Out0_Process??rT  SYMBOL "??rT", Out0_Process
??Setup0_Process??rT SYMBOL "??rT", Setup0_Process

        EXTERN EPindex
        EXTERN In0_Process
        FUNCTION In0_Process,0202H
        EXTERN Out0_Process
        FUNCTION Out0_Process,0202H
        EXTERN Setup0_Process
        FUNCTION Setup0_Process,0202H
        EXTERN pEpInt_IN
        EXTERN pEpInt_OUT
        EXTERN wIstr

// D:\资料\ST\ST\usb\USBLib\library\src\usb_int.c
//    1 /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
//    2 * File Name          : usb_int.c
//    3 * Author             : MCD Application Team
//    4 * Version            : V2.2.0
//    5 * Date               : 06/13/2008
//    6 * Description        : Endpoint CTR (Low and High) interrupt's 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 
//   19 /* Private typedef -----------------------------------------------------------*/
//   20 /* Private define ------------------------------------------------------------*/
//   21 /* Private macro -------------------------------------------------------------*/
//   22 /* Private variables ---------------------------------------------------------*/

        RSEG DATA_Z:DATA:SORT:NOROOT(1)
//   23 u16 SaveRState;
SaveRState:
        DS8 2
//   24 u16 SaveTState;
SaveTState:
        DS8 2
//   25 
//   26 /* Extern variables ----------------------------------------------------------*/
//   27 extern void (*pEpInt_IN[7])(void);    /*  Handles IN  interrupts   */
//   28 extern void (*pEpInt_OUT[7])(void);   /*  Handles OUT interrupts   */
//   29 
//   30 /* Private function prototypes -----------------------------------------------*/
//   31 /* Private functions ---------------------------------------------------------*/
//   32 
//   33 /*******************************************************************************
//   34 * Function Name  : CTR_LP.
//   35 * Description    : Low priority Endpoint Correct Transfer interrupt's service
//   36 *                  routine.
//   37 * Input          : None.
//   38 * Output         : None.
//   39 * Return         : None.
//   40 *******************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function CTR_LP
        THUMB
//   41 void CTR_LP(void)
//   42 {
//   43   u32 wEPVal = 0;
CTR_LP:
        LDR.N    R0,??DataTable9  ;; wIstr
        PUSH     {R4-R11,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R11 Frame(CFA, -8)
        CFI R10 Frame(CFA, -12)
        CFI R9 Frame(CFA, -16)
        CFI R8 Frame(CFA, -20)
        CFI R7 Frame(CFA, -24)
        CFI R6 Frame(CFA, -28)
        CFI R5 Frame(CFA, -32)
        CFI R4 Frame(CFA, -36)
        CFI CFA R13+36
        LDR.N    R5,??DataTable15  ;; 0x40005c00
        LDR.N    R6,??CTR_LP_0    ;; 0x8fbf
        MOV      R8,R0
        LDR.N    R0,??DataTable10  ;; 0x40005c44
        MOV      R9,R0
        B.N      ??CTR_LP_1
//   44   /* stay in loop while pending ints */
//   45   while (((wIstr = _GetISTR()) & ISTR_CTR) != 0)
//   46   {
//   47     _SetISTR((u16)CLR_CTR); /* clear CTR flag */
//   48     /* extract highest priority endpoint number */
//   49     EPindex = (u8)(wIstr & ISTR_EP_ID);
//   50     if (EPindex == 0)
//   51     {
//   52       /* Decode and service control endpoint interrupt */
//   53       /* calling related service routine */
//   54       /* (Setup0_Process, In0_Process, Out0_Process) */
//   55 
//   56       /* save RX & TX status */
//   57       /* and set both to NAK */
//   58       SaveRState = _GetEPRxStatus(ENDP0);
//   59       SaveTState = _GetEPTxStatus(ENDP0);
//   60       _SetEPRxStatus(ENDP0, EP_RX_NAK);
//   61       _SetEPTxStatus(ENDP0, EP_TX_NAK);
//   62 
//   63 
//   64       /* DIR bit = origin of the interrupt */
//   65 
//   66       if ((wIstr & ISTR_DIR) == 0)
//   67       {
//   68         /* DIR = 0 */
//   69 
//   70         /* DIR = 0      => IN  int */
//   71         /* DIR = 0 implies that (EP_CTR_TX = 1) always  */
//   72 
//   73 
//   74         _ClearEP_CTR_TX(ENDP0);
//   75         In0_Process();
//   76 
//   77            /* before terminate set Tx & Rx status */
//   78           _SetEPRxStatus(ENDP0, SaveRState);
//   79           _SetEPTxStatus(ENDP0, SaveTState);
//   80           return;
//   81       }
//   82       else
//   83       {
//   84         /* DIR = 1 */
//   85 
//   86         /* DIR = 1 & CTR_RX       => SETUP or OUT int */
//   87         /* DIR = 1 & (CTR_TX | CTR_RX) => 2 int pending */
//   88 
//   89         wEPVal = _GetENDPOINT(ENDP0);
//   90         if ((wEPVal & EP_CTR_TX) != 0)
//   91         {
//   92           _ClearEP_CTR_TX(ENDP0);
//   93           In0_Process();
//   94           /* before terminate set Tx & Rx status */
//   95           _SetEPRxStatus(ENDP0, SaveRState);
//   96           _SetEPTxStatus(ENDP0, SaveTState);
//   97           return;
//   98         }
//   99         else if ((wEPVal &EP_SETUP) != 0)
//  100         {
//  101           _ClearEP_CTR_RX(ENDP0); /* SETUP bit kept frozen while CTR_RX = 1 */
//  102           Setup0_Process();
//  103           /* before terminate set Tx & Rx status */
//  104           _SetEPRxStatus(ENDP0, SaveRState);
//  105           _SetEPTxStatus(ENDP0, SaveTState);
//  106           return;
//  107         }
//  108 
//  109         else if ((wEPVal & EP_CTR_RX) != 0)
//  110         {
//  111           _ClearEP_CTR_RX(ENDP0);
//  112           Out0_Process();
//  113           /* before terminate set Tx & Rx status */
//  114           _SetEPRxStatus(ENDP0, SaveRState);
//  115           _SetEPTxStatus(ENDP0, SaveTState);
//  116           return;
//  117         }
//  118       }
//  119     }/* if(EPindex == 0) */
//  120     else
//  121     {
//  122       /* Decode and service non control endpoints interrupt  */
//  123 
//  124       /* process related endpoint register */
//  125       wEPVal = _GetENDPOINT(EPindex);
??CTR_LP_2:
        ADDS     R2,R5,R1, LSL #+2
        LDR      R7,[R2, #+0]
        UXTH     R7,R7
//  126       if ((wEPVal & EP_CTR_RX) != 0)
        LSLS     R3,R7,#+16
        BPL.N    ??CTR_LP_3
//  127       {
//  128         /* clear int flag */
//  129         _ClearEP_CTR_RX(EPindex);
        LDR      R3,[R2, #+0]
        ANDS     R0,R0,R3
        STR      R0,[R2, #+0]
//  130 
//  131         /* call OUT service function */
//  132         (*pEpInt_OUT[EPindex-1])();
        LDR.N    R0,??DataTable12  ;; pEpInt_OUT
        ADDS     R0,R0,R1, LSL #+2
        SUBS     R0,R0,#+4
        LDR      R0,[R0, #+0]
        BLX      R0
//  133 
//  134       } /* if((wEPVal & EP_CTR_RX) */
//  135 
//  136       if ((wEPVal & EP_CTR_TX) != 0)
??CTR_LP_3:
        LSLS     R0,R7,#+24
        BPL.N    ??CTR_LP_1
        LDRB     R0,[R4, #+0]
        ADDS     R1,R5,R0, LSL #+2
        LDR      R2,[R1, #+0]
        ANDS     R2,R10,R2
        STR      R2,[R1, #+0]
//  137       {
//  138         /* clear int flag */
//  139         _ClearEP_CTR_TX(EPindex);
//  140 
//  141         /* call IN service function */
//  142         (*pEpInt_IN[EPindex-1])();
        LDR.N    R1,??DataTable17  ;; pEpInt_IN
        ADDS     R0,R1,R0, LSL #+2
        SUBS     R0,R0,#+4
        LDR      R0,[R0, #+0]
        BLX      R0
//  143       } /* if((wEPVal & EP_CTR_TX) != 0) */
//  144 
//  145     }/* if(EPindex == 0) else */
??CTR_LP_1:
        LDR      R0,[R9, #+0]
        STRH     R0,[R8, #+0]
        LSLS     R0,R0,#+16
        BPL.W    ??CTR_LP_4
        LDR.N    R0,??DataTable13  ;; 0x7fff
        LDR.N    R4,??DataTable14  ;; EPindex
        STR      R0,[R9, #+0]
        LDRH     R0,[R8, #+0]
        LSLS     R1,R0,#+28
        LDR.N    R0,??DataTable16  ;; 0x8f0f
        LSRS     R1,R1,#+28
        STRB     R1,[R4, #+0]
        MOV      R10,R0
        LDR.N    R0,??DataTable11  ;; 0xf8f
        CMP      R1,#+0
        BNE.N    ??CTR_LP_2
        LDR.N    R1,??CTR_LP_0+0x4  ;; SaveRState
        LDR.N    R4,??CTR_LP_0+0x8  ;; 0xbf8f
        MOV      R11,R1
        LDR      R1,[R5, #+0]
        ANDS     R1,R1,#0x3000
        STRH     R1,[R11, #+0]
        LDR      R1,[R5, #+0]
        ANDS     R1,R1,#0x30
        STRH     R1,[R11, #+2]
        LDR      R1,[R5, #+0]
        ANDS     R1,R1,R4

⌨️ 快捷键说明

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