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

📄 interface.c

📁 Atmega64单片机程序(完整工程)
💻 C
字号:
#define   IN_FLOPPY 

#include "SYS_Config.h" 
#include "FS_Config.h" 
#include "SD_Drive.h" 
#include "USART1.h"
#include "fat.h" 

extern INT8U Data_Buf[SD_BLOCKSIZE];//在main函数中定义

INT32U GetVolumeFirstSect(INT8U Device)
{
    INT8U  *buffer;
    INT32U RelaStaSect ;
    
	Device=Device;
    buffer=Data_Buf;
    /* 从SD卡中读一个块  */
    //INT8U  SD_ReadBlock(INT32U blockaddr,INT8U *recbuf);
    if( SD_ReadBlock(0x00,buffer)!=0 )
        return DISK_INIT_NOT_OK ; 
    
    if( (buffer[510]==0x55)&&(buffer[511]==0xAA) )
    {
        if( ( (buffer[0]==0xEB)&&(buffer[2]==0x90) ) || (buffer[0]==0xE9) )
            RelaStaSect=0 ;
        else 
        {
            //RelaStaSect=(INT32U)(buffer[454])+(INT32U)(buffer[455])<<8+(INT32U)(buffer[456])<<16+(INT32U)(buffer[457])<<24;//为何不行???
			//RelaStaSect=(INT32U)(buffer[454])+(INT32U)(buffer[455])*0x100+(INT32U)(buffer[456])*0x10000+(INT32U)(buffer[457])*0x1000000;
		    RelaStaSect=(INT32U)(buffer[454])+
			            (INT32U)(buffer[455])*0x100+
			            (INT32U)(buffer[456])*0x10000+
			            (INT32U)(buffer[457])*0x1000000;
		
		}
    }
    return RelaStaSect ;
}

/*********************************************************************************************************
** 函数名称: SDCommand
** 功能描述: 底层驱动程序与上层的接口程序
** 输   入: DISK_INIT:驱动程序初始化
**           DISK_CLOSE:关闭驱动器(移除驱动程序)
**           DISK_CREATE_BOOT_SECTOR:重建引导扇区
**           DISK_READ_SECTOR:读扇区
**           DISK_WRITE_SECTOR:写扇区

** 输   出: DISK_READ_OK:读扇区完成
**           DISK_READ_NOT_OK:读扇区失败
**           DISK_WRITE_OK:写扇区完成
**           DISK_WRITE_NOT_OK:写扇区失败
**           DISK_INIT_OK:初始化完成
**           DISK_INIT_NOT_OK:初始化失败
**           BAD_DISK_COMMAND:无效的命令
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
INT16U SD_Command(INT8U Command,void *Parameter)
{
    INT16U rt ;
    Disk_RW_Parameter *Dp ;
    Disk_Info         *DiskInfo ;
    
    Dp=(Disk_RW_Parameter*)Parameter ;
    
    switch(Command)
    {
        case DISK_INIT :/*设备初始化*/
             rt=DISK_INIT_NOT_OK ;
             {
                DiskInfo=GetEmptyDiskInfoAddr();
         	    if(DiskInfo!=NULL)
         	    {
              	     DiskInfo->DiskCommand=SD_Command ;
               	     DiskInfo->RsvdForLow=GetVolumeFirstSect(0);
                     /*获取卷首扇区*/
		             if(DiskInfo->RsvdForLow==DISK_INIT_NOT_OK)
		                 rt=DISK_INIT_NOT_OK;  
		             else
		                 rt=DISK_INIT_OK;   
           	    }
       	     }
       	     break ;
        case DISK_CLOSE :
	         rt=RETURN_OK;
	         break ;
        case DISK_READ_SECTOR : /*读扇区*/
             rt=DISK_READ_NOT_OK ;
	     /* 从SD卡中读一个块  */
             //INT8U  SD_ReadBlock(INT32U blockaddr,INT8U *recbuf);
             if( SD_ReadBlock(Dp->SectorIndex+Dp->RsvdForLow,Dp->Buf)==0 )
             {
                 rt=DISK_READ_OK ;
		 //FS调试用
	             #if FS_DEBUG_EN
				 #if USART1_EN
	             {  
                     Uart1_SendString("\nFS Reading Logic Sector :");//调试用,数据区开始扇区号
		             PUT_INT32U_DecTOString(Dp->SectorIndex);
		         }
				 #endif
				 #endif
             }
             break ;
        case DISK_WRITE_SECTOR :/*写扇区*/
             rt=DISK_WRITE_NOT_OK ;
	     /* 向SD卡中写入一个块  */
             //INT8U SD_WriteBlock(INT32U blockaddr,INT8U *recbuf);
             if( SD_WriteBlock(Dp->SectorIndex+Dp->RsvdForLow,Dp->Buf)==0 )
             {
                 rt=DISK_WRITE_OK ;
		         //FS调试用
		         #if FS_DEBUG_EN
				 #if USART1_EN
		 		 {
		     
	    	         Uart1_SendString("\nFS Writing Logic Sector :");//调试用,数据区开始扇区号
	    	         PUT_INT32U_DecTOString(Dp->SectorIndex);
			     }
		         #endif 
		         #endif
             }
             break ;
        default :rt=BAD_DISK_COMMAND ; break ;
    }
    return rt ;
}


/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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