📄 fw_epmg.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.31A/W32 EVALUATION 29/Nov/2007 16:53:58 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = interwork #
# Endian = little #
# Stack alignment = 4 #
# Source file = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\MASSSTORAGE\fw_epm #
# g.c #
# Command line = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\MASSSTORAGE\fw_epm #
# g.c -D AT91SAM7X256 -D PULL_UP_USB -D USE_LED -lC #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\Binary\List\" -o #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\Binary\Obj\" -z9 --debug --cpu_mode #
# thumb --endian little --cpu ARM7TDMI --stack_align #
# 4 --interwork -e --fpu None --dlib_config #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.0 Evaluation\ARM\LIB\dl4tptinl8f.h" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\srcIAR\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\src\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\FILESYSTEM\inc\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\MASSSTORAGE\inc\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\AT91SAM7X256\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\inc\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\mmc_sd\" -I #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\..\..\COMMON_FS_MS\" -I "C:\Program #
# Files\IAR Systems\Embedded Workbench 4.0 #
# Evaluation\ARM\INC\" #
# List file = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\Binary\List\fw_epmg.lst #
# Object file = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\Binary\Obj\fw_epmg.r79 #
# #
# #
##############################################################################
G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\MASSSTORAGE\fw_epmg.c
1 // ----------------------------------------------------------------------------
2 // ATMEL Microcontroller Software Support - ROUSSET -
3 // ----------------------------------------------------------------------------
4 // DISCLAIMER: CONDITIONS AS PER SIGNED LIMITED LICENSE AGREEMENT (AT91
5 // SOFTWARE AND USER DOCUMENTATION)
6 // ALL SOFTWARE IS PROVIDED AS IS, WITH ALL FAULTS, AND WITH NO WARRANTY
7 // WHATSOEVER. ATMEL EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED,
8 // OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY WARRANTIES OF MERCHANTABILITY,
9 // FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.
10 // ----------------------------------------------------------------------------
11 // File Name : fw_epmg.c
12 // Object : EP management routines
13 // Creation : JCB 27/oct/2002
14 // Modif : JCB 18/feb/2005
15 // JCB 18/mar/2005 change the EP0 manage to suit
16 // with the first Get dev descript
17 // ----------------------------------------------------------------------------
18 #include "po_types.h"
19 #include "trace.h"
20 #include "fw_usb.h"
21 #include "po_kernel.h"
22 #include "ms_device.h"
23 #include "ms_rbc.h"
24
25 /*************************************************************************
26 USB protocol function pointer arrays
27 *************************************************************************/
28 /* Table 9-4. Standard Request Codes */
29 typedef void (*S_request) (void);
\ In segment DATA_C, align 4, align-sorted
30 const S_request StandardDeviceRequest[] =
\ StandardDeviceRequest:
\ 00000000 ............ DC32 fw_getStatus, fw_clearFeature, fw_reserved, fw_setFeature
\ ............
\ ........
\ 00000010 ............ DC32 fw_reserved, fw_setAddress, fw_getDescriptor, fw_reserved
\ ............
\ ........
\ 00000020 ............ DC32 fw_getConfiguration, fw_setConfiguration, fw_getInterface
\ ............
\ 0000002C ............ DC32 fw_setInterface, fw_reserved
\ ....
31 {
32 fw_getStatus, /* 0 */
33 fw_clearFeature, /* 1 */
34 fw_reserved, /* 2 */
35 fw_setFeature, /* 3 */
36 fw_reserved, /* 4 */
37 fw_setAddress, /* 5 */
38 fw_getDescriptor, /* 6 */
39 fw_reserved, /* 7 set_descriptor is not supported */
40 fw_getConfiguration, /* 8 */
41 fw_setConfiguration, /* 9 */
42 fw_getInterface, /* 10 */
43 fw_setInterface, /* 11 */
44 fw_reserved /* 12 synch_frame is not supported */
45 };
46
\ In segment DATA_Z, align 4, align-sorted
47 static UCHAR databuffer[2*FW_MAIN_EP_MAXPACKET_SIZE];
\ databuffer:
\ 00000000 DS8 128
\ In segment DATA_Z, align 4, align-sorted
48 UCHAR TxBuffer[FW_MAIN_EP_MAXPACKET_SIZE];
\ TxBuffer:
\ 00000000 DS8 64
49
50
51
52 /*****************************************************************
53 *
54 * ROUTINE fw_ep0RxDone
55 *
56 *-----------------------------------------------------------------
57 *
58 * Purpose :
59 * called when something is received on EP0
60 *
61 * Input parameters : NONE
62 *
63 * Output parameters : NONE
64 *
65 * Global data : fw_controlData : request to be processed
66 *
67 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
68 void fw_ep0RxDone(void)
69 {
\ fw_ep0RxDone:
\ 00000000 10B5 PUSH {R4,LR}
70 UCHAR _i = 0;
71
72 if(fw_IsSetupPacket(FW_EP_CTRL) != 0)
\ 00000002 .... LDR R4,??DataTable4 ;; fw_controlData
\ 00000004 0020 MOV R0,#+0
\ 00000006 ........ _BLF fw_IsSetupPacket,??fw_IsSetupPacket??rT
\ 0000000A 0028 CMP R0,#+0
\ 0000000C 22D0 BEQ ??fw_ep0RxDone_0
73 {
74 fw_controlData.wLength = 0;
\ 0000000E 0020 MOV R0,#+0
\ 00000010 A060 STR R0,[R4, #+8]
75 fw_controlData.wCount = 0;
76
77 _i = fw_readEndpoint(FW_EP_CTRL,(UCHAR *)(&(fw_controlData.DeviceRequest)));
\ 00000012 211C MOV R1,R4
\ 00000014 ........ _BLF fw_readEndpoint,??fw_readEndpoint??rT
\ 00000018 0006 LSL R0,R0,#+24
\ 0000001A 000E LSR R0,R0,#+24
78 /* if the data are not valid */
79 if(_i != sizeof(FW_DEVICE_REQUEST))
\ 0000001C 0828 CMP R0,#+8
\ 0000001E 02D0 BEQ ??fw_ep0RxDone_1
80 {
81 fw_stallEp0();
\ 00000020 ........ _BLF fw_stallEp0,??fw_stallEp0??rT
82 return;
\ 00000024 34E0 B ??fw_ep0RxDone_2
83 }
84
85 /* Acknowledge setup here to unlock in/out endp */
86 if(fw_controlData.DeviceRequest.bmRequestType & 0x80)
\ ??fw_ep0RxDone_1:
\ 00000026 2078 LDRB R0,[R4, #+0]
\ 00000028 0006 LSL R0,R0,#+24
\ 0000002A 01D5 BPL ??fw_ep0RxDone_3
87 {
88 fw_changedir(FW_DEVICE_TO_HOST);
\ 0000002C 0120 MOV R0,#+1
\ 0000002E 00E0 B ??fw_ep0RxDone_4
89 }
90 else
91 {
92 fw_changedir(FW_HOST_TO_DEVICE);
\ ??fw_ep0RxDone_3:
\ 00000030 0020 MOV R0,#+0
\ ??fw_ep0RxDone_4:
\ 00000032 ........ _BLF fw_changedir,??fw_changedir??rT
93 }
94
95 fw_acknowledgeSetup(FW_EP_CTRL);
\ 00000036 0020 MOV R0,#+0
\ 00000038 ........ _BLF fw_acknowledgeSetup,??fw_acknowledgeSetup??rT
96
97 fw_controlData.wLength = fw_controlData.DeviceRequest.wLength;
\ 0000003C E088 LDRH R0,[R4, #+6]
\ 0000003E 2081 STRH R0,[R4, #+8]
98 fw_controlData.wCount = 0;
\ 00000040 0020 MOV R0,#+0
\ 00000042 6081 STRH R0,[R4, #+10]
99 fw_controlData.state = FW_STATE_START;
\ 00000044 0120 MOV R0,#+1
\ 00000046 2073 STRB R0,[R4, #+12]
100 fw_deviceState |= FW_DS_SETUP;
\ 00000048 .... LDR R0,??DataTable8 ;; fw_deviceState
\ 0000004A 0178 LDRB R1,[R0, #+0]
\ 0000004C 0422 MOV R2,#+4
\ 0000004E 0A43 ORR R2,R1
\ 00000050 0270 STRB R2,[R0, #+0]
\ 00000052 1DE0 B ??fw_ep0RxDone_2
101
102 }
103 else
104 {
105 if(fw_controlData.state == FW_STATE_START)
\ ??fw_ep0RxDone_0:
\ 00000054 207B LDRB R0,[R4, #+12]
\ 00000056 0128 CMP R0,#+1
\ 00000058 18D1 BNE ??fw_ep0RxDone_5
106 {
107 _i = fw_readEndpoint(FW_EP_CTRL, fw_controlData.pData + fw_controlData.wCount);
\ 0000005A 6089 LDRH R0,[R4, #+10]
\ 0000005C 2169 LDR R1,[R4, #+16]
\ 0000005E 0918 ADD R1,R1,R0
\ 00000060 0020 MOV R0,#+0
\ 00000062 ........ _BLF fw_readEndpoint,??fw_readEndpoint??rT
\ 00000066 0006 LSL R0,R0,#+24
\ 00000068 000E LSR R0,R0,#+24
108
109 fw_controlData.wCount += _i;
\ 0000006A 6189 LDRH R1,[R4, #+10]
\ 0000006C 0918 ADD R1,R1,R0
\ 0000006E 6181 STRH R1,[R4, #+10]
110 if((_i != 0)
111 && ((_i != FW_EP0_MAXPACKET_SIZE) || (fw_controlData.wCount >= fw_controlData.wLength)))
\ 00000070 021C MOV R2,R0
\ 00000072 0DD0 BEQ ??fw_ep0RxDone_2
\ 00000074 0828 CMP R0,#+8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -