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

📄 mmcmain.c

📁 KEIL单片机有关知识,对想学此系列单偏机的朋友应该有用的哦
💻 C
字号:
/*---------------------------------------------------------------------------------------------
* Name: MMCMAIN.C
* Purpose: SD卡主程序
* Version: V1.00
*--------------------------------------------------------------------------------------------*/
#include "config.h"
#include "spi_mmc.h"
#include "mmcmain.h"

uint32 BlockNum;

/*延时函数*/
void Delay(uint32 dly)
{
	uint32  i;

   	for(; dly>0; dly--) 
      	for(i=0; i<50000; i++);
}

/*蜂鸣器函数*/
void Beep(uint32 dly)
{
	PINSEL0=0x0;
	IO0DIR=BEEP;
	IO0SET=BEEP;
	Delay(dly-2);
	IO0CLR=BEEP;
	Delay(2);
}

/* 主函数 */
int main (void)
{
	uint32 i;
	uint8 state[1],CSD[16],MMCWRData[MMC_DATA_SIZE], MMCRDData[MMC_DATA_SIZE];
	
	BlockNum=3000;
	PINSEL1 = 0x40004000;	   					//31:30->01 UP_LED 15:14->01 Vusb
	IO1DIR = LED_MSK; 							//LED输出位设置
	IO1SET = LED_MSK; 							//LED熄灭
	
	SPI_Init(); 								//初始化SPI
	
	for(i=0;i<MMC_DATA_SIZE;i++)				//生成写入的数据
	{
		MMCWRData[i] = 0xBC;
	}
	
	IO1CLR = LED_CFG;							//LED7
	
	if ( mmc_init() != 0 )	   					//初始化SD卡
	{											//初始化SD卡失败
		IO0SET = SPI_SEL; 						//SSEL CS引脚置高
		Beep(20);
		Delay(10);
		Beep(10);
		Delay(10);
		Beep(20);
		Delay(10);
		IO1SET = LED_MSK;
		IO1CLR = LED_IE|LED_CFG;

		while ( 1 ); 							//结束程序
	}
												//块操作
		IO1SET = LED_MSK;
		IO1CLR = LED_WR|LED_CFG;				//写操作
		do
		{
			mmc_read_csd(CSD);
			mmc_read_state(state);			
			mmc_read_block(BlockNum,MMCRDData);
			mmc_read_state(state);		
			mmc_write_block(BlockNum,MMCWRData);
			mmc_read_state(state);
			mmc_read_block(BlockNum,MMCRDData);
			mmc_read_state(state);
			BlockNum++;
		}while(1);
 /*			mmc_read_block(BlockNum); 
		if ( mmc_write_block(BlockNum,MMCWRData) == 0 )
		{
			IO1SET = LED_MSK;
			IO1CLR = LED_RD|LED_CFG;			//读操作
			mmc_read_block(BlockNum);
		}
		else									//写操作失败
		{
			IO0SET = SPI_SEL; 					//SSEL CS引脚置高
			IO1SET = LED_MSK;
			IO1CLR = LED_WE|LED_CFG;
			Beep(10);
			Beep(10);							//二声报警
			while ( 1 ); 						//结束程序
		}

		for ( i = 0; i < MMC_DATA_SIZE; i++ ) 	//校验
		{
			if ( MMCRDData[i] != MMCWRData[i] )
			{									//校验发生错误
				IO1SET = SPI_SEL; 				//SSEL CS引脚置高
				IO1SET = LED_MSK;
				IO1CLR = LED_JE|LED_CFG;
				Beep(200);						
				while ( 1 ); 					//结束程序
			}
		}
*/		for ( i = 0; i < MMC_DATA_SIZE; i++ ) 	//清空读缓冲区
			MMCRDData[i] = 0x00;
                                        
	Beep(50);									//操作完成
	IO1SET = LED_MSK;
	IO1CLR = LED_DONE|LED_CFG;
	
	while (1); 									//程序结束
}

⌨️ 快捷键说明

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