⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mci_sd.lst

📁 针对at91sam7a3为主芯片开发板开发的spi口应用程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \                                 In segment CODE, align 4, keep-with-next
   \   __??Code16?? __code __interwork __atpcs unsigned int AT91F_MCI_GetRSP1Reg(AT91PS_MCI)
   \                     AT91F_MCI_GetRSP1Reg:
   \   00000000   006A               LDR         R0,[R0, #+0x20]
   \   00000002   7047               BX          LR                 ;; return

   \                                 In segment CODE, align 4, keep-with-next
   \   __??Code16?? __code __interwork __atpcs void AT91F_MCI_CfgPMC(void)
   \                     AT91F_MCI_CfgPMC:
   \   00000000   00B5               PUSH        {LR}
   \   00000002   8021               MOV         R1,#+0x80
   \   00000004   8900               LSL         R1,R1,#+0x2        ;; #+0x200
   \   00000006   0248               LDR         R0,??AT91F_MCI_CfgPMC_0  ;; 0xfffffc00
   \   00000008   ........           _BLF        AT91F_PMC_EnablePeriphClock,AT91F_PMC_EnablePeriphClock??rT
   \   0000000C   01BC               POP         {R0}
   \   0000000E   0047               BX          R0                 ;; return
   \                     ??AT91F_MCI_CfgPMC_0:
   \   00000010   00FCFFFF           DC32        0xfffffc00

   \                                 In segment CODE, align 4, keep-with-next
   \   __??Code16?? __code __interwork __atpcs void AT91F_MCI_CfgPIO(void)
   \                     AT91F_MCI_CfgPIO:
   \   00000000   00B5               PUSH        {LR}
   \   00000002   FC22               MOV         R2,#+0xFC
   \   00000004   9202               LSL         R2,R2,#+0xA        ;; #+0x3F000
   \   00000006   0021               MOV         R1,#+0
   \   00000008   0248               LDR         R0,??AT91F_MCI_CfgPIO_0  ;; 0xfffff400
   \   0000000A   ........           _BLF        AT91F_PIO_CfgPeriph,AT91F_PIO_CfgPeriph??rT
   \   0000000E   01BC               POP         {R0}
   \   00000010   0047               BX          R0                 ;; return
   \   00000012   C046               NOP         
   \                     ??AT91F_MCI_CfgPIO_0:
   \   00000014   00F4FFFF           DC32        0xfffff400
      5          #include "trace.h"
      6          
      7          //unsigned int *getresData ;
      8          //*****************************************************************************************

   \                                 In segment CODE, align 4, keep-with-next
      9          void MCI_Int_Handler(void)   //检查状态已决定执行相应的操作
     10           {
   \                     MCI_Int_Handler:
   \   00000000   10B5               PUSH        {R4,LR}
     11            unsigned long int Status ;
     12            Status=AT91F_MCI_GetStatus(AT91C_BASE_MCI) ;                            //place interrupt code here
   \   00000002   ....               LDR         R0,??DataTable9    ;; 0xfffac000
   \   00000004   ........           _BLF        AT91F_MCI_GetStatus,AT91F_MCI_GetStatus??rT
   \   00000008   041C               MOV         R4,R0
     13            if((Status & AT91C_MCI_CMDRDY)==AT91C_MCI_CMDRDY)
   \   0000000A   E007               LSL         R0,R4,#+0x1F
   \   0000000C   03D5               BPL         ??MCI_Int_Handler_0
     14             {
     15              Read_CMD_Respond(ResponedType) ;
   \   0000000E   ....               LDR         R0,??DataTable1    ;; ResponedType
   \   00000010   0068               LDR         R0,[R0, #+0]
   \   00000012   ........           BL          Read_CMD_Respond
     16             }
     17            AT91F_MCI_DisableIt(AT91C_BASE_MCI ,AT91C_MCI_ENDRX) ;
   \                     ??MCI_Int_Handler_0:
   \   00000016   4021               MOV         R1,#+0x40
   \   00000018   ....               LDR         R0,??DataTable9    ;; 0xfffac000
   \   0000001A   ........           _BLF        AT91F_MCI_DisableIt,AT91F_MCI_DisableIt??rT
     18          
     19            AT91F_MCI_EnableIt(AT91C_BASE_MCI ,AT91C_MCI_ENDRX) ;
   \   0000001E   4021               MOV         R1,#+0x40
   \   00000020   ....               LDR         R0,??DataTable9    ;; 0xfffac000
   \   00000022   ........           _BLF        AT91F_MCI_EnableIt,AT91F_MCI_EnableIt??rT
     20           }
   \   00000026   10BC               POP         {R4}
   \   00000028   01BC               POP         {R0}
   \   0000002A   0047               BX          R0                 ;; return
     21          //*******************************************************************************************

   \                                 In segment CODE, align 4, keep-with-next
     22          void  delay(void)
     23          {
   \                     delay:
   \   00000000   00B5               PUSH        {LR}
     24            for(int n=0 ;n<10000;)
   \   00000002   0020               MOV         R0,#+0
   \                     ??delay_0:
   \   00000004   0349               LDR         R1,??delay_1       ;; 0x2710
   \   00000006   8842               CMP         R0,R1
   \   00000008   01DA               BGE         ??delay_2
     25              n++ ;
   \   0000000A   401C               ADD         R0,#+0x1
   \   0000000C   FAE7               B           ??delay_0
     26          }
   \                     ??delay_2:
   \   0000000E   01BC               POP         {R0}
   \   00000010   0047               BX          R0                 ;; return
   \   00000012   C046               NOP         
   \                     ??delay_1:
   \   00000014   10270000           DC32        0x2710
     27          
     28          //*******************************************************************************************

   \                                 In segment CODE, align 4, keep-with-next
     29          void  MCI_Port_Init(void)
     30          {
   \                     MCI_Port_Init:
   \   00000000   10B5               PUSH        {R4,LR}
     31            AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
   \   00000002   0421               MOV         R1,#+0x4
   \   00000004   1648               LDR         R0,??MCI_Port_Init_0  ;; 0xfffffc00
   \   00000006   ........           _BLF        AT91F_PMC_EnablePeriphClock,AT91F_PMC_EnablePeriphClock??rT
     32            AT91F_PIO_OutputEnable(AT91C_BASE_PIOA ,SD_CLK | AT91C_PA14_MCDA3|AT91C_PA16_MCCDA |AT91C_PA15_MCDA0 |
     33                                   AT91C_PA17_MCCK |AT91C_PA12_MCDA1 |AT91C_PA13_MCDA2 ) ;
   \   0000000A   FC21               MOV         R1,#+0xFC
   \   0000000C   8902               LSL         R1,R1,#+0xA        ;; #+0x3F000
   \   0000000E   1548               LDR         R0,??MCI_Port_Init_0+0x4  ;; 0xfffff400
   \   00000010   ........           _BLF        AT91F_PIO_OutputEnable,AT91F_PIO_OutputEnable??rT
     34          
     35            AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,AT91C_PA14_MCDA3) ;
   \   00000014   8021               MOV         R1,#+0x80
   \   00000016   C901               LSL         R1,R1,#+0x7        ;; #+0x4000
   \   00000018   1248               LDR         R0,??MCI_Port_Init_0+0x4  ;; 0xfffff400
   \   0000001A   ........           _BLF        AT91F_PIO_CfgOutput,AT91F_PIO_CfgOutput??rT
     36          
     37            AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,AT91C_PA14_MCDA3) ;  //PULL_Up to 50 ohm resistor
   \   0000001E   8021               MOV         R1,#+0x80
   \   00000020   C901               LSL         R1,R1,#+0x7        ;; #+0x4000
   \   00000022   1048               LDR         R0,??MCI_Port_Init_0+0x4  ;; 0xfffff400
   \   00000024   ........           _BLF        AT91F_PIO_CfgPullup,AT91F_PIO_CfgPullup??rT
     38            AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PA14_MCDA3) ;  //set it to high,delay 74 clock at least
   \   00000028   8021               MOV         R1,#+0x80
   \   0000002A   C901               LSL         R1,R1,#+0x7        ;; #+0x4000
   \   0000002C   0D48               LDR         R0,??MCI_Port_Init_0+0x4  ;; 0xfffff400
   \   0000002E   ........           _BLF        AT91F_PIO_SetOutput,AT91F_PIO_SetOutput??rT
     39            for(int n=0 ;n<=30;n++)
   \   00000032   0024               MOV         R4,#+0
   \                     ??MCI_Port_Init_1:
   \   00000034   1F2C               CMP         R4,#+0x1F
   \   00000036   03DA               BGE         ??MCI_Port_Init_2
     40            delay() ;
   \   00000038   ........           BL          delay
   \   0000003C   641C               ADD         R4,#+0x1
   \   0000003E   F9E7               B           ??MCI_Port_Init_1
     41            AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PA14_MCDA3) ;
   \                     ??MCI_Port_Init_2:
   \   00000040   8021               MOV         R1,#+0x80
   \   00000042   C901               LSL         R1,R1,#+0x7        ;; #+0x4000
   \   00000044   0748               LDR         R0,??MCI_Port_Init_0+0x4  ;; 0xfffff400
   \   00000046   ........           _BLF        AT91F_PIO_ClearOutput,AT91F_PIO_ClearOutput??rT
     42            delay() ;
   \   0000004A   ........           BL          delay
     43            delay() ;
   \   0000004E   ........           BL          delay
     44            AT91F_MCI_CfgPIO () ;
   \   00000052   ........           _BLF        AT91F_MCI_CfgPIO,AT91F_MCI_CfgPIO??rT
     45            AT91F_MCI_CfgPMC()  ;
   \   00000056   ........           _BLF        AT91F_MCI_CfgPMC,AT91F_MCI_CfgPMC??rT
     46          }
   \   0000005A   10BC               POP         {R4}
   \   0000005C   01BC               POP         {R0}
   \   0000005E   0047               BX          R0                 ;; return
   \                     ??MCI_Port_Init_0:
   \   00000060   00FCFFFF           DC32        0xfffffc00
   \   00000064   00F4FFFF           DC32        0xfffff400
     47          //*******************************************************************************************

   \                                 In segment CODE, align 4, keep-with-next
     48          void MCI_Init(void)
     49          
     50          {
   \                     MCI_Init:
   \   00000000   10B5               PUSH        {R4,LR}
     51            AT91PS_MCI pMCI ;
     52            pMCI=AT91C_BASE_MCI ;
   \   00000002   ....               LDR         R0,??DataTable9    ;; 0xfffac000
   \   00000004   041C               MOV         R4,R0
     53          
     54            pMCI->MCI_CR = ~AT91C_MCI_MCIEN;
   \   00000006   0120               MOV         R0,#+0x1
   \   00000008   C043               MVN         R0,R0              ;; #-2
   \   0000000A   2060               STR         R0,[R4, #+0]
     55            AT91F_MCI_SW_Reset(pMCI) ;
   \   0000000C   201C               MOV         R0,R4
   \   0000000E   ........           _BLF        AT91F_MCI_SW_Reset,AT91F_MCI_SW_Reset??rT
     56            //配置工作模式
     57          
     58            AT91F_MCI_Configure(pMCI,
     59                                  (AT91C_MCI_DTOCYC & 0x1 )|(AT91C_MCI_DTOMUL & AT91C_MCI_DTOMUL_256), //数据暂停乘数=16
     60                                  (AT91C_MCI_CLKDIV & 0x03)|                                           //时钟4分频 |当填充数据到写传输时,使用0x00
     61                                  (AT91C_MCI_PDCMODE)|(AT91C_MCI_BLKLEN & (Max_BlockSize <<18))        //使能PDC 传输 ,块长度为最大
     62                                 ,(AT91C_MCI_SCDSEL & 0x00 )                                           //选择SD 卡A , 1 位数据总线(运行后可调)
     63                                ) ;
   \   00000012   0023               MOV         R3,#+0
   \   00000014   0E4A               LDR         R2,??MCI_Init_0    ;; 0x4008003
   \   00000016   3121               MOV         R1,#+0x31
   \   00000018   201C               MOV         R0,R4
   \   0000001A   ........           _BLF        AT91F_MCI_Configure,AT91F_MCI_Configure??rT
     64            AT91F_MCI_CfgFrequency(AT91C_BASE_MCI,48,12) ;
   \   0000001E   0C22               MOV         R2,#+0xC
   \   00000020   3021               MOV         R1,#+0x30
   \   00000022   ....               LDR         R0,??DataTable9    ;; 0xfffac000
   \   00000024   ........           _BLF        AT91F_MCI_CfgFrequency,AT91F_MCI_CfgFrequency??rT
     65            AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_MCI,7,0,MCI_Int_Handler) ;
   \   00000028   0A48               LDR         R0,??MCI_Init_0+0x4  ;; MCI_Int_Handler
   \   0000002A   01B4               PUSH        {R0}
   \   0000002C   0023               MOV         R3,#+0
   \   0000002E   0722               MOV         R2,#+0x7
   \   00000030   0921               MOV         R1,#+0x9
   \   00000032   0948               LDR         R0,??MCI_Init_0+0x8  ;; 0xfffff000
   \   00000034   ........           _BLF        AT91F_AIC_ConfigureIt,AT91F_AIC_ConfigureIt??rT
   \   00000038   01B0               ADD         SP,#+0x4
     66            AT91F_MCI_EnableIt(pMCI,//AT91C_MCI_CMDRDY|AT91C_MCI_RXRDY|AT91C_MCI_TXRDY    |AT91C_MCI_ENDTX

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -