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

📄 main.c

📁 LPC2210以SPI方式读写SD/MMC卡的源码
💻 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"

#define TASK_STK_SIZE      64

#define CMD_SD_INIT		   0x00				/* 卡初始化卡命令  */
#define CMD_SD_READ    	   0x01				/* 卡读命令        */
#define CMD_SD_WRITE   	   0x02				/* 卡写命令        */
#define CMD_SD_ERASE	   0x03				/* 卡擦除命令      */

#define CMD_DATA_TRANS	   0x04				/* 将sd_buf中的数据发送到PC机 */
#define CMD_DATA_RECV	   0x05				/* 接收来自串口的数据,并放入sd_buf中 */

/* SD/MMC卡读写缓冲区,比SDMMC卡一个块大8字节 */  
uint8 sd_buf[520];


OS_STK   TaskStk[TASK_STK_SIZE];			/* 任务堆栈 */
OS_STK   TaskCardStk[TASK_STK_SIZE];		/* 卡操作任务堆栈 */
OS_EVENT *Uart0ReviceMbox;					/* 串口接收数据邮箱 */


void  TaskCard(void *data);
void  TaskUart0Revice(void *pdata);

/*********************************************************************************************************
** 函数名称: main
** 功能描述: c语言的主函数,由它启动多任务环境
********************************************************************************************************/
int main (void)
{
    OSInit();

    OSTaskCreate(TaskCard, (void *)0, &TaskCardStk[TASK_STK_SIZE - 1], 0);
    OSStart();
    return 0;
}

/*********************************************************************************************************
** 函数名称: TaskStart
** 功能描述: μCOS-II的第一个任务,通常由它初始化目标板和建立其它任务
********************************************************************************************************/
        void  TaskCard(void *pdata)
{
    uint8 *pRec;
    uint8 err;
	uint32 bufaddr,blockaddr,blocknum;
	
    pdata = pdata;                                                     /* 避免编译警告 */

    Uart0ReviceMbox = OSMboxCreate(NULL);                              /* 建立邮箱 */
    if (Uart0ReviceMbox == NULL)
        while (1);

    OSTaskCreate(TaskUart0Revice, (void *)0, 
                 &TaskStk[TASK_STK_SIZE - 1], 10);                     /* 创建Uart0接收任务 */

    TargetInit();                                                      /* 目标板初始化 */
    for (;;)
    {
        pRec = (uint8 *)OSMboxPend(Uart0ReviceMbox, 0, &err);          /* 接收数据 */
        switch(pRec[0])
    	{
    		case CMD_SD_INIT: pRec[1] = SD_Initialize();			   /* 初始化SD卡 */
    		break; 
    		
    		case CMD_SD_READ:
    			 blockaddr = (pRec[1] << 24) + (pRec[2] << 16) +	   /* 计算块地址 */
    						 (pRec[3] << 8) + pRec[4];
    			 pRec[1] = SD_ReadBlock(blockaddr, sd_buf);		 	   /* SD卡单块读 */ 			
    		break;
    		 	    		
    		case CMD_SD_WRITE:	 
    			 blockaddr = (pRec[1] << 24) + (pRec[2] << 16) + 
    						 (pRec[3] << 8) + pRec[4];
    			 pRec[1] = SD_WriteBlock(blockaddr, sd_buf);		   /* SD 卡单块写 */
    		break;
    			
    		case CMD_SD_ERASE:	 
    			 blockaddr = (pRec[1] << 24) + (pRec[2] << 16) + 
    						 (pRec[3] << 8) + pRec[4];				   /* 擦卡起始地址 */
    			 blocknum  = (pRec[5] << 16) + (pRec[6] << 8) +	
    				 		 (pRec[7]);								   /* 块数 */
    			 pRec[1] = SD_EraseBlock(blockaddr, blocknum);		   /* 擦除操作 */
    		break;
   			
    		case CMD_DATA_RECV:	 
    			 bufaddr = (pRec[1] << 8) + pRec[2];				   /* 计算缓冲区地址 */
    			 memcpy(sd_buf + bufaddr, &pRec[3], 5);				   /* 收到数据放入pRec */
    		break;
    			
    		case CMD_DATA_TRANS: 
    			 bufaddr = (pRec[1] << 8) + pRec[2];				   /* 计算缓冲区地址 */ 
    			 memcpy(&pRec[1], sd_buf + bufaddr, 7);				   /* sd_buf数据放入pRec */
    		break;  							
    	
    		default: break;
    	}
    	
    	UART0Write(pRec, 8);		/* 发送响应帧 */
    }
}

/*********************************************************************************************************
** 函数名称: TaskUart0Revice
** 功能描述: μCOS-II的任务
********************************************************************************************************/
        void  TaskUart0Revice(void *pdata)
{
    uint8 Buf[8],i;
    
    pdata = pdata;                                           /* 避免编译警告 */

    for (;;)
    {
        Buf[0] = UART0Getch();                               /* 接收数据头 */    
        for (i = 1; i < 8; i++)
            Buf[i] = UART0Getch();
        
        OSMboxPost(Uart0ReviceMbox, (void *)Buf);
    }
}
   
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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