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

📄 sdcmd.lst

📁 针对at91sam7a3为主芯片开发板开发的spi口应用程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   0000002C   1220               MOV         R0,#+0x12
   \   0000002E   05E0               B           ??SD_ReadCSD_1
    185          
    186          	return (SD_ReadRegister(csdlen, recbuf));
   \                     ??SD_ReadCSD_2:
   \   00000030   291C               MOV         R1,R5
   \   00000032   2406               LSL         R4,R4,#+0x18       ;; ZeroExt     R4,R4,#+0x18,#+0x18
   \   00000034   240E               LSR         R4,R4,#+0x18
   \   00000036   201C               MOV         R0,R4
   \   00000038   ........           BL          SD_ReadRegister
   \                     ??SD_ReadCSD_1:
   \   0000003C   02B0               ADD         SP,#+0x8
   \   0000003E   70BC               POP         {R4-R6}
   \   00000040   02BC               POP         {R1}
   \   00000042   0847               BX          R1                 ;; return
    187          }
    188          
    189          /*******************************************************************************************************************
    190          ** 函数名称: INT8U SD_ReadCID()						Name:	  INT8U SD_ReadCID()
    191          ** 功能描述: 读SD卡的CID寄存器						Function: read CID register of sd card
    192          ** 输   入: INT8U cidlen  : 寄存器长度(固定为16)			  INT8U cidlen  : len of register (fixed,is 16)
    193          			 INT8U *recbuf : 接收缓冲区					      INT8U *recbuf : recbuffer	
    194          ** 输   出: 0:   正确    >0:   错误码		  		Output:	  0:  right		>0:  error code
    195          ********************************************************************************************************************/
    196          #if SD_ReadCID_EN
    197          INT8U SD_ReadCID(INT8U cidlen, INT8U *recbuf)
    198          {
    199              INT8U param[4] = {0,0,0,0},resp,ret;
    200          
    201              ret = SD_SendCmd(CMD10, param, CMD10_R, &resp);		/* 读CID寄存器命令 command that read CID register */
    202              if ( ret != SD_NO_ERR)
    203             		return ret;			  									
    204          
    205              if (resp != 0)
    206                  return SD_ERR_CMD_RESP;							/* 响应错误 response is error */
    207          
    208            	return (SD_ReadRegister(cidlen, recbuf));
    209          }
    210          #endif
    211          
    212          /********************************************************************************************************************
    213          ** 函数名称: INT8U SD_StopTransmission()			Name:	  INT8U SD_StopTransmission()
    214          ** 功能描述: 停止数据传输							Function: stop data transmission
    215          ** 输   入: 无								 		Input:    NULL
    216          ** 输   出: 0:   正确    >0:   错误码		  		Output:	  0:  right		>0:  error code
    217          *********************************************************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    218          INT8U SD_StopTransmission(void)
    219          {
   \                     SD_StopTransmission:
   \   00000000   00B5               PUSH        {LR}
   \   00000002   82B0               SUB         SP,#+0x8
    220          	INT8U param[4] = {0,0,0,0},resp;
   \   00000004   6846               MOV         R0,SP
   \   00000006   0021               MOV         R1,#+0
   \   00000008   0160               STR         R1,[R0, #0]
    221          	
    222           	return (SD_SendCmd(CMD12, param, CMD12_R, &resp));	/* 结束数据传输命令失败 stop transmission command fail */
   \   0000000A   01AB               ADD         R3,SP,#+0x4
   \   0000000C   0222               MOV         R2,#+0x2
   \   0000000E   6946               MOV         R1,SP
   \   00000010   0C20               MOV         R0,#+0xC
   \   00000012   ........           BL          SD_SendCmd
   \   00000016   02B0               ADD         SP,#+0x8
   \   00000018   02BC               POP         {R1}
   \   0000001A   0847               BX          R1                 ;; return
    223          }
    224          
    225          /*********************************************************************************************************************
    226          ** 函数名称: INT8U SD_ReadCard_Status()				Name:	  INT8U SD_ReadCard_Status()
    227          ** 功能描述: 读SD/MMC卡的 Card Status 寄存器		Function: read Card Status register of SD/MMC card
    228          ** 输   入: INT8U len: 	 寄存器长度(固定为2)			  INT8U len:      len of register (fixed,is 2)
    229          			 INT8U *recbuf : 接收缓冲区					      INT8U *recbuf : recbuffer
    230          ** 输   出: 0:   正确    >0:   错误码		  		Output:	  0:  right		>0:  error code
    231          **********************************************************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    232          INT8U SD_ReadCard_Status(INT8U len, INT8U *buffer)
    233          {
   \                     SD_ReadCard_Status:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   81B0               SUB         SP,#+0x4
   \   00000004   041C               MOV         R4,R0
   \   00000006   0D1C               MOV         R5,R1
    234              INT8U param[4] = {0,0,0,0};
   \   00000008   6846               MOV         R0,SP
   \   0000000A   0021               MOV         R1,#+0
   \   0000000C   0160               STR         R1,[R0, #0]
    235          
    236              return (SD_SendCmd(CMD13, param, CMD13_R, buffer)); /* 读 Card Status 寄存器 */
   \   0000000E   2B1C               MOV         R3,R5
   \   00000010   0322               MOV         R2,#+0x3
   \   00000012   6946               MOV         R1,SP
   \   00000014   0D20               MOV         R0,#+0xD
   \   00000016   ........           BL          SD_SendCmd
   \   0000001A   01B0               ADD         SP,#+0x4
   \   0000001C   30BC               POP         {R4,R5}
   \   0000001E   02BC               POP         {R1}
   \   00000020   0847               BX          R1                 ;; return
    237              									 	 			/* read register of Card Status */
    238          }
    239          
    240          
    241          /********************************************************************************************************************
    242          ** 函数名称: INT8U SD_SetBlockLen()					Name:	  INT8U SD_SetBlockLen()
    243          ** 功能描述: 设置一个块的长度						Function: set a block len of card
    244          ** 输   入: INT32U length	: 块的长度值			Input:	  INT32U length	: the length of a block
    245          ** 输   出: 0:   正确    >0:   错误码		  		Output:	  0:  right		>0:  error code
    246          *********************************************************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    247          INT8U SD_SetBlockLen(INT32U length)
    248          {
   \                     SD_SetBlockLen:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   82B0               SUB         SP,#+0x8
   \   00000004   041C               MOV         R4,R0
    249          	INT8U param[4],resp,ret;
    250          
    251              SD_PackParam(param, length);					/* 将参数转化为字节形式 change the parameter to bytes form */
   \   00000006   211C               MOV         R1,R4
   \   00000008   01A8               ADD         R0,SP,#+0x4
   \   0000000A   ........           BL          SD_PackParam
    252                    												
    253              ret = SD_SendCmd(CMD16, param, CMD16_R, &resp);
   \   0000000E   6B46               MOV         R3,SP
   \   00000010   0122               MOV         R2,#+0x1
   \   00000012   01A9               ADD         R1,SP,#+0x4
   \   00000014   1020               MOV         R0,#+0x10
   \   00000016   ........           BL          SD_SendCmd
   \   0000001A   051C               MOV         R5,R0
    254              if (ret != SD_NO_ERR)
   \   0000001C   002D               CMP         R5,#+0
   \   0000001E   01D0               BEQ         ??SD_SetBlockLen_0
    255           		return ret;									/* 设置块的长度为length失败 set the length of block to length fail */
   \   00000020   281C               MOV         R0,R5
   \   00000022   06E0               B           ??SD_SetBlockLen_1
    256          	
    257          	if (resp != 0)
   \                     ??SD_SetBlockLen_0:
   \   00000024   6846               MOV         R0,SP
   \   00000026   0078               LDRB        R0,[R0, #+0]
   \   00000028   0028               CMP         R0,#+0
   \   0000002A   01D0               BEQ         ??SD_SetBlockLen_2
    258              	return SD_ERR_CMD_RESP;			   			/* 响应错误 response is error */
   \   0000002C   1220               MOV         R0,#+0x12
   \   0000002E   00E0               B           ??SD_SetBlockLen_1
    259          
    260              return SD_NO_ERR; 								/* 返回执行成功 return perform sucessfully */			
   \                     ??SD_SetBlockLen_2:
   \   00000030   0020               MOV         R0,#+0
   \                     ??SD_SetBlockLen_1:
   \   00000032   02B0               ADD         SP,#+0x8
   \   00000034   30BC               POP         {R4,R5}
   \   00000036   02BC               POP         {R1}
   \   00000038   0847               BX          R1                 ;; return
    261          }
    262          
    263          /********************************************************************************************************************
    264          ** 函数名称: INT8U SD_ReadSingleBlock()				Name:	  INT8U SD_ReadSingleBlock()
    265          ** 功能描述: 读单块命令								Function: read single block command
    266          ** 输   入: INT32U blockaddr: 块地址				Input:	  INT32U blockaddr: block address
    267          ** 输   出: 0:   正确    >0:   错误码		  		Output:	  0:  right	>0:  error code
    268          *********************************************************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    269          INT8U SD_ReadSingleBlock(INT32U blockaddr)
    270          {
   \                     SD_ReadSingleBlock:
   \   00000000   10B5               PUSH        {R4,LR}
   \   00000002   041C               MOV         R4,R0
    271          	return (SD_BlockCommand(CMD17, CMD17_R, blockaddr)); /* 读单块命令 command that read single block */
   \   00000004   221C               MOV         R2,R4
   \   00000006   0121               MOV         R1,#+0x1
   \   00000008   1120               MOV         R0,#+0x11
   \   0000000A   ........           BL          SD_BlockCommand
   \   0000000E   10BC               POP         {R4}
   \   00000010   02BC               POP         {R1}
   \   00000012   0847               BX          R1                 ;; return
    272          }
    273          
    274          /********************************************************************************************************************
    275          ** 函数名称: INT8U SD_ReadMultipleBlock()			Name:	  INT8U SD_ReadMultipleBlock()
    276          ** 功能描述: 读多块命令								Function: read multiple block command
    277          ** 输   入: INT32U blockaddr: 块地址				Input:	  INT32U blockaddr: block address
    278          ** 输   出: 0:   正确    >0:   错误码		  		Output:	  0:  right		>0:  error code
    279          *********************************************************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    280          INT8U SD_ReadMultipleBlock(INT32U blockaddr)
    281          {
   \                     SD_ReadMultipleBlock:
   \   00000000   10B5               PUSH        {R4,LR}
   \   00000002   041C               MOV         R4,R0
    282          	return (SD_BlockCommand(CMD18, CMD18_R, blockaddr)); /* 读多块命令 command that read multiple block */
   \   00000004   221C               MOV         R2,R4
   \   00000006   0121               MOV         R1,#+0x1
   \   00000008   1220               MOV         R0,#+0x12
   \   0000000A   ........           BL          SD_BlockCommand
   \   0000000E   10BC               POP         {R4}
   \   00000010   02BC               POP         {R1}
   \   00000012   0847               BX          R1                 ;; return
    283          }
    284          

⌨️ 快捷键说明

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