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

📄 sdmmc.s

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 S
📖 第 1 页 / 共 4 页
字号:
; 	Com_putstring(tmp,4,&RTbuf_UART0);
; */
;     #if !(HW_SPI_Mode) 
;     SPCR=spimode; 
	out 0xd,R22
	.dbline 233
;     SPSR=spispeeddub;
	out 0xe,R20
	.dbline 235
; 	#endif
;     MMC_Disable();
	sbi 0x18,4
	.dbline 235
	.dbline -2
L29:
	adiw R28,20
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l tmp 16 A[4:4]c
	.dbsym r spispeeddub 20 c
	.dbsym r spimode 22 c
	.dbsym l buffer 0 A[16:16]c
	.dbsym r vinf 10 pS[MMC_VOLUME_INFO]
	.dbend
	.dbfunc e Write_Command_MMC _Write_Command_MMC fc
;              i -> R20
;          retry -> R22
;            tmp -> R10
;            CMD -> R12,R13
	.even
_Write_Command_MMC::
	xcall push_gset4
	movw R12,R16
	.dbline -1
	.dbline 243
; }
; 
; //****************************************************************************
; //Send a Command to MMC/SD-Card
; //Return: the second byte of response register of MMC/SD-Card
; uint8 Write_Command_MMC(uint8 *CMD)
; //****************************************************************************
; {
	.dbline 245
;    uint8 tmp;
;    uint8 retry=0;
	clr R22
	.dbline 249
;    uint8 i;
; 
;    //set MMC_Chip_Select to high (MMC/SD-Card disable) 
;    MMC_Disable();
	sbi 0x18,4
	.dbline 249
	.dbline 251
;    //send 8 Clock Impulse
;    Write_Byte_MMC(0xFF);
	ldi R16,255
	xcall _Write_Byte_MMC
	.dbline 253
;    //set MMC_Chip_Select to low (MMC/SD-Card active)
;    MMC_Enable();
	cbi 0x18,4
	.dbline 253
	.dbline 256
; 
;    //send 6 Byte Command to MMC/SD-Card
;    for (i=0;i<0x06;i++) 
	clr R20
	xjmp L44
L41:
	.dbline 257
	.dbline 258
	movw R30,R12
	ld R16,Z+
	movw R12,R30
	xcall _Write_Byte_MMC
	.dbline 259
L42:
	.dbline 256
	inc R20
L44:
	.dbline 256
	cpi R20,6
	brlo L41
	.dbline 262
;    { 
;       Write_Byte_MMC(*CMD++);
;    }
;    
;    //get 16 bit response
;    Read_Byte_MMC(); //read the first byte,ignore it. 
	xcall _Read_Byte_MMC
L45:
	.dbline 264
;    do 
;    {  //Only last 8 bit is used here.Read it out. 
	.dbline 265
;       tmp = Read_Byte_MMC();
	xcall _Read_Byte_MMC
	mov R10,R16
	.dbline 266
;       retry++;
	inc R22
	.dbline 267
;    }
L46:
	.dbline 268
;    while((tmp==0xff)&&(retry<100)); 
	mov R24,R10
	cpi R24,255
	brne L48
	cpi R22,100
	brlo L45
L48:
	.dbline 269
;    return(tmp);
	mov R16,R10
	.dbline -2
L40:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r retry 22 c
	.dbsym r tmp 10 c
	.dbsym r CMD 12 pc
	.dbend
	.dbfunc e Read_Byte_MMC _Read_Byte_MMC fc
;              i -> R22
;           temp -> R20
	.even
_Read_Byte_MMC::
	xcall push_gset2
	.dbline -1
	.dbline 276
; }
; 
; //****************************************************************************
; //Routine for reading a byte from MMC/SD-Card
; uint8 Read_Byte_MMC(void)
; //****************************************************************************
; { 
	.dbline 277
;    uint8 temp=0;
	clr R20
	.dbline 279
;    uint8 i;
;    MMC_PORT&=~(1<<SPI_Busy);
	cbi 0x18,0
	.dbline 281
;    //Software SPI
;    if(Init_Flag)
	lds R2,_Init_Flag
	tst R2
	breq L50
	.dbline 282
;       {
	.dbline 283
;    	  for (i=0; i<8; i++) //MSB First
	clr R22
	xjmp L55
L52:
	.dbline 284
;          {
	.dbline 285
;       	 MMC_PORT&=~(1<<SPI_CLK); //Clock Impuls (Low)
	cbi 0x18,7
	.dbline 286
;       	 if(Init_Flag) 
	lds R2,_Init_Flag
	tst R2
	breq L56
	.dbline 287
; 	         delay_us(200);
	ldi R16,200
	xcall _delay_us
L56:
	.dbline 288
;       	 temp = (temp << 1) + ((MMC_PIN&(1<<SPI_MISO))>>SPI_MISO); //read mmc data out pin 
	in R24,0x16
	andi R24,64
	lsr R24
	lsr R24
	lsr R24
	lsr R24
	lsr R24
	lsr R24
	mov R2,R20
	lsl R2
	add R2,R24
	mov R20,R2
	.dbline 289
;       	 MMC_PORT|=(1<<SPI_CLK); //set Clock Impuls High
	sbi 0x18,7
	.dbline 290
;       	 if(Init_Flag) 
	lds R2,_Init_Flag
	tst R2
	breq L58
	.dbline 291
; 	         delay_us(200);	
	ldi R16,200
	xcall _delay_us
L58:
	.dbline 292
L53:
	.dbline 283
	inc R22
L55:
	.dbline 283
	cpi R22,8
	brlo L52
	.dbline 294
;    	     }
;    
;       }
	xjmp L51
L50:
	.dbline 296
;    else
;       {
	.dbline 298
; 	  #if !(HW_SPI_Mode) 
; 	  SPDR=0xFF; 
	ldi R24,255
	out 0xf,R24
L60:
	.dbline 299
	.dbline 299
L61:
	.dbline 299
;       while(!(SPSR & 0x80)){}; 
	sbis 0xe,7
	rjmp L60
	.dbline 299
	.dbline 300
; 	  temp=SPDR;
	in R20,0xf
	.dbline 304
; 	  #else
;    	  Spi_SendReceive(&temp,1,1);
; 	  #endif
;        }
L51:
	.dbline 305
;    MMC_PORT|=(1<<SPI_Busy);
	sbi 0x18,0
	.dbline 306
;    return (temp);
	mov R16,R20
	.dbline -2
L49:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 22 c
	.dbsym r temp 20 c
	.dbend
	.dbfunc e Write_Byte_MMC _Write_Byte_MMC fV
;              i -> R20
;          value -> R22
	.even
_Write_Byte_MMC::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 313
; }
; 
; //****************************************************************************
; //Routine for sending a byte to MMC/SD-Card
; void Write_Byte_MMC(uint8 value)
; //****************************************************************************
; { 
	.dbline 315
;    uint8 i;
;    MMC_PORT&=~(1<<SPI_Busy); 
	cbi 0x18,0
	.dbline 317
;    //Software SPI
;    if(Init_Flag){
	lds R2,_Init_Flag
	tst R2
	breq L64
	.dbline 317
	.dbline 318
;    for (i=0; i<8; i++) 
	clr R20
	xjmp L69
L66:
	.dbline 319
;    {  //write a byte
	.dbline 320
;       if (((value >> (7-i)) & 0x01)==0x01)
	ldi R17,7
	sub R17,R20
	mov R16,R22
	xcall lsr8
	mov R24,R16
	andi R24,1
	cpi R24,1
	brne L70
	.dbline 321
; 	       MMC_PORT|=(1<<SPI_MOSI); //Send bit by bit(MSB First)
	sbi 0x18,5
	xjmp L71
L70:
	.dbline 323
;       else 
; 	       MMC_PORT&=~(1<<SPI_MOSI);
	cbi 0x18,5
L71:
	.dbline 324
;       MMC_PORT&=~(1<<SPI_CLK); //set Clock Impuls low
	cbi 0x18,7
	.dbline 325
;       if(Init_Flag) 
	lds R2,_Init_Flag
	tst R2
	breq L72
	.dbline 326
; 	          delay_us(200); 
	ldi R16,200
	xcall _delay_us
L72:
	.dbline 327
;       MMC_PORT|=(1<<SPI_CLK); //set Clock Impuls High
	sbi 0x18,7
	.dbline 328
;       if(Init_Flag) 
	lds R2,_Init_Flag
	tst R2
	breq L74
	.dbline 329
; 	          delay_us(200);     
	ldi R16,200
	xcall _delay_us
L74:
	.dbline 330
L67:
	.dbline 318
	inc R20
L69:
	.dbline 318
	cpi R20,8
	brlo L66
	.dbline 331
;    }//write a byte
;    MMC_PORT|=(1<<SPI_MOSI);	//set Output High 
	sbi 0x18,5
	.dbline 333
; 
;    }
	xjmp L65
L64:
	.dbline 335
;    else
;    	   {
	.dbline 337
; 	   #if !(HW_SPI_Mode) 
; 	   SPDR=value;
	out 0xf,R22
L76:
	.dbline 338
	.dbline 338
L77:
	.dbline 338
; 	   while(!(SPSR & 0x80)){}; 
	sbis 0xe,7
	rjmp L76
	.dbline 338
	.dbline 342
; 	   #else
; 	   Spi_SendReceive(&value,1,0);
; 	   #endif
; 	   }
L65:
	.dbline 343
;    MMC_PORT|=(1<<SPI_Busy);
	sbi 0x18,0
	.dbline -2
L63:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r value 22 c
	.dbend
	.area lit(rom, con, rel)
L80:
	.byte 'X,0
	.byte 0,0
	.byte 0,255
	.area text(rom, con, rel)
	.dbfile D:\桌面\mp3\sdmmc\sdmmc.c
	.dbfunc e MMC_Write_Sector _MMC_Write_Sector fc
;    spispeeddub -> y+7
;        spimode -> y+6
;            CMD -> y+0
;          retry -> R14
;            tmp -> R12
;              i -> R10,R11
;         Buffer -> y+22
;           addr -> y+18
	.even
_MMC_Write_Sector::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,8
	.dbline -1
	.dbline 351
; }
; 
; //****************************************************************************
; //Routine for writing a Block(512Byte) to MMC/SD-Card
; //Return 0 if sector writing is completed.
; uint8 MMC_Write_Sector(uint32 addr,uint8 *Buffer)
; //****************************************************************************
; {  
	.dbline 355
;    uint8 tmp,retry;
;    uint16 i;
;    //Command 24 is a writing blocks command for MMC/SD-Card.
;    uint8 CMD[] = {0x58,0x00,0x00,0x00,0x00,0xFF}; 
	ldi R24,<L80
	ldi R25,>L80
	movw R30,R28
	ldi R16,6
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	xcall asgncblk
	.dbline 358
;    #if !(HW_SPI_Mode) 
;    uint8 spimode,spispeeddub;
;    spimode=SPCR; 
	in R2,0xd
	std y+6,R2
	.dbline 359
;    spispeeddub=SPSR;
	in R2,0xe
	std y+7,R2
	.dbline 360
;    SPCR&=~(1<<SPIE);
	cbi 0xd,7
	.dbline 363
;    #endif
; //   CLI(); //clear all interrupt.
;    addr = addr << 9; //addr = addr * 512
	ldi R24,9
	ldi R25,0
	movw R30,R28
	ldd R2,z+18
	ldd R3,z+19
	ldd R4,z+20
	ldd R5,z+21
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R30,R28
	std z+18,R16
	std z+19,R17
	std z+20,R18
	std z+21,R19
	.dbline 365
; 	
;    CMD[1] = ((addr & 0xFF000000) >>24 );
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,255
	movw R30,R28
	ldd R2,z+18
	ldd R3,z+19
	ldd R4,z+20
	ldd R5,z+21
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	ldi R24,24
	ldi R25,0
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsr32
	std y+1,R16
	.dbline 366
;    CMD[2] = ((addr & 0x00FF0000) >>16 );
	ldi R20,0
	ldi R21,0
	ldi R22,255
	ldi R23,0
	movw R30,R28
	ldd R2,z+18
	ldd R3,z+19
	ldd R4,z+20
	ldd R5,z+21
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	movw R2,R4
	clr R4
	clr R5
	std y+2,R2
	.dbline 367
;    CMD[3] = ((addr & 0x0000FF00) >>8 );
	ldi R20,0
	ldi R21,255
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+18
	ldd R3,z+19
	ldd R4,z+20
	ldd R5,z+21
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	ldi R24,8
	ldi R25,0
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsr32
	std y+3,R16
	.dbline 370
; 
;    //Send Command CMD24 to MMC/SD-Card (Write 1 Block/512 Bytes)
;    retry=0;
	clr R14
L84:
	.dbline 372
;    do
;    {  //Retry 100 times to send command.
	.dbline 373
;       tmp=Write_Command_MMC(CMD);
	movw R16,R28
	xcall _Write_Command_MMC
	mov R12,R16
	.dbline 374
;       retry++;
	inc R14
	.dbline 375
;       if(retry==100) 
	mov R24,R14
	cpi R24,100
	brne L87
	.dbline 376
;       { 
	.dbline 378
; 	     #if !(HW_SPI_Mode) 
;    		 SPCR=spimode; 
	ldd R0,y+6
	out 0xd,R0
	.dbline 379
;   		 SPSR=spispeeddub;
	ldd R0,y+7
	out 0xe,R0
	.dbline 381
;    		 #endif
;         return(FALSE); //send commamd Error!
	clr R16
	xjmp L79
L87:
	.dbline 383
;       }
;    }
L85:
	.dbline 384
;    while(tmp!=0); 
	tst R12
	brne L84
	.dbline 387
;    
;    //Before writing,send 100 clock to MMC/SD-Card
;    for (i=0;i<100;i++)
	clr R10
	clr R11
	xjmp L92
L89:
	.dbline 388
	.dbline 389
	xcall _Read_Byte_MMC
	.dbline 390
L90:
	.dbline 387
	movw R24,R10
	adiw R24,1
	movw R10,R24
L92:
	.dbline 387
	movw R24,R10

⌨️ 快捷键说明

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