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

📄 sddriver.lst

📁 针对at91sam7a3为主芯片开发板开发的spi口应用程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00000066   8020               MOV         R0,#+0x80
   \   00000068   8000               LSL         R0,R0,#+0x2        ;; #+0x200
   \   0000006A   ........           _BLF        SD_SetBlockLen,SD_SetBlockLen??rT
   \   0000006E   041C               MOV         R4,R0
    109              if (ret != SD_NO_ERR)
   \   00000070   002C               CMP         R4,#+0
   \   00000072   08D1               BNE         ??SD_Initialize_1
    110                  goto SD_ERR;
    111          
    112              ret = SD_GetCardInfo();							/* 10. 读CSD寄存器,获取SD卡信息 read CSD register, get the information of SD card */
   \   00000074   ........           BL          SD_GetCardInfo
   \   00000078   041C               MOV         R4,R0
    113          	if (ret != SD_NO_ERR)
   \   0000007A   002C               CMP         R4,#+0
   \   0000007C   03D1               BNE         ??SD_Initialize_1
    114          		goto SD_ERR;
    115          
    116          	SD_EndSD();		
   \   0000007E   ........           BL          SD_EndSD
    117          	return SD_NO_ERR;								/* 初始化成功 initialize sucessfully */
   \   00000082   0020               MOV         R0,#+0
   \   00000084   02E0               B           ??SD_Initialize_3
    118          
    119          SD_ERR:	
    120          	SD_EndSD();	
   \                     ??SD_Initialize_1:
   \   00000086   ........           BL          SD_EndSD
    121          	return ret;
   \   0000008A   201C               MOV         R0,R4
   \                     ??SD_Initialize_3:
   \   0000008C   01B0               ADD         SP,#+0x4
   \   0000008E   10BC               POP         {R4}
   \   00000090   02BC               POP         {R1}
   \   00000092   0847               BX          R1                 ;; return
    122          }
    123          
    124          /********************************************************************************************************************
    125          ** 函数名称: INT8U SD_ReadBlock()					Name:	  INT8U SD_ReadBlock()
    126          ** 功能描述: 从SD/MMC卡中读一个块					Function: read a single block from SD/MMC card
    127          ** 输   入: INT32U blockaddr: 块地址				Input:    INT32U blockaddr: address of block
    128          			 INT8U *recbuf   : 接收缓冲区,长度512Bytes	 	  INT8U *recbuf   : the buffer of receive,length is 512Bytes
    129          ** 输    出: 0:   成功    >0:  错误码				Output:	  0:  right			>0:  error code
    130          *********************************************************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    131          INT8U SD_ReadBlock(INT32U blockaddr, INT8U *recbuf)
    132          {
   \                     SD_ReadBlock:
   \   00000000   70B5               PUSH        {R4-R6,LR}
   \   00000002   041C               MOV         R4,R0
   \   00000004   0D1C               MOV         R5,R1
    133          	INT8U ret;
    134          	SD_StartSD();									/* 向OS申请访问卡信号量 request semaphore acessed SD/MMC to OS */
   \   00000006   ........           BL          SD_StartSD
    135                  if (SD_ChkCard() != 1)							
   \   0000000A   ........           _BLF        SD_ChkCard,SD_ChkCard??rT
   \   0000000E   0128               CMP         R0,#+0x1
   \   00000010   03D0               BEQ         ??SD_ReadBlock_0
    136                  {
    137              	      SD_EndSD();	
   \   00000012   ........           BL          SD_EndSD
    138              	     return SD_ERR_NO_CARD;   					/* 卡没完全插入卡中 card is not inserted entirely */
   \   00000016   0120               MOV         R0,#+0x1
   \   00000018   1AE0               B           ??SD_ReadBlock_1
    139          	}
    140          		
    141          	if (blockaddr > sds.block_num)	
   \                     ??SD_ReadBlock_0:
   \   0000001A   ....               LDR         R0,??DataTable4    ;; sds + 4
   \   0000001C   0068               LDR         R0,[R0, #+0]
   \   0000001E   A042               CMP         R0,R4
   \   00000020   03D2               BCS         ??SD_ReadBlock_2
    142          	{
    143          		SD_EndSD();	
   \   00000022   ........           BL          SD_EndSD
    144          		return SD_ERR_OVER_CARDRANGE;				/* 操作超出卡容量范围 operate over the card range */
   \   00000026   0520               MOV         R0,#+0x5
   \   00000028   12E0               B           ??SD_ReadBlock_1
    145          	}
    146          	
    147           	ret = SD_ReadSingleBlock(blockaddr);			/* 读单块命令 read single blocks command */						
   \                     ??SD_ReadBlock_2:
   \   0000002A   201C               MOV         R0,R4
   \   0000002C   ........           _BLF        SD_ReadSingleBlock,SD_ReadSingleBlock??rT
   \   00000030   061C               MOV         R6,R0
    148           	if (ret != SD_NO_ERR)
   \   00000032   002E               CMP         R6,#+0
   \   00000034   03D0               BEQ         ??SD_ReadBlock_3
    149           	{
    150           		SD_EndSD();									
   \   00000036   ........           BL          SD_EndSD
    151           		return ret;
   \   0000003A   301C               MOV         R0,R6
   \   0000003C   08E0               B           ??SD_ReadBlock_1
    152           	}
    153           	
    154            	ret = SD_ReadBlockData(SD_BLOCKSIZE, recbuf);	/* 读出数据 read data from sd card */	
   \                     ??SD_ReadBlock_3:
   \   0000003E   291C               MOV         R1,R5
   \   00000040   8020               MOV         R0,#+0x80
   \   00000042   8000               LSL         R0,R0,#+0x2        ;; #+0x200
   \   00000044   ........           _BLF        SD_ReadBlockData,SD_ReadBlockData??rT
   \   00000048   061C               MOV         R6,R0
    155          	SD_EndSD();										/* 归还访问卡信号量 return semaphore acessed SD/MMC to OS */
   \   0000004A   ........           BL          SD_EndSD
    156          	
    157          	return ret;
   \   0000004E   301C               MOV         R0,R6
   \                     ??SD_ReadBlock_1:
   \   00000050   70BC               POP         {R4-R6}
   \   00000052   02BC               POP         {R1}
   \   00000054   0847               BX          R1                 ;; return
    158          }
    159          
    160          /********************************************************************************************************************
    161          ** 函数名称: INT8U SD_ReadMultiBlock()				Name:	  INT8U SD_ReadMultiBlock()
    162          ** 功能描述: 从SD/MMC卡中读多个块					Function: read multi blocks from SD/MMC card
    163          ** 输   入: INT32U blockaddr: 块地址				Input:	  INT32U blockaddr: address of block
    164          			 INT32U blocknum : 块数量						  INT32U blocknum : the numbers of block
    165          			 INT8U *recbuf   : 接收缓冲区,每块512字节		  INT8U *recbuf   : the buffer of receive,each block length is 512Bytes
    166          ** 输    出: 0:   成功    >0:  错误码				Output:	  0:  right			>0:  error code
    167          *********************************************************************************************************************/
    168          #if SD_ReadMultiBlock_EN
    169          INT8U SD_ReadMultiBlock(INT32U blockaddr, INT32U blocknum, INT8U *recbuf)
    170          {
    171              INT32U i;
    172              INT8U ret;
    173          
    174          	SD_StartSD();									/* 向OS申请访问卡信号量 request semaphore acessed SD/MMC to OS */
    175              if (SD_ChkCard() != 1)							
    176              {
    177              	SD_EndSD();	
    178              	return SD_ERR_NO_CARD;   					/* 卡没完全插入卡中 card is not inserted entirely */
    179          	}
    180          		
    181          	if ((blockaddr + blocknum) > sds.block_num)	
    182          	{
    183          		SD_EndSD();	
    184          		return SD_ERR_OVER_CARDRANGE;				/* 操作超出卡容量范围 operate over the card range */
    185          	}
    186          
    187          	ret = SD_ReadMultipleBlock(blockaddr);			/* 读多块命令 read multiple blocks command */
    188          	if (ret != SD_NO_ERR)
    189          	{	
    190          		SD_EndSD();									/* 归还访问卡信号量 return semaphore acessed SD/MMC to OS */						
    191          		return ret;
    192              }
    193          
    194              for (i = 0; i < blocknum; i++)
    195              {												/* 读出数据 read data from SD/MMC card */
    196              	ret = SD_ReadBlockData(SD_BLOCKSIZE, recbuf);
    197              	if (ret == SD_NO_ERR)
    198                 		recbuf = recbuf + SD_BLOCKSIZE;
    199              	else
    200              	{
    201              		SD_EndSD();
    202              		return ret;
    203              	}
    204              }
    205           	
    206           	ret = SD_StopTransmission();				    /* 结束数据传输 stop transmission operation */
    207           	
    208           	SD_EndSD();
    209          	return ret;
    210          }
    211          
    212          #endif
    213          
    214          /********************************************************************************************************************
    215          ** 函数名称: INT8U SD_WriteBlock()					Name:	  INT8U SD_WriteBlock()
    216          ** 功能描述: 向SD/MMC卡中写入一个块					Function: write a block to SD/MMC card
    217          ** 输   入: INT32U blockaddr: 块地址				Input: 	  INT32U blockaddr: address of block
    218          			 INT8U *sendbuf  : 发送缓冲区,长度512Bytes	  	  INT8U *sendbuf  : the buffer of send,length is 512Bytes
    219          ** 输    出: 0:   成功    >0:  错误码				Output:	  0:  right			>0:  error code
    220          *********************************************************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    221          INT8U SD_WriteBlock(INT32U blockaddr, INT8U *sendbuf)
    222          {
   \                     SD_WriteBlock:
   \   00000000   70B5               PUSH        {R4-R6,LR}
   \   00000002   81B0               SUB         SP,#+0x4
   \   00000004   041C               MOV         R4,R0
   \   00000006   0D1C               MOV         R5,R1
    223          	INT8U ret,tmp[2];
    224          	
    225          	SD_StartSD();												/* 向OS申请访问卡信号量 request semaphore acessed SD/MMC to OS */
   \   00000008   ........           BL          SD_StartSD
    226              if (SD_ChkCard() != 1)							
   \   0000000C   ........           _BLF        SD_ChkCard,SD_ChkCard??rT
   \   00000010   0128               CMP         R0,#+0x1
   \   00000012   03D0               BEQ         ??SD_WriteBlock_0
    227              {
    228              	SD_EndSD();	
   \   00000014   ........           BL          SD_EndSD
    229              	return SD_ERR_NO_CARD;   								/* 卡没完全插入卡中 card is not inserted entirely */
   \   00000018   0120               MOV         R0,#+0x1
   \   0000001A   3CE0               B           ??SD_WriteBlock_1
    230          	}	
    231          	
    232          	if (blockaddr > sds.block_num)	
   \                     ??SD_WriteBlock_0:
   \   0000001C   ....               LDR         R0,??DataTable4    ;; sds + 4
   \   0000001E   0068               LDR         R0,[R0, #+0]
   \   00000020   A042               CMP         R0,R4
   \   00000022   03D2               BCS         ??SD_WriteBlock_2
    233          	{
    234          		SD_EndSD();	
   \   00000024   ........           BL          SD_EndSD
    235          		return SD_ERR_OVER_CARDRANGE;							/* 操作超出卡容量范围 operate over the card range */
   \   00000028   0520               MOV         R0,#+0x5
   \   0000002A   34E0               B           ??SD_WriteBlock_1
    236          	}
    237          	
    238          	if (SD_ChkCardWP() == 1)
   \                     ??SD_WriteBlock_2:
   \   0000002C   ........           _BLF        SD_ChkCardWP,SD_ChkCardWP??rT

⌨️ 快捷键说明

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