📄 bfsa_internal.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.31A/W32 EVALUATION 04/Dec/2007 10:02:55 #
# 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\FILESYSTEM\bfsa_in #
# ternal.c #
# Command line = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\FILESYSTEM\bfsa_in #
# ternal.c -D AT91SAM7X256 -D PULL_UP_USB -D USE_LED #
# -lC "G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mas #
# s 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\bfsa_internal.lst #
# Object file = G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\AT91SAM7X-Mass #
# Storage\compil\RAM_Debug\Obj\bfsa_internal.r79 #
# #
# #
##############################################################################
G:\AT91_ENERGY\ATMEL_ARM\x256_mmc\FILESYSTEM\bfsa_internal.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 : bfsa_internal.c
12 // Object : Internal functions to perfom basic IO on disk sectors
13 // Creation : FB 10/feb/2005
14 // Modif : JCB 15/apr/2005
15 // --------------------------------------------------------------------------
16 #include "po_types.h"
17 #include "po_kernel.h"
18 #include "trace.h"
19 //#include "flash.h"
20 #include "mmc.h"
21 //#include "bfsa_flash.h"
22 #include "bfsa_api.h"
23 #include "bfsa_internal.h"
24 #include "board.h"
25
26 #ifdef NANDFLASH
27 #include <stdlib.h>
28 #include "nand.h"
29 #include "nand_ids.h"
30 #include "jffs2.h"
31
32 #include "NandFlash.h"
33
34 extern unsigned char bBlock[SIZEONESECTOR];
35 #endif
36
37 // **************************************************
38 // Global
39 // **************************************************
40
\ In segment DATA_Z, align 4, align-sorted
41 UCHAR* FlashBaseAdd =(UCHAR*)BASE_mmc_Add ; // Flash base address, only for read operations
\ FlashBaseAdd:
\ 00000000 DS8 4
42 //ULONG FlashBaseAdd = BASE_mmc_Add ; // Flash base address, only for read operations
43
44 /*****************************************************************
45 *
46 *
47 * S U B - R O U T I N E : readBPB
48 *
49 *-----------------------------------------------------------------
50 *
51 * int readBPB(UCHAR *pucBuff, USHORT uSize)
52 *
53 * Object :
54 * This function read BPB from Flash.
55 *
56 * Argument:
57 * pucBuff :[OUT] pointer to buffer that will receive the BPB,
58 * allocated by caller.
59 * uSize :[IN] size of pucBuff.
60 *
61 * Return value : 0 if success,
62 * on error : NO_MEDIA_FOUND
63 * FLASH_ACCESS_ERROR
64 *
65 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
66 ULONG readBPB(UCHAR *pucBuff, USHORT uSize)
67 {
\ readBPB:
\ 00000000 10B5 PUSH {R4,LR}
68 ULONG _status = BFSA_SUCCESS;
\ 00000002 0024 MOV R4,#+0
69
70 if (uSize > BPB_SIZE)
\ 00000004 3F29 CMP R1,#+63
\ 00000006 01D3 BCC ??readBPB_0
71 {
72 _status = MMC_ACCESS_ERROR;
\ 00000008 .... LDR R4,??DataTable7 ;; 0x80000100
\ 0000000A 04E0 B ??readBPB_1
73 }
74 else
75 {
76 // Copy first bytes from FLASH
77 AT91F_ReadMedia((unsigned int)FlashBaseAdd, uSize, pucBuff);
\ ??readBPB_0:
\ 0000000C 021C MOV R2,R0
\ 0000000E .... LDR R0,??DataTable20 ;; FlashBaseAdd
\ 00000010 0068 LDR R0,[R0, #+0]
\ 00000012 ........ _BLF AT91F_ReadMedia,??AT91F_ReadMedia??rT
78 }
79 return _status;
\ ??readBPB_1:
\ 00000016 201C MOV R0,R4
\ 00000018 .... B ?Subroutine15
80 }
\ In segment CODE, align 4, keep-with-next
\ ?Subroutine15:
\ 00000000 10BC POP {R4}
\ 00000002 02BC POP {R1}
\ 00000004 0847 BX R1 ;; return
81
82 /*****************************************************************
83 *
84 *
85 * S U B - R O U T I N E : readFAT
86 *
87 *-----------------------------------------------------------------
88 *
89 * void readFAT(void)
90 *
91 * Object :
92 * This function copy the FAT from disk to global buffer.
93 *
94 * Argument:
95 * none.
96 *
97 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
98 void readFAT(void)
99 {
\ readFAT:
\ 00000000 00B5 PUSH {LR}
100 ULONG _fatSizeFromDisk = BFSA_media.SectPerFAT*BFSA_media.bytesPerSector;
\ 00000002 .... LDR R0,??DataTable22 ;; BFSA_media
\ 00000004 4188 LDRH R1,[R0, #+2]
\ 00000006 0289 LDRH R2,[R0, #+8]
\ 00000008 4A43 MUL R2,R1
101
102 #ifdef NANDFLASH
103 size_t total;
104 #endif
105
106 #ifndef NANDFLASH
107 po_memcpy((void*)BFSABuffer.BFSA_fatBuff,
108 (void*)(BFSA_media.FATSectStart*BFSA_media.bytesPerSector + (ULONG)FlashBaseAdd),
109 min(_fatSizeFromDisk,sizeofBFSA_fatBuff));
\ 0000000A 8023 MOV R3,#+128
\ 0000000C DB00 LSL R3,R3,#+3 ;; #+1024
\ 0000000E 9A42 CMP R2,R3
\ 00000010 00D3 BCC ??readFAT_0
\ 00000012 1A1C MOV R2,R3
\ ??readFAT_0:
\ 00000014 C088 LDRH R0,[R0, #+6]
\ 00000016 4843 MUL R0,R1
\ 00000018 .... LDR R1,??DataTable20 ;; FlashBaseAdd
\ 0000001A 0968 LDR R1,[R1, #+0]
\ 0000001C 4118 ADD R1,R0,R1
\ 0000001E .... LDR R0,??DataTable15 ;; BFSABuffer
\ 00000020 ........ _BLF po_memcpy,??po_memcpy??rT
110 #else
111 nand_rw(nand_dev_desc + curr_device,
112 NANDRW_READ,
113 BFSA_media.FATSectStart*BFSA_media.bytesPerSector + (ULONG)FlashBaseAdd - AT91_SMARTMEDIA_BASE,
114 sizeofBFSA_fatBuff,
115 &total,
116 BFSA_fatBuff);
117 #endif
118 }
\ 00000024 01BC POP {R0}
\ 00000026 0047 BX R0 ;; return
119
120 /*****************************************************************
121 *
122 *
123 * S U B - R O U T I N E : writeFAT
124 *
125 *-----------------------------------------------------------------
126 *
127 * ULONG writeFAT(void)
128 *
129 * Object :
130 * This function writes back the FAT from global buffer to disk.
131 *
132 * Argument:
133 * none.
134 *
135 * Return value :
136 * BFSA_SUCCESS on success
137 * FLASH_ACCESS_ERROR on error
138 *
139 *****************************************************************/
\ In segment CODE, align 4, keep-with-next
140 ULONG writeFAT(void)
141 {
\ writeFAT:
\ 00000000 F0B5 PUSH {R4-R7,LR}
142 UCHAR _i;
143 ULONG status = BFSA_SUCCESS;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -