www.pudn.com > sdsource.rar > main.c


/****************************************Copyright (c)************************************************** 
**                               Guangzou ZLG-MCU Development Co.,LTD. 
**                                      graduate school 
**                                 http://www.zlgmcu.com 
** 
**--------------File Info------------------------------------------------------------------------------- 
** File name:			main.c 
** Last modified Date:  2004-09-16 
** Last Version:		1.0 
** Descriptions:		The main() function example template 
** 
**------------------------------------------------------------------------------------------------------ 
** Created by:			Chenmingji 
** Created date:		2004-09-16 
** Version:				1.0 
** Descriptions:		The original version 
** 
**------------------------------------------------------------------------------------------------------ 
** Modified by: 
** Modified date: 
** Version: 
** Descriptions: 
** 
********************************************************************************************************/ 
#include "config.h" 
#include "string.h" 
#include "uart.h"							/* 串口操作相关函数 */ 
#include "sdconfig.h" 
#include "sddriver.h"						/* SD卡操作的相关函数 */ 
 
#define CMD_SD_INIT		   0x00				/* SD卡初始化卡命令  */ 
#define CMD_SD_READ    	   0x01				/* SD卡读命令        */ 
#define CMD_SD_WRITE   	   0x02				/* SD卡写命令        */ 
#define CMD_SD_ERASE	          0x03				/* SD卡擦除命令      */ 
 
#define CMD_DATA_TRANS	   0x04				/* 将sd_buf中的数据发送到PC机 */ 
#define CMD_DATA_RECV	   0x05				/* 接收来自串口的数据,并放入sd_buf中 */ 
  
/* SD卡读写缓冲区,比SD卡一个块大8字节 */   
uint8 sd_buf[520]; 
 
int main (void) 
{ 
	uint32 bufaddr;														 
	uint32 blockaddr; 
	uint32 blocknum; 
	 
	Uart_Initialize(115200);												/* 初始化串口 */ 
	 
    while(1)                            							 		/* 等待串口中断 */ 
    {  
    	if(rcv_new == 1)													/* 如果串口收到数据 */ 
    	{  
    		switch(rcv_buf[0]) 
    		{ 
    			case CMD_SD_INIT: rcv_buf[1] = SD_Initialize();				/* 初始化SD卡 */ 
    			break;  
    		 
    			case CMD_SD_READ: 
    				 blockaddr = (rcv_buf[1] << 24) + (rcv_buf[2] << 16) +	/* 计算块地址 */ 
    							 (rcv_buf[3] << 8) + rcv_buf[4]; 
    				 rcv_buf[1] = SD_ReadBlock(blockaddr, sd_buf);		 	/* SD卡单块读 */ 			 
    			break; 
    		 	    		 
    			case CMD_SD_WRITE:	  
    				 blockaddr = (rcv_buf[1] << 24) + (rcv_buf[2] << 16) +  
    							 (rcv_buf[3] << 8) + rcv_buf[4]; 
    				 rcv_buf[1] = SD_WriteBlock(blockaddr, sd_buf);			/* SD 卡单块写 */ 
    			break; 
    			 
    			case CMD_SD_ERASE:	  
    				 blockaddr = (rcv_buf[1] << 24) + (rcv_buf[2] << 16) +  
    							 (rcv_buf[3] << 8) + rcv_buf[4]; 
    				 blocknum  = (rcv_buf[5] << 16) + (rcv_buf[6] << 8) + 
    				 			 (rcv_buf[7]); 
    				 rcv_buf[1] = SD_EraseBlock(blockaddr, blocknum);		/* SD 卡擦除 */ 
    			break; 
   			 
    			case CMD_DATA_RECV:	  
    				 bufaddr = (rcv_buf[1] << 8) + rcv_buf[2];				/* 计算缓冲区地址 */ 
    				 memcpy(sd_buf + bufaddr, &rcv_buf[3], 5);				/* 收到数据放入sd_buf */ 
    			break; 
    			 
    			case CMD_DATA_TRANS:  
    				 bufaddr = (rcv_buf[1] << 8) + rcv_buf[2];				/* 计算缓冲区地址 */  
    				 memcpy(&rcv_buf[1], sd_buf + bufaddr, 7);				/* sd_buf数据放入rcv_buf */ 
    			break;  							 
    	 
    			default: break; 
    		} 
    		 
    	    UART0_SendBuf();												/* 发送 rcv_buf */  		  		 
        	rcv_new = 0;  													/* 接收标志清0  */ 
     	} 
	} 
    
	return 0; 
} 
/********************************************************************************************************* 
**                            End Of File 
********************************************************************************************************/