📄 mmc.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.30A/W32 KICKSTART 31/Jul/2006 09:41:27 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = interwork #
# Endian = little #
# Stack alignment = 4 #
# Source file = C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CAN #
# )(10K_5K)\BasicCAN-SAM7A3\src\mmc.c #
# Command line = "C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CA #
# N)(10K_5K)\BasicCAN-SAM7A3\src\mmc.c" -lC #
# "C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CA #
# N)(10K_5K)\BasicCAN-SAM7A3\compil\RAM_Debug\List\" #
# --remarks -o "C:\Documents and #
# Settings\yc\桌面\AT91SAM7A3(CAN_CAN)(10K_5K)\BasicCA #
# N-SAM7A3\compil\RAM_Debug\Obj\" -z2 --no_cse #
# --no_unroll --no_inline --no_code_motion --no_tbaa #
# --no_clustering --no_scheduling --debug --cpu_mode #
# thumb --endian little --cpu ARM7TDMI --stack_align #
# 4 --interwork -e --fpu None --dlib_config "D:\IAR #
# Systems\Embedded Workbench 4.0 #
# Kickstart\arm\LIB\dl4tptinl8f.h" -I "C:\Documents #
# and Settings\yc\桌面\AT91SAM7A3(CAN_CAN)(10K_5K)\Bas #
# icCAN-SAM7A3\compil\srcIAR\" -I "C:\Documents and #
# Settings\yc\桌面\AT91SAM7A3(CAN_CAN)(10K_5K)\BasicCA #
# N-SAM7A3\compil\..\src\" -I "C:\Documents and #
# Settings\yc\桌面\AT91SAM7A3(CAN_CAN)(10K_5K)\BasicCA #
# N-SAM7A3\compil\..\..\" -I "D:\IAR Systems\Embedded #
# Workbench 4.0 Kickstart\arm\INC\" #
# List file = C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CAN #
# )(10K_5K)\BasicCAN-SAM7A3\compil\RAM_Debug\List\mmc. #
# lst #
# Object file = C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CAN #
# )(10K_5K)\BasicCAN-SAM7A3\compil\RAM_Debug\Obj\mmc.r #
# 79 #
# #
# #
##############################################################################
C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CAN)(10K_5K)\BasicCAN-SAM7A3\src\mmc.c
1 #include "mmc.h"
\ In segment CODE, align 4, keep-with-next
\ __??Code16?? __code __interwork __atpcs void AT91F_PIO_CfgPeriph(AT91PS_PIO, unsigned int, unsigned int)
\ AT91F_PIO_CfgPeriph:
\ 00000000 0167 STR R1,[R0, #+0x70]
\ 00000002 4267 STR R2,[R0, #+0x74]
\ 00000004 131C MOV R3,R2
\ 00000006 0B43 ORR R3,R1
\ 00000008 4360 STR R3,[R0, #+0x4]
\ 0000000A 7047 BX LR ;; return
\ In segment CODE, align 4, keep-with-next
\ __??Code16?? __code __interwork __atpcs unsigned int AT91F_PIO_GetInput(AT91PS_PIO)
\ AT91F_PIO_GetInput:
\ 00000000 C06B LDR R0,[R0, #+0x3C]
\ 00000002 7047 BX LR ;; return
\ In segment CODE, align 4, keep-with-next
\ __??Code16?? __code __interwork __atpcs void AT91F_PIO_SetOutput(AT91PS_PIO, unsigned int)
\ AT91F_PIO_SetOutput:
\ 00000000 0163 STR R1,[R0, #+0x30]
\ 00000002 7047 BX LR ;; return
\ In segment CODE, align 4, keep-with-next
\ __??Code16?? __code __interwork __atpcs void AT91F_PIO_ClearOutput(AT91PS_PIO, unsigned int)
\ AT91F_PIO_ClearOutput:
\ 00000000 4163 STR R1,[R0, #+0x34]
\ 00000002 7047 BX LR ;; return
\ In segment CODE, align 4, keep-with-next
\ __??Code16?? __code __interwork __atpcs void AT91F_PIO_OutputEnable(AT91PS_PIO, unsigned int)
\ AT91F_PIO_OutputEnable:
\ 00000000 0161 STR R1,[R0, #+0x10]
\ 00000002 7047 BX LR ;; return
\ In segment CODE, align 4, keep-with-next
\ __??Code16?? __code __interwork __atpcs unsigned int AT91F_PIO_GetInterruptStatus(AT91PS_PIO)
\ AT91F_PIO_GetInterruptStatus:
\ 00000000 C06C LDR R0,[R0, #+0x4C]
\ 00000002 7047 BX LR ;; return
\ In segment CODE, align 4, keep-with-next
\ __??Code16?? __code __interwork __atpcs void AT91F_PMC_EnablePeriphClock(AT91PS_PMC, unsigned int)
\ AT91F_PMC_EnablePeriphClock:
\ 00000000 0161 STR R1,[R0, #+0x10]
\ 00000002 7047 BX LR ;; return
int OID[3] ; //*********OEM ID ,16比特 2进制数 , 暂未用
^
"C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CAN)(10K_5K)\BasicCAN-SAM7A3\src\mmc.h",47 Warning[Pe009]:
nested comment is not allowed
int PSN[5] ; //*********Product serial number,32 bit ,暂未用
^
"C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CAN)(10K_5K)\BasicCAN-SAM7A3\src\mmc.h",48 Warning[Pe009]:
nested comment is not allowed
\ In segment DATA_Z, align 4, align-sorted
\ BUFFER_TYPE __data sectorBuffer
\ sectorBuffer:
\ 00000000 DS8 256
\ In segment DATA_Z, align 4, align-sorted
\ int __data readPos
\ readPos:
\ 00000000 DS8 4
\ In segment DATA_Z, align 4, align-sorted
\ int __data sectorPos
\ sectorPos:
\ 00000000 DS8 4
2 /****************************************************************************
3 SD卡操作的主要重点在于命令的返回,读写地址的定位
4 这部分程序使用IO口模拟方式读写SD卡,未验证,
5 下一部分使用SPI接口和MCI接口 ,Countinue...... ,对于本程序,这三种模式下,所
6 不同的对于和SD卡的通讯部分,其他部分基本相同
7 不同功能程序如下:MMC_Port_Init(...) ; MMC_Init()SPI与MCI不同;Read_Byte_MMC(...)和
8 Write_Byte_MMC(...)三种模式下都不同;详见注释
9 **/
10 // Port Init
\ In segment CODE, align 4, keep-with-next
11 void MMC_Port_Init(void) //配置 spi 端口
12 //****************************************************************************
13 {
\ MMC_Port_Init:
\ 00000000 00B5 PUSH {LR}
14
15 #ifdef Direct_IO //*********** I/O口模拟SPI模式 **********
16 AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC,1<<AT91C_ID_PIOA) ;
\ 00000002 0421 MOV R1,#+0x4
\ 00000004 0748 LDR R0,??MMC_Port_Init_0 ;; 0xfffffc00
\ 00000006 ........ _BLF AT91F_PMC_EnablePeriphClock,AT91F_PMC_EnablePeriphClock??rT
17 AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA ,SPI_DI|SPI_DO|SPI_Clock|MMC_Chip_Select,0) ;
\ 0000000A 0022 MOV R2,#+0
\ 0000000C E421 MOV R1,#+0xE4
\ 0000000E C902 LSL R1,R1,#+0xB ;; #+0x72000
\ 00000010 .... LDR R0,??DataTable22 ;; 0xfffff400
\ 00000012 ........ _BLF AT91F_PIO_CfgPeriph,AT91F_PIO_CfgPeriph??rT
18 AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,SPI_DO|SPI_Clock|MMC_Chip_Select) ;
\ 00000016 C421 MOV R1,#+0xC4
\ 00000018 C902 LSL R1,R1,#+0xB ;; #+0x62000
\ 0000001A .... LDR R0,??DataTable22 ;; 0xfffff400
\ 0000001C ........ _BLF AT91F_PIO_OutputEnable,AT91F_PIO_OutputEnable??rT
19 #endif
20
21 #ifdef SPI_Mode //***************** SPI 模式 ******************
22
23 AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC,1<<AT91C_ID_PIOA) ;
24 AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA ,SPI_DI|SPI_DO|SPI_Clock|MMC_Chip_Select,0) ;
25 AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,SPI_DO|SPI_Clock|MMC_Chip_Select) ;
26 // config SPI 模式
27 AT91F_SPI_CfgMode(AT91C_BASE_SPI0,AT91C_SPI_MSTR|AT91C_SPI_PS_FIXED
28 |AT91C_SPI_FDIV|AT91C_SPI_DLYBCS) ; //配置模式 master,FiX,MCK/32
29 //拨特率=mck/64/7 ,bit width=8
30 AT91C_BASE_SPI0->SPI_CSR[0] |=(AT91C_SPI_BITS_8|(AT91C_SPI_SCBR & 0x07)) ;
31 AT91F_SPI_Reset(AT91C_BASE_SPI0) ;
32 AT91F_SPI_Enable(AT91C_BASE_SPI0) ;
33 #endif
34
35 #ifdef MCI_Mode //***************** 使用MCI模式 *************
36 ; // in use MCI mode ,place code here ! but not support MCI in AT91SAM7X256 .
37 // achieve the foundation in use AT91SAM7A3
38 #endif
39 }
\ 00000020 01BC POP {R0}
\ 00000022 0047 BX R0 ;; return
\ ??MMC_Port_Init_0:
\ 00000024 00FCFFFF DC32 0xfffffc00
40
41 //****************************************************************************
42 //Init MMC/SD card(SPI-MODE)
\ In segment CODE, align 4, keep-with-next
43 unsigned char MMC_Init(void) // 在SPI和MCI模式下 有所不同
44 //****************************************************************************
45 {
\ MMC_Init:
\ 00000000 70B5 PUSH {R4-R6,LR}
\ 00000002 82B0 SUB SP,#+0x8
46 unsigned char retry,temp;
47 unsigned char i;
48 //CRC 校验在每个命令都需要,其生成多项式: G(x) = x7 + x3 + 1.
49 unsigned char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95}; // Com0 复位
\ 00000004 6846 MOV R0,SP
\ 00000006 2A49 LDR R1,??MMC_Init_0 ;; `?<Constant {64, 0, 0, 0, 0, 149}>`
\ 00000008 0A68 LDR R2,[R1, #0]
\ 0000000A 0260 STR R2,[R0, #0]
\ 0000000C 4A68 LDR R2,[R1, #+0x4]
\ 0000000E 4260 STR R2,[R0, #+0x4]
50
51 MMC_Port_Init(); //Init SPI port
\ 00000010 ........ BL MMC_Port_Init
52
53 for(i=0;i<200;i++) //Wait MMC/SD ready...
\ 00000014 0020 MOV R0,#+0
\ 00000016 061C MOV R6,R0
\ ??MMC_Init_1:
\ 00000018 3606 LSL R6,R6,#+0x18 ;; ZeroExt R6,R6,#+0x18,#+0x18
\ 0000001A 360E LSR R6,R6,#+0x18
\ 0000001C C82E CMP R6,#+0xC8
\ 0000001E 02D2 BCS ??MMC_Init_2
54 {
55 asm("nop") ; //__asm("nop") ; 嵌入汇编语言
\ 00000020 C046 nop
56 }
\ 00000022 761C ADD R6,#+0x1
\ 00000024 F8E7 B ??MMC_Init_1
57
58 Init_Flag=1; //标志为卡片状态 为正在初始化
\ ??MMC_Init_2:
\ 00000026 .... LDR R0,??DataTable18 ;; Init_Flag
\ 00000028 0121 MOV R1,#+0x1
\ 0000002A 0160 STR R1,[R0, #+0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -