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

📄 mci_sd.lst

📁 针对at91sam7a3为主芯片开发板开发的spi口应用程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
Remark[Pe181]: argument is incompatible with corresponding format string
          conversion
   \                     ??MCI_SendCommand_22:
   \   00000164   ....               LDR         R0,??DataTable54   ;; _Stdout
   \   00000166   0028               CMP         R0,#+0
   \   00000168   05D0               BEQ         ??MCI_SendCommand_9
   \   0000016A   ....               LDR         R0,??DataTable52   ;; 0xfffac02c
   \   0000016C   0268               LDR         R2,[R0, #+0]
   \   0000016E   ....               LDR         R1,??DataTable53   ;; `?<Constant "\\r\\n %d \\r\\n ">`
   \   00000170   ....               LDR         R0,??DataTable54   ;; _Stdout
   \   00000172   ........           _BLF        fprintf,fprintf??rT
    200                      break ;
    201                     }
    202                 default : ;
    203          
    204                 }
    205          
    206               }
    207               return 0 ;                              //正确返回
   \                     ??MCI_SendCommand_9:
   \   00000176   0020               MOV         R0,#+0
   \   00000178   03B0               ADD         SP,#+0xC
   \   0000017A   F0BC               POP         {R4-R7}
   \   0000017C   02BC               POP         {R1}
   \   0000017E   0847               BX          R1                 ;; return
   \                     ??MCI_SendCommand_0:
   \   00000180   10C0FAFF           DC32        0xfffac010
   \   00000184   ........           DC32        `?<Constant "____48 Responed0 DATA...">`
   \   00000188   ........           DC32        `?<Constant "____48 Responed1 DATA...">`
   \   0000018C   ........           DC32        `?<Constant "____Responed0 DATA____">`
   \   00000190   ........           DC32        `?<Constant "____Responed1 DATA____">`
   \   00000194   ........           DC32        `?<Constant "____Responed2 DATA____">`
   \   00000198   ........           DC32        `?<Constant "____Responed3 DATA____">`
    208          }
    209          //******************************************************************************************************
    210          //********读取 返回值 ,RCA=Respond[ 39:24]

   \                                 In segment CODE, align 4, keep-with-next
    211          void Get_SD_RCA( void )
    212          {
   \                     Get_SD_RCA:
   \   00000000   10B5               PUSH        {R4,LR}
    213            unsigned int ch ;
    214            MCI_SendCommand(0x03 ,0,Respond_Len_48,0) ;              //RCA =Respond[ 39:24]
   \   00000002   0023               MOV         R3,#+0
   \   00000004   0122               MOV         R2,#+0x1
   \   00000006   0021               MOV         R1,#+0
   \   00000008   0320               MOV         R0,#+0x3
   \   0000000A   ........           BL          MCI_SendCommand
    215            //***得到 RCA 的值,如需要检测状态 ,可以读[23:8] 的状态
    216            ch=Get_Respond_Buffer.data[4] ;
   \   0000000E   ....               LDR         R0,??DataTable55   ;; Get_Respond_Buffer + 4
   \   00000010   0078               LDRB        R0,[R0, #+0]
   \   00000012   041C               MOV         R4,R0
    217            RCA_Addr=0x00000000 ;
   \   00000014   ....               LDR         R0,??DataTable61   ;; RCA_Addr
   \   00000016   0021               MOV         R1,#+0
   \   00000018   0160               STR         R1,[R0, #+0]
    218            RCA_Addr += (unsigned int)ch <<24 ;
   \   0000001A   ....               LDR         R0,??DataTable61   ;; RCA_Addr
   \   0000001C   ....               LDR         R1,??DataTable61   ;; RCA_Addr
   \   0000001E   0968               LDR         R1,[R1, #+0]
   \   00000020   2206               LSL         R2,R4,#+0x18
   \   00000022   8918               ADD         R1,R1,R2
   \   00000024   0160               STR         R1,[R0, #+0]
    219            ch=Get_Respond_Buffer.data[3] ;
   \   00000026   ....               LDR         R0,??DataTable59   ;; Get_Respond_Buffer + 3
   \   00000028   0078               LDRB        R0,[R0, #+0]
   \   0000002A   041C               MOV         R4,R0
    220            RCA_Addr += (unsigned int)ch <<16 ;
   \   0000002C   ....               LDR         R0,??DataTable61   ;; RCA_Addr
   \   0000002E   ....               LDR         R1,??DataTable61   ;; RCA_Addr
   \   00000030   0968               LDR         R1,[R1, #+0]
   \   00000032   2204               LSL         R2,R4,#+0x10
   \   00000034   8918               ADD         R1,R1,R2
   \   00000036   0160               STR         R1,[R0, #+0]
    221          
    222          }
   \   00000038   10BC               POP         {R4}
   \   0000003A   01BC               POP         {R0}
   \   0000003C   0047               BX          R0                 ;; return
    223          
    224          /******************************************************************************************************
    225          写卡的步骤为:1:选择要写的目标卡 (发送基本命令 CMD7 ,参数为RCA ,响应类型为R1b)
    226                        2: 设置写块的长度:SET_BLOCKLEN ,命令CMD16 ,参数32bit块长度,响应类型 R1 .
    227                           (SET_BLOCKLEN为每次要写入的数据长度)
    228                        3: 是否用PDC通道传送,设置传送方式和块长度
    229                        4:发写数据块命令 ,
    230                        5:等待标志 ,如果是通道发送的话,ENDTX = 0标志着数据发送结束,非通道,循环发送
    231               本列采用通道和非通道两种发送方式:
    232          ******************************************************************************************************/
    233          //注意 ,在调用程序的时候 ,Block_Len =StrLen(SendData) ,即为发送数据的长度

   \                                 In segment CODE, align 4, keep-with-next
    234          int   MCI_SendData   (char *SendData ,unsigned long int WriteTo_Addr,unsigned int UsePDC)
    235          {
   \                     MCI_SendData:
   \   00000000   F7B5               PUSH        {R0-R2,R4-R7,LR}
   \   00000002   82B0               SUB         SP,#+0x8
    236            int State    ;
    237            int TXcnt =0 ;
   \   00000004   0020               MOV         R0,#+0
   \   00000006   051C               MOV         R5,R0
    238            unsigned int Multiply_Block=0 ;                            //数据是写入单块还是多块 ,0:single ,1: Multiply
   \   00000008   0020               MOV         R0,#+0
   \   0000000A   0190               STR         R0,[SP, #+0x4]
    239            unsigned long int Block_Len ;
    240            Block_Len=strlen(SendData)  ;                              //得到写入数据的总长度
   \   0000000C   0298               LDR         R0,[SP, #+0x8]
   \   0000000E   0022               MOV         R2,#+0
   \                     ??MCI_SendData_0:
   \   00000010   815C               LDRB        R1,[R0, R2]
   \   00000012   521C               ADD         R2,#+0x1
   \   00000014   0029               CMP         R1,#+0
   \   00000016   FBD1               BNE         ??MCI_SendData_0
   \   00000018   521E               SUB         R2,#+0x1
   \   0000001A   0092               STR         R2,[SP, #+0]
    241            if( Block_Len > Max_BlockSize )                            //数据大于块容量,多块写入 *****
   \   0000001C   0098               LDR         R0,[SP, #+0]
   \   0000001E   FF21               MOV         R1,#+0xFF
   \   00000020   891C               ADD         R1,#+0x2           ;; #+0x101
   \   00000022   8842               CMP         R0,R1
   \   00000024   01D3               BCC         ??MCI_SendData_1
    242              Multiply_Block=0x1 ;
   \   00000026   0120               MOV         R0,#+0x1
   \   00000028   0190               STR         R0,[SP, #+0x4]
    243            State =MCI_SendCommand(0x07,0,Respond_Len_48,0) ;          // Send command SEL_DESEL_CARD to select the card
   \                     ??MCI_SendData_1:
   \   0000002A   0023               MOV         R3,#+0
   \   0000002C   0122               MOV         R2,#+0x1
   \   0000002E   0021               MOV         R1,#+0
   \   00000030   0720               MOV         R0,#+0x7
   \   00000032   ........           BL          MCI_SendCommand
   \   00000036   041C               MOV         R4,R0
    244            while(State !=0)
   \                     ??MCI_SendData_2:
   \   00000038   002C               CMP         R4,#+0
   \   0000003A   10D0               BEQ         ??MCI_SendData_3
    245            {
    246                delay() ;
   \   0000003C   ........           BL          delay
    247                State =MCI_SendCommand(0x07,0,Respond_Len_48,0) ;
   \   00000040   0023               MOV         R3,#+0
   \   00000042   0122               MOV         R2,#+0x1
   \   00000044   0021               MOV         R1,#+0
   \   00000046   0720               MOV         R0,#+0x7
   \   00000048   ........           BL          MCI_SendCommand
   \   0000004C   041C               MOV         R4,R0
    248                if(TXcnt++ >10)
   \   0000004E   281C               MOV         R0,R5
   \   00000050   051C               MOV         R5,R0
   \   00000052   6D1C               ADD         R5,#+0x1
   \   00000054   0B28               CMP         R0,#+0xB
   \   00000056   EFDB               BLT         ??MCI_SendData_2
    249                  return -1;
   \   00000058   0020               MOV         R0,#+0
   \   0000005A   C043               MVN         R0,R0              ;; #-1
   \   0000005C   E5E0               B           ??MCI_SendData_4
    250            }
    251          
    252            State =MCI_SendCommand(0x10,Block_Len,Respond_Len_48,0) ;    //  SET_BLOCKLEN
   \                     ??MCI_SendData_3:
   \   0000005E   0023               MOV         R3,#+0
   \   00000060   0122               MOV         R2,#+0x1
   \   00000062   0099               LDR         R1,[SP, #+0]
   \   00000064   1020               MOV         R0,#+0x10
   \   00000066   ........           BL          MCI_SendCommand
   \   0000006A   041C               MOV         R4,R0
    253            TXcnt=0 ;
   \   0000006C   0020               MOV         R0,#+0
   \   0000006E   051C               MOV         R5,R0
    254            while(State !=0)
   \                     ??MCI_SendData_5:
   \   00000070   002C               CMP         R4,#+0
   \   00000072   10D0               BEQ         ??MCI_SendData_6
    255            {
    256                delay() ;
   \   00000074   ........           BL          delay
    257                State =MCI_SendCommand(0x10,Block_Len,Respond_Len_48,0) ;
   \   00000078   0023               MOV         R3,#+0
   \   0000007A   0122               MOV         R2,#+0x1
   \   0000007C   0099               LDR         R1,[SP, #+0]
   \   0000007E   1020               MOV         R0,#+0x10
   \   00000080   ........           BL          MCI_SendCommand
   \   00000084   041C               MOV         R4,R0
    258                if(TXcnt++ > 10)
   \   00000086   281C               MOV         R0,R5
   \   00000088   051C               MOV         R5,R0
   \   0000008A   6D1C               ADD         R5,#+0x1
   \   0000008C   0B28               CMP         R0,#+0xB
   \   0000008E   EFDB               BLT         ??MCI_SendData_5
    259                  return -1;
   \   00000090   0020               MOV         R0,#+0
   \   00000092   C043               MVN         R0,R0              ;; #-1
   \   00000094   C9E0               B           ??MCI_SendData_4
    260            }
    261          
    262            if(UsePDC==0x1)                                             //使用PDC通道方式处理时
   \                     ??MCI_SendData_6:
   \   00000096   0498               LDR         R0,[SP, #+0x10]
   \   00000098   0128               CMP         R0,#+0x1
   \   0000009A   5DD1               BNE         ??MCI_SendData_7
    263            {
    264              AT91C_BASE_MCI->MCI_MR |=AT91C_MCI_PDCMODE ;

⌨️ 快捷键说明

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