📄 fw_task.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.31A/W32 EVALUATION 16/Nov/2007 09:02:45 #
# 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_tas #
# k.c #
# Command line = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\MASSSTORAGE\fw_tas #
# k.c -D AT91SAM7X256 -D PULL_UP_USB -D USE_LED -lC #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\RAM_Debug\List\" --remarks -o #
# "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\RAM_Debug\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\RAM_Debug\List\fw_task.lst #
# Object file = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\RAM_Debug\Obj\fw_task.r79 #
# #
# #
##############################################################################
G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\MASSSTORAGE\fw_task.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_task.c
12 // Object : initializations,firmware task and isr
13 // Creation : JCB 27/oct/2002
14 // Modif : JCB 18/feb/2005
15 // ----------------------------------------------------------------------------
16 #include "board.h"
17 #include "po_types.h"
18 #include "trace.h"
19 #include "fw_usb.h"
20 #include "po_kernel.h"
21 #include "ms_device.h"
22 #include "ms_rbc.h"
23 #include "dbgu.h"
24
25 extern void AT91F_ASM_UDP_Handler(void);
26
27 /*****************************************************************
28 *
29 * ROUTINE fw_init
30 *
31 *-----------------------------------------------------------------
32 *
33 * Purpose : Initialization of the registers
34 *
35 * Input parameters :
36 *
37 * Output parameters :
38 *
39 * Global data :
40 *
41 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
42 void fw_init( void )
43 {
44 fw_databk = 0;
\ fw_init:
\ 00000000 0C48 LDR R0,??fw_init_0 ;; fw_databk
\ 00000002 0021 MOV R1,#+0
\ 00000004 0160 STR R1,[R0, #+0]
45
46 #ifdef AT91SAM9265
47 // Enable USB
48 AT91F_UDPHS_EnableUSB( USBDEV_BASE_UDP );
49 #else
50 // Specific Chip USB Initialisation
51 // Enables the 48MHz USB clock UDPCK and System Peripheral USB Clock
52 AT91F_PMC_CfgSysClkEnableReg( AT91C_BASE_PMC, AT91C_PMC_UDP );
\ 00000006 0C48 LDR R0,??fw_init_0+0x4 ;; 0xfffffc00
\ 00000008 8021 MOV R1,#+128
\ 0000000A 0160 STR R1,[R0, #+0]
53
54 // Enables the corresponding peripheral clock.
55 AT91F_PMC_EnablePeriphClock( AT91C_BASE_PMC,(1 << AT91C_ID_UDP) );
\ 0000000C 0801 LSL R0,R1,#+4
\ 0000000E 0B49 LDR R1,??fw_init_0+0x8 ;; 0xfffffc10
\ 00000010 0860 STR R0,[R1, #+0]
56
57 #ifdef PULL_UP_USB
58 // Enable UDP Pull Up (USB_DP_PUP)
59 #ifdef AT91SAM7A3
60 #ifdef REV_A // old board
61 AT91F_PIO_SetOutput( AT91C_BASE_PIOB, AT91C_PIO_PB1 );
62 #else // new board
63 AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, AT91C_PIO_PB1 );
64 #endif
65 #else
66 AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, AT91C_PIO_PA16 );
\ 00000012 0B49 LDR R1,??fw_init_0+0xC ;; 0xfffff434
\ 00000014 4201 LSL R2,R0,#+5
\ 00000016 0A60 STR R2,[R1, #+0]
67 #endif
68 #endif
69 #endif
70
71 #ifndef AT91SAM9265
72 /* Acquire an interrupt vector and assign an ISR routine. */
73 AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_UDP, AT91C_AIC_PRIOR_MIDDLE, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, fw_isr );
\ 00000018 0A49 LDR R1,??fw_init_0+0x10 ;; 0xfffff0ac
\ 0000001A 0A68 LDR R2,[R1, #+0]
\ 0000001C 0A4A LDR R2,??fw_init_0+0x14 ;; 0xfffff124
\ 0000001E 1060 STR R0,[R2, #+0]
\ 00000020 0A4A LDR R2,??fw_init_0+0x18 ;; fw_isr
\ 00000022 0A60 STR R2,[R1, #+0]
\ 00000024 0A49 LDR R1,??fw_init_0+0x1C ;; 0xfffff02c
\ 00000026 0422 MOV R2,#+4
\ 00000028 0A60 STR R2,[R1, #+0]
\ 0000002A 0A49 LDR R1,??fw_init_0+0x20 ;; 0xfffff128
\ 0000002C 0860 STR R0,[R1, #+0]
74 // Enable corresponding IT number
75 AT91F_AIC_EnableIt( AT91C_BASE_AIC, AT91C_ID_UDP );
\ 0000002E 0A49 LDR R1,??fw_init_0+0x24 ;; 0xfffff120
\ 00000030 0860 STR R0,[R1, #+0]
76 #else
77 // Acquire an interrupt vector and assign an ISR routine
78 #ifdef ADS_COMPIL
79 AT91F_AIC_ConfigureIt( AT91C_BASE_AIC, AT91C_ID_UDPHS, AT91C_AIC_PRIOR_MIDDLE, AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, AT91F_ASM_UDP_Handler );
80 #else
81 AT91F_AIC_ConfigureIt( AT91C_BASE_AIC, AT91C_ID_UDPHS, AT91C_AIC_PRIOR_MIDDLE, AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, fw_isr );
82 #endif
83 // Enable corresponding IT number
84 AT91F_AIC_EnableIt( AT91C_BASE_AIC, AT91C_ID_UDPHS );
85 #endif
86
87 // On AT91SAM7Sxxx the "End Of Bus Reset" is NO-MASK. So we not need to enable it.
88 }
\ 00000032 7047 BX LR ;; return
\ ??fw_init_0:
\ 00000034 ........ DC32 fw_databk
\ 00000038 00FCFFFF DC32 0xfffffc00
\ 0000003C 10FCFFFF DC32 0xfffffc10
\ 00000040 34F4FFFF DC32 0xfffff434
\ 00000044 ACF0FFFF DC32 0xfffff0ac
\ 00000048 24F1FFFF DC32 0xfffff124
\ 0000004C ........ DC32 fw_isr
\ 00000050 2CF0FFFF DC32 0xfffff02c
\ 00000054 28F1FFFF DC32 0xfffff128
\ 00000058 20F1FFFF DC32 0xfffff120
89
90
91 /*****************************************************************
92 *
93 * ROUTINE : usb_task
94 *
95 *-----------------------------------------------------------------
96 *
97 * Purpose : Main loop of USB-MS.
98 * Not an API function but is provided for system whitout
99 * operating system.
100 * In this case, usbms_loop should be called in the main
101 * loop
102 *
103 * Input parameters : NONE
104 *
105 * Output parameters : NONE
106 *
107 * Global data :
108 *
109 *****************************************************************/
110 #ifdef ADS_COMPIL
111 void usb_task( void )
112 #else
\ In segment CODE_I, align 4, keep-with-next
113 void usb_task( void )
114 #endif
115 {
\ usb_task:
\ 00000000 10B5 PUSH {R4,LR}
116 /* Flags set by ISR: USB_EVENT, USB_RX, USB_TX */
117 if( 0 != USB_EVENT )
\ 00000002 .... LDR R0,??DataTable0 ;; USB_EVENT
\ 00000004 0178 LDRB R1,[R0, #+0]
\ 00000006 0029 CMP R1,#+0
\ 00000008 03D0 BEQ ??usb_task_0
118 {
119 TRACE_DEBUG_L( "USB_EVENT 0x%X\n\r", USB_EVENT);
120 ms_usbEvent( USB_EVENT );
\ 0000000A 0078 LDRB R0,[R0, #+0]
\ 0000000C ........ _BLF ms_usbEvent,??ms_usbEvent??rT?CODE_I
\ 00000010 12E0 B ??usb_task_1
121 }
122 else
123 {
124 if( 0 != USB_RX )
\ ??usb_task_0:
\ 00000012 0B48 LDR R0,??usb_task_2 ;; USB_RX
\ 00000014 0068 LDR R0,[R0, #+0]
\ 00000016 0028 CMP R0,#+0
\ 00000018 02D0 BEQ ??usb_task_3
125 {
126 TRACE_DEBUG_L( "ms_dataRec 0x%X\n\r", (int)USB_RX);
127 ms_dataReceived();
^
Warning[Ta023]: Call to a non __ramfunc function (ms_dataReceived) from within
a __ramfunc function
\ 0000001A ........ _BLF ms_dataReceived,??ms_dataReceived??rT?CODE_I
\ 0000001E 0BE0 B ??usb_task_1
128 /* USB_RX is updated when data is read */
129 }
130 else
131 {
132 if( 1 == USB_TX )
\ ??usb_task_3:
\ 00000020 084C LDR R4,??usb_task_2+0x4 ;; USB_TX
\ 00000022 2068 LDR R0,[R4, #+0]
\ 00000024 0128 CMP R0,#+1
\ 00000026 07D1 BNE ??usb_task_1
133 {
134 TRACE_DEBUG_L( "ms_sendComplete\n\r");
135 ms_sendComplete();
^
Warning[Ta023]: Call to a non __ramfunc function (ms_sendComplete) from within
a __ramfunc function
\ 00000028 ........ _BLF ms_sendComplete,??ms_sendComplete??rT?CODE_I
136 po_lock();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -