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

📄 zhw.lst

📁 mega128的串口发送文件.可以发送0X55上位机使用串口调试工具就可以接收了.
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0143) 	
(0144) 	sds.timeout_read  = sds.timeout_read * 100 / 8;						/* 实际值为计算值的100倍 */
    0558 9020010E  LDS	R2,sds+3
    055A E684      LDI	R24,0x64
    055B 9D82      MUL	R24,R2
    055C 0180      MOVW	R16,R0
    055D E028      LDI	R18,0x8
    055E E030      LDI	R19,0
    055F 940E0C05  CALL	div16s
    0561 9300010E  STS	sds+3,R16
(0145) 	sds.timeout_write = sds.timeout_write * 100 / 8;
    0563 9020010F  LDS	R2,0x10F
    0565 E684      LDI	R24,0x64
    0566 9D82      MUL	R24,R2
    0567 0180      MOVW	R16,R0
    0568 E028      LDI	R18,0x8
    0569 E030      LDI	R19,0
    056A 940E0C05  CALL	div16s
    056C 9300010F  STS	0x10F,R16
(0146) 	
(0147) 	if (sds.timeout_read > READ_TIMEOUT_100MS)							/* 取计算值与默认值中的最小值 */
    056E E040      LDI	R20,0
    056F E05E      LDI	R21,0xE
    0570 E061      LDI	R22,1
    0571 E070      LDI	R23,0
    0572 9020010E  LDS	R2,sds+3
    0574 2433      CLR	R3
    0575 2444      CLR	R4
    0576 2455      CLR	R5
    0577 1542      CP	R20,R2
    0578 0553      CPC	R21,R3
    0579 0564      CPC	R22,R4
    057A 0575      CPC	R23,R5
    057B F43C      BGE	0x0583
(0148) 		sds.timeout_read = READ_TIMEOUT_100MS;
    057C E040      LDI	R20,0
    057D E05E      LDI	R21,0xE
    057E E061      LDI	R22,1
    057F E070      LDI	R23,0
    0580 011A      MOVW	R2,R20
    0581 9220010E  STS	sds+3,R2
(0149) 	
(0150) 	if (sds.timeout_write > WRITE_TIMEOUT_250MS)
    0583 E040      LDI	R20,0
    0584 EA53      LDI	R21,0xA3
    0585 E062      LDI	R22,2
    0586 E070      LDI	R23,0
    0587 9020010F  LDS	R2,0x10F
    0589 2433      CLR	R3
    058A 2444      CLR	R4
    058B 2455      CLR	R5
    058C 1542      CP	R20,R2
    058D 0553      CPC	R21,R3
    058E 0564      CPC	R22,R4
    058F 0575      CPC	R23,R5
    0590 F43C      BGE	0x0598
(0151) 		sds.timeout_write = WRITE_TIMEOUT_250MS;
    0591 E040      LDI	R20,0
    0592 EA53      LDI	R21,0xA3
    0593 E062      LDI	R22,2
    0594 E070      LDI	R23,0
    0595 011A      MOVW	R2,R20
    0596 9220010F  STS	0x10F,R2
(0152) 
(0153) 	sds.timeout_erase = sds.timeout_write;
    0598 9020010F  LDS	R2,0x10F
    059A 92200110  STS	0x110,R2
    059C 9624      ADIW	R28,4
    059D 940E0CF5  CALL	pop_gset5
    059F 9622      ADIW	R28,2
    05A0 9508      RET
_SD_ActiveInit:
  param                --> Y+13
  resp                 --> Y+8
  i                    --> Y+4
  ret                  --> R10
    05A1 940E0CFC  CALL	push_gset3
    05A3 9761      SBIW	R28,0x11
(0154) }
(0155) /*******************************************************************************************************************
(0156) ** 函数名称: INT8U SD_CalTimeout()				Name:	  INT8U SD_CalTimeout()
(0157) ** 功能描述: 计算读/写/擦超时时间				Function: get the information of SD card
(0158) ** 输   入: INT8U *cardtype: 卡类型接收缓冲 	Input:    INT8U *cardtype: card type receive buff
(0159) ** 输   出: 0:   正确    >0:   错误码		  	Output:	  0:  right		>0:  error code
(0160) ** 函数说明: 该命令不断重复发送到SD卡,直到响应R1的Bit0(Idle)位为0,表示SD卡内部初始化处理完成。
(0161) 		     当响应的Idle位为0时,SD卡就完全进入SPI模式了。当然重复发送命令CMD1是有次数限制的,
(0162) 		     最大次数为宏定义SD_IDLE_WAIT_MAX.
(0163) *******************************************************************************************************************/
(0164) uint8 SD_ActiveInit(void)
(0165) {
(0166) 	uint8 param[4] = {0,0,0,0},resp[5],ret;
    05A4 EA82      LDI	R24,0xA2
    05A5 E091      LDI	R25,1
    05A6 01FE      MOVW	R30,R28
    05A7 963D      ADIW	R30,0xD
    05A8 E004      LDI	R16,4
    05A9 E010      LDI	R17,0
    05AA 93FA      ST	R31,-Y
    05AB 93EA      ST	R30,-Y
    05AC 939A      ST	R25,-Y
    05AD 938A      ST	R24,-Y
    05AE 940E0D75  CALL	asgncblk
(0167) 	uint32 i = 0;
    05B0 E040      LDI	R20,0
    05B1 E050      LDI	R21,0
    05B2 E060      LDI	R22,0
    05B3 E070      LDI	R23,0
    05B4 01FE      MOVW	R30,R28
    05B5 8344      STD	Z+4,R20
    05B6 8355      STD	Z+5,R21
    05B7 8366      STD	Z+6,R22
    05B8 8377      STD	Z+7,R23
(0168) 
(0169)  	do 
(0170)     {													/* 发出CMD1, 查询卡的状态, send CMD1 to poll card status */
(0171)         ret = SD_SendCmd(CMD1, param, CMD1_R, resp);
    05B9 01CE      MOVW	R24,R28
    05BA 9608      ADIW	R24,0x8
    05BB 839B      STD	Y+3,R25
    05BC 838A      STD	Y+2,R24
    05BD E081      LDI	R24,1
    05BE 8388      STD	Y+0,R24
    05BF 019E      MOVW	R18,R28
    05C0 5F23      SUBI	R18,0xF3
    05C1 4F3F      SBCI	R19,0xFF
    05C2 E001      LDI	R16,1
    05C3 940E0676  CALL	_SD_SendCmd
    05C5 2EA0      MOV	R10,R16
(0172)         if (ret != SD_NO_ERR)
    05C6 2300      TST	R16
    05C7 F009      BEQ	0x05C9
(0173)        		return ret;
    05C8 C036      RJMP	0x05FF
(0174)   
(0175)         i++;
    05C9 E041      LDI	R20,1
    05CA E050      LDI	R21,0
    05CB E060      LDI	R22,0
    05CC E070      LDI	R23,0
    05CD 01FE      MOVW	R30,R28
    05CE 8024      LDD	R2,Z+4
    05CF 8035      LDD	R3,Z+5
    05D0 8046      LDD	R4,Z+6
    05D1 8057      LDD	R5,Z+7
    05D2 0E24      ADD	R2,R20
    05D3 1E35      ADC	R3,R21
    05D4 1E46      ADC	R4,R22
    05D5 1E57      ADC	R5,R23
    05D6 01FE      MOVW	R30,R28
    05D7 8224      STD	Z+4,R2
    05D8 8235      STD	Z+5,R3
    05D9 8246      STD	Z+6,R4
    05DA 8257      STD	Z+7,R5
(0176)     }
(0177) 	while (((resp[0] & MSK_IDLE) == MSK_IDLE) && (i < SD_IDLE_WAIT_MAX));
    05DB 8588      LDD	R24,Y+8
    05DC 7081      ANDI	R24,1
    05DD 3081      CPI	R24,1
    05DE F479      BNE	0x05EE
    05DF EE48      LDI	R20,0xE8
    05E0 E053      LDI	R21,3
    05E1 E060      LDI	R22,0
    05E2 E070      LDI	R23,0
    05E3 01FE      MOVW	R30,R28
    05E4 8024      LDD	R2,Z+4
    05E5 8035      LDD	R3,Z+5
    05E6 8046      LDD	R4,Z+6
    05E7 8057      LDD	R5,Z+7
    05E8 1624      CP	R2,R20
    05E9 0635      CPC	R3,R21
    05EA 0646      CPC	R4,R22
    05EB 0657      CPC	R5,R23
    05EC F408      BCC	0x05EE
    05ED CFCB      RJMP	0x05B9
(0178) 														/* 如果响应R1的最低位Idle位为1,则继续循环 */
(0179) 														
(0180)     if (i >= SD_IDLE_WAIT_MAX)
    05EE EE48      LDI	R20,0xE8
    05EF E053      LDI	R21,3
    05F0 E060      LDI	R22,0
    05F1 E070      LDI	R23,0
    05F2 01FE      MOVW	R30,R28
    05F3 8024      LDD	R2,Z+4
    05F4 8035      LDD	R3,Z+5
    05F5 8046      LDD	R4,Z+6
    05F6 8057      LDD	R5,Z+7
    05F7 1624      CP	R2,R20
    05F8 0635      CPC	R3,R21
    05F9 0646      CPC	R4,R22
    05FA 0657      CPC	R5,R23
    05FB F010      BCS	0x05FE
(0181)         return SD_ERR_TIMEOUT_WAITIDLE;					/* 超时,返回错误 time out,return error */
    05FC E304      LDI	R16,0x34
    05FD C001      RJMP	0x05FF
(0182) 
(0183) 	return SD_NO_ERR;
    05FE 2700      CLR	R16
    05FF 9661      ADIW	R28,0x11
    0600 940E0CEF  CALL	pop_gset3
    0602 9508      RET
_SD_GetCRC16:
  i                    --> R20
  result               --> R22
  len                  --> R10
  pSource              --> R12
    0603 940E0CFA  CALL	push_gset4
    0605 0159      MOVW	R10,R18
    0606 0168      MOVW	R12,R16
FILE: D:\new_sd\SD\SD\sdcrc.c
(0001) /*******************************************************************************************************
(0002) ** Descriptions:		sd 卡驱动软件包: SD卡相关工具函数 ---- CRC校验
(0003) ********************************************************************************************************/
(0004) #include    "D:\new_sd\define.h"
(0005) 
(0006) 
(0007) 
(0008) #if SD_CRC_EN
(0009) //X16 + X12 + X5 + 1 余式表
(0010) uint16 const CRCTable[256]={0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
(0011) 							0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
(0012) 							0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,
(0013) 							0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,
(0014) 							0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,
(0015) 							0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,
(0016) 							0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,
(0017) 							0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,
(0018) 							0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,
(0019) 							0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,
(0020) 							0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
(0021) 							0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,
(0022) 							0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,
(0023) 							0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,
(0024) 							0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,
(0025) 							0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,
(0026) 							0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,
(0027) 							0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,
(0028) 							0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,
(0029) 							0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,
(0030) 							0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,
(0031) 							0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
(0032) 							0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,
(0033) 							0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,
(0034) 							0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,
(0035) 							0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,
(0036) 							0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,
(0037) 							0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,
(0038) 							0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,
(0039) 							0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,
(0040) 							0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,
(0041) 							0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0
(0042) 						   };
(0043) 
(0044) /********************************************************************************************************************
(0045) ** 函数名称: INT8U SD_GetCRC16()					Name:	  INT8U SD_GetCRC16()
(0046) ** 功能描述: 计算CRC16								Function: calculate CRC16 
(0047) ** 输   入: INT8U *pSource: 数据					Input:    INT8U *pSource: data
(0048) 			 INT16U len    : 长度							  INT16U len    : len
(0049) ** 输   出: CRC16码								Output:	  CRC16 code
(0050) ********************************************************************************************************************/
(0051) uint16 SD_GetCRC16(uint8 *pSource, uint16 len)
(0052) {
(0053) 	uint16 i;
(0054) 	uint16 result = 0;
    0607 2766      CLR	R22
    0608 2777      CLR	R23
(0055) 
(0056) 	for (i = 0; i < len; i++)
    0609 2744      CLR	R20
    060A 2755      CLR	R21
    060B C01D      RJMP	0x0629
(0057) 	    result = (result << 8) ^ (uint16)CRCTable[(result >> 8) ^ *pSource++];
    060C 01F6      MOVW	R30,R12
    060D 9021      LD	R2,Z+
    060E 016F      MOVW	R12,R30
    060F 2433      CLR	R3
    0610 019B      MOVW	R18,R22
    0611 2F23      MOV	R18,R19
    0612 2733      CLR	R19
    0613 2522      EOR	R18,R2
    0614 2533      EOR	R19,R3
    0615 E002      LDI	R16,2
    0616 E010      LDI	R17,0
    0617 940E0CAC  CALL	empy16s
    0619 01F8      MOVW	R30,R16
    061A EA86      LDI	R24,0xA6
    061B E091      LDI	R25,1
    061C 0FE8      ADD	R30,R24
    061D 1FF9      ADC	R31,R25
    061E 9005      LPM	R0,Z+
    061F 9014      LPM	R1,0(Z)
    0620 01F0      MOVW	R30,R0
    0621 011B      MOVW	R2,R22
    0622 2C32      MOV	R3,R2
    0623 2422      CLR	R2
    0624 262E      EOR	R2,R30
    0625 263F      EOR	R3,R31
    0626 01B1      MOVW	R22,R2
    0627 5F4F      SUBI	R20,0xFF
    0628 4F5F      SBCI	R21,0xFF
    0629 154A      CP	R20,R10
    062A 055B      CPC	R21,R11
    062B F300      BCS	0x060C
(0058) 	
(0059) 	return result;
    062C 018B      MOVW	R16,R22
    062D 940E0CF2  CALL	pop_gset4
    062F 9508      RET
_SD_GetCmdByte6:
  array                --> Y+0
  i                    --> R20
  reg                  --> R22
  j                    --> R12
  param                --> R10
  cmd                  --> R20
    0630 940E0CF8  CALL	push_gset5
    0632 0159      MOVW	R10,R18
    0633 2F40      MOV	R20,R16
    0634 9725      SBIW	R28,5
(0060) }
(0061) 
(0062) /*******************************************************************************************************************
(0063) ** 函数名称: INT8U SD_GetCmdByte6()					Name:	  INT8U SD_GetCmdByte6()
(0064) ** 功能描述: 获取SD卡命令的CRC7						Function: get the CRC7 of the command of SD card
(0065) ** 输   入: INT8U cmd   : 命令						Input:    INT8U cmd   :	command
(0066) 			 INT8U *param: 命令的参数,长度为4字节			  INT8U *param: the param of command,length is 4 bytes
(0067) ** 输   出: CRC7码									Output:	  CRC7 code
(0068) ********************************************************************************************************************/
(0069) uint8 SD_GetCmdByte6(uint8 cmd, uint8 *param)
(0070) {
(0071) 	uint8 i, j;
(0072) 	uint8 reg = 0;
    0635 2766      CLR	R22
(0073) 	uint8 array[5];
(0074) 	
(0075) 	array[0] = cmd;
    0636 8348      STD	Y+0,R20
(0076) 	for (i = 1; i < 5; i++)						/* 将参数的顺序重新排列 */
    0637 E041      LDI	R20,1
    0638 C010      RJMP	0x0649
(0077) 		array[i] = param[4 - i];
    0639 2E24      MOV	R2,R20
    063A 2433      CLR	R3
    063B E0E4      LDI	R30,4
    063C E0F0      LDI	R31,0
    063D 19E2      SUB	R30,R2
    063E 09F3      SBC	R31,R3
    063F 0DEA      ADD	R30,R10
    0640 1DFB      ADC	R31,R11
    0641 8020      LDD	R2,Z+0
    0642 01CE      MOVW	R24,R28
    0643 2FE4      MOV	R30,R20
    0644 27FF      CLR	R31
    0645 0FE8      ADD	R30,R24
    0646 1FF9      ADC

⌨️ 快捷键说明

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