📄 mci_sd.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.30A/W32 KICKSTART 02/Aug/2006 15:41:58 #
# 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\MCI_SD.c #
# Command line = "C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CA #
# N)(10K_5K)\BasicCAN-SAM7A3\src\MCI_SD.c" -lC #
# "C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CA #
# N)(10K_5K)\BasicCAN-SAM7A3\compil\Binary\List\" -o #
# "C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CA #
# N)(10K_5K)\BasicCAN-SAM7A3\compil\Binary\Obj\" -z9 #
# --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_CA #
# N)(10K_5K)\BasicCAN-SAM7A3\compil\srcIAR\" -I #
# "C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CA #
# N)(10K_5K)\BasicCAN-SAM7A3\compil\..\src\" -I #
# "C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CA #
# N)(10K_5K)\BasicCAN-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\Binary\List\MCI_SD. #
# lst #
# Object file = C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CAN #
# )(10K_5K)\BasicCAN-SAM7A3\compil\Binary\Obj\MCI_SD.r #
# 79 #
# #
# #
##############################################################################
C:\Documents and Settings\yc\桌面\AT91SAM7A3(CAN_CAN)(10K_5K)\BasicCAN-SAM7A3\src\MCI_SD.c
1 //*******************************************************************************************
2 #include "MCI_SD.h"
3 #include "string.h"
4 #include "Board.h"
\ In segment CODE, align 4, keep-with-next
\ __??Code16?? __code __interwork __atpcs void AT91F_PDC_Open(AT91PS_PDC)
\ AT91F_PDC_Open:
\ 00000000 0221 MOV R1,#+0x2
\ 00000002 0162 STR R1,[R0, #+0x20]
\ 00000004 0902 LSL R1,R1,#+0x8
\ 00000006 0162 STR R1,[R0, #+0x20]
\ 00000008 0021 MOV R1,#+0
\ 0000000A 8161 STR R1,[R0, #+0x18]
\ 0000000C C161 STR R1,[R0, #+0x1C]
\ 0000000E 0161 STR R1,[R0, #+0x10]
\ 00000010 4161 STR R1,[R0, #+0x14]
\ 00000012 8160 STR R1,[R0, #+0x8]
\ 00000014 C160 STR R1,[R0, #+0xC]
\ 00000016 0160 STR R1,[R0, #+0]
\ 00000018 4160 STR R1,[R0, #+0x4]
\ 0000001A 0121 MOV R1,#+0x1
\ 0000001C 0162 STR R1,[R0, #+0x20]
\ 0000001E 0902 LSL R1,R1,#+0x8
\ 00000020 0162 STR R1,[R0, #+0x20]
\ 00000022 7047 BX LR ;; return
5 #include "trace.h"
6
\ In segment DATA_Z, align 4, align-sorted
7 unsigned int *getresData ;
\ getresData:
\ 00000000 DS8 4
8 //****************************************** For SD card init*********************************
\ In segment CODE, align 4, keep-with-next
9 void MCI_Int_Handler(void) //检查状态已决定执行相应的操作
10 {
\ MCI_Int_Handler:
\ 00000000 00B5 PUSH {LR}
11 unsigned long int Status ;
12 Status=AT91F_MCI_GetStatus(AT91C_BASE_MCI) ; //place interrupt code here
\ 00000002 .... LDR R0,??DataTable9 ;; 0xfffac040
\ 00000004 0068 LDR R0,[R0, #+0]
13 if((Status & AT91C_MCI_CMDRDY)==AT91C_MCI_CMDRDY)
\ 00000006 C007 LSL R0,R0,#+0x1F
\ 00000008 03D5 BPL ??MCI_Int_Handler_0
14 {
15 Read_CMD_Respond(ResponedType) ;
\ 0000000A .... LDR R0,??DataTable11 ;; ResponedType
\ 0000000C 0068 LDR R0,[R0, #+0]
\ 0000000E ........ BL Read_CMD_Respond
16 }
17 AT91F_MCI_DisableIt(AT91C_BASE_MCI ,AT91C_MCI_ENDRX) ;
\ ??MCI_Int_Handler_0:
\ 00000012 4020 MOV R0,#+0x40
\ 00000014 .... LDR R1,??DataTable4 ;; 0xfffac048
\ 00000016 0860 STR R0,[R1, #+0]
18
19 AT91F_MCI_EnableIt(AT91C_BASE_MCI ,AT91C_MCI_ENDRX) ;
\ 00000018 .... LDR R1,??DataTable6 ;; 0xfffac044
\ 0000001A .... B ?Subroutine13
20 }
\ In segment CODE, align 4, keep-with-next
\ ?Subroutine13:
\ 00000000 0860 STR R0,[R1, #+0]
\ 00000002 01BC POP {R0}
\ 00000004 0047 BX R0 ;; return
\ 00000006 C046 NOP
\ ??Subroutine13_0:
\ 00000008 ........ DC32 Get_Respond_Buffer
21 //*******************************************************************************************
\ In segment CODE, align 4, keep-with-next
22 void delay(void)
23 {
24 for(int n=0 ;n<10000;)
25 n++ ;
26 }
\ delay:
\ 00000000 7047 BX LR ;; return
27
28 //*******************************************************************************************
\ In segment CODE, align 4, keep-with-next
29 void MCI_Port_Init(void)
30 {
\ MCI_Port_Init:
\ 00000000 F0B5 PUSH {R4-R7,LR}
31 AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
\ 00000002 134C LDR R4,??MCI_Port_Init_0 ;; 0xfffffc10
\ 00000004 0420 MOV R0,#+0x4
\ 00000006 2060 STR R0,[R4, #+0]
32 AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PA14_MCDA3) ;
\ 00000008 1248 LDR R0,??MCI_Port_Init_0+0x4 ;; 0xfffff400
\ 0000000A 8025 MOV R5,#+0x80
\ 0000000C ED01 LSL R5,R5,#+0x7 ;; #+0x4000
\ 0000000E 0560 STR R5,[R0, #+0]
33 AT91F_PIO_OutputEnable(AT91C_BASE_PIOA ,SD_CLK | AT91C_PA14_MCDA3|AT91C_PA16_MCCDA |AT91C_PA15_MCDA0 |
34 AT91C_PA17_MCCK |AT91C_PA12_MCDA1 |AT91C_PA13_MCDA2 ) ;
\ 00000010 1149 LDR R1,??MCI_Port_Init_0+0x8 ;; 0xfffff410
\ 00000012 FC26 MOV R6,#+0xFC
\ 00000014 B602 LSL R6,R6,#+0xA ;; #+0x3F000
\ 00000016 0E60 STR R6,[R1, #+0]
35
36 AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,AT91C_PA14_MCDA3) ;
\ 00000018 0560 STR R5,[R0, #+0]
\ 0000001A 0D60 STR R5,[R1, #+0]
37
38 AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PA14_MCDA3) ; //set it to high,delay 74 clock at least
\ 0000001C 0F48 LDR R0,??MCI_Port_Init_0+0xC ;; 0xfffff430
\ 0000001E 0560 STR R5,[R0, #+0]
39 for(int n=0 ;n<=30;n++)
\ 00000020 1F27 MOV R7,#+0x1F
40 delay() ;
\ ??MCI_Port_Init_1:
\ 00000022 ........ BL delay
\ 00000026 7F1E SUB R7,R7,#+0x1
\ 00000028 FBD1 BNE ??MCI_Port_Init_1
41 AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PA14_MCDA3) ;
\ 0000002A 0D48 LDR R0,??MCI_Port_Init_0+0x10 ;; 0xfffff434
\ 0000002C 0560 STR R5,[R0, #+0]
42 delay() ;
\ 0000002E ........ BL delay
43 delay() ;
\ 00000032 ........ BL delay
44 AT91F_MCI_CfgPIO () ;
\ 00000036 0B48 LDR R0,??MCI_Port_Init_0+0x14 ;; 0xfffff470
\ 00000038 0021 MOV R1,#+0
\ 0000003A 0160 STR R1,[R0, #+0]
\ 0000003C 0A48 LDR R0,??MCI_Port_Init_0+0x18 ;; 0xfffff474
\ 0000003E 0660 STR R6,[R0, #+0]
\ 00000040 0A48 LDR R0,??MCI_Port_Init_0+0x1C ;; 0xfffff404
\ 00000042 0660 STR R6,[R0, #+0]
45 AT91F_MCI_CfgPMC() ;
\ 00000044 6809 LSR R0,R5,#+0x5
\ 00000046 2060 STR R0,[R4, #+0]
46 }
\ 00000048 F0BC POP {R4-R7}
\ 0000004A 01BC POP {R0}
\ 0000004C 0047 BX R0 ;; return
\ 0000004E C046 NOP
\ ??MCI_Port_Init_0:
\ 00000050 10FCFFFF DC32 0xfffffc10
\ 00000054 00F4FFFF DC32 0xfffff400
\ 00000058 10F4FFFF DC32 0xfffff410
\ 0000005C 30F4FFFF DC32 0xfffff430
\ 00000060 34F4FFFF DC32 0xfffff434
\ 00000064 70F4FFFF DC32 0xfffff470
\ 00000068 74F4FFFF DC32 0xfffff474
\ 0000006C 04F4FFFF DC32 0xfffff404
47 //*******************************************************************************************
\ In segment CODE, align 4, keep-with-next
48 void MCI_Init(void)
49
50 {
\ MCI_Init:
\ 00000000 70B5 PUSH {R4-R6,LR}
51 AT91PS_MCI pMCI ;
52 pMCI=AT91C_BASE_MCI ;
53 AT91F_MCI_SW_Reset(pMCI) ;
\ 00000002 1D4C LDR R4,??MCI_Init_0 ;; 0xfffac000
\ 00000004 8020 MOV R0,#+0x80
\ 00000006 2060 STR R0,[R4, #+0]
54 //配置工作模式
55 AT91F_MCI_Configure(pMCI,
56 (AT91C_MCI_DTOCYC & 0x1 )|(AT91C_MCI_DTOMUL & AT91C_MCI_DTOMUL_256), //数据暂停乘数=16
57 (AT91C_MCI_CLKDIV & 0x01) //时钟4分频 |当填充数据到写传输时,使用0x00
58 |(AT91C_MCI_PDCMODE)|(AT91C_MCI_BLKLEN & (Max_BlockSize <<18)) //使能PDC 传输 ,块长度为最大
59 ,(AT91C_MCI_SCDSEL & 0x00 ) //选择SD 卡A , 1 位数据总线(运行后可调)
60 ) ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -