📄 usb_istr.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 + -