?? ata.c
字號:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: empty.c
** Last modified Date: 2005-4-16
** Last Version: 1.0
** Descriptions: empty driver for ZLG/FS 1.0
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2005-4-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#define IN_EMPTY /* "EMPTY" 為文件的主文件名 */
#include "config.h"
/*********************************************************************************************************
** 函數名稱: Empty ---> 使用您自己的函數名稱
** 功能描述: 底層驅動程序與上層的接口程序
**
** 輸 入: Cammand:define DISK_INIT: 初始化,必須實現
** define DISK_CLOSE: 關閉,必須實現
** define DISK_READ_SECTOR: 讀扇區,必須實現
** define DISK_WRITE_SECTOR: 寫扇區,必須實現
** define DISK_DRIVER_VER: 查看驅動程序版本號,必須實現
** define DISK_CHECK_CMD: 查看命令是否實現,必須實現
** define DISK_LOW_FORMAT: 低級格式化,可選命令
** define DISK_FREE_SECTOR: 釋放扇區,可選命令
** define DISK_GET_SECTOR_NUMBER: 獲得設備總扇區數,可選命令
** define DISK_GET_BYTES_PER_SECTOR: 獲得每扇區字節數,可選命令
** define DISK_CHECK_CHANGE: 查看介質是否改變,可選命令
** define DISK_GET_SECTORS_PER_BLOCK:獲取每塊扇區數,可選命令
** define DISK_READ_BLOCK: 讀數據塊,可選命令
** define DISK_WRITE_BLOCK: 寫數據塊,可選命令
** Parameter: 剩余參數,其中Parameter->RsvdForLow用于存儲驅動程序支持的物理設備相關信息,
** 如使用的資源等。使用它可以使一個驅動支持多個物理設備。
** 輸 出: DISK_READ_OK: 讀扇區完成
** DISK_READ_NOT_OK: 讀扇區失敗
** DISK_WRITE_OK: 寫扇區完成
** DISK_WRITE_NOT_OK: 寫扇區失敗
** DISK_INIT_OK: 初始化完成
** DISK_INIT_NOT_OK: 初始化失敗
** DISK_FALSE: 真
** DISK_TRUE: 假
** BAD_DISK_COMMAND: 無效的命令
** 全局變量: 無
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2005-4-16
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
uint16 CFCammand(uint8 Cammand, void *Parameter) /*使用您自己的函數名稱 */
{
uint16 rt;
Disk_RW_Parameter * Dp;
// FFSDisk *Disk;
Dp = (Disk_RW_Parameter *)Parameter;
// Disk = (FFSDisk *) Dp->RsvdForLow;
OS_ENTER_CRITICAL(); /* 關中斷,根據需要添加 */
/* 可選命令如果沒有實現,則rt = BAD_DISK_COMMAND*/
switch (Cammand)
{
case DISK_INIT:
/* 初始化驅動程序,必須實現 */
/* Parameter沒有使用 */
/* rt=DISK_INIT_OK或DISK_INIT_NOT_OK*/
if(ATA[0].ATAIsOK)
rt=DISK_INIT_OK;
else
rt=DISK_INIT_NOT_OK;
break;
case DISK_CLOSE:
/* 關閉驅動程序,不再使用,必須實現 */
/* Parameter沒有使用 */
rt = DISK_RETURN_OK;
break;
case DISK_READ_SECTOR:
/* 讀物理扇區,必須實現 */
/* Dp->Buf:存儲讀到的數據 */
/* Dp->SectorIndex:物理扇區索引 */
/* rt=DISK_READ_OK或DISK_READ_NOT_OK*/
rt=ATA_ReadSector(0,(uint16*)Dp->Buf,Dp->SectorIndex,1)?DISK_READ_OK:DISK_READ_NOT_OK;
break;
case DISK_WRITE_SECTOR:
/* 寫物理扇區,必須實現 */
/* Dp->Buf:需要寫的數據 */
/* Dp->SectorIndex:物理扇區索引 */
/* rt=DISK_WRITE_OK或DISK_WRITE_NOT_OK*/
rt=ATA_WriteSector(0,(uint16*)Dp->Buf,Dp->SectorIndex,1)?DISK_WRITE_OK:DISK_WRITE_NOT_OK;
break;
case DISK_DRIVER_VER:
Dp->SectorIndex = 110; /* 版本為1.10,指的是ZLG/FFS的版本 */
rt = DISK_RETURN_OK;
break;
case DISK_CHECK_CMD:
rt = DISK_FALSE;
/* 以下那個命令沒有實現就注釋掉相應的語句 */
if ((Dp->SectorIndex == DISK_INIT)
|| (Dp->SectorIndex == DISK_CLOSE)
|| (Dp->SectorIndex == DISK_READ_SECTOR)
|| (Dp->SectorIndex == DISK_WRITE_SECTOR)
|| (Dp->SectorIndex == DISK_DRIVER_VER)
|| (Dp->SectorIndex == DISK_CHECK_CMD)
//|| (Dp->SectorIndex == DISK_LOW_FORMAT)
//|| (Dp->SectorIndex == DISK_FREE_SECTOR)
|| (Dp->SectorIndex == DISK_GET_SECTOR_NUMBER)
|| (Dp->SectorIndex == DISK_GET_BYTES_PER_SECTOR)
//|| (Dp->SectorIndex == DISK_CHECK_CHANGE)
//|| (Dp->SectorIndex == DISK_GET_SECTORS_PER_BLOCK)
//|| (Dp->SectorIndex == DISK_READ_BLOCK)
//|| (Dp->SectorIndex == DISK_WRITE_BLOCK)
)
{
rt = DISK_TRUE;
}
break;
// case DISK_LOW_FORMAT:
/* 低級格式化,可選命令 */
/* Dp->SectorIndex:0:一般低級格式化 */
/* Dp->SectorIndex:其它:第一次低級格式化 */
// rt = DISK_RETURN_OK;
// break;
// case DISK_FREE_SECTOR:
/* 釋放扇區,可選命令,ZLG/FFS使用此命令 */
/* 此命令讓驅動程序知道哪些扇區不再保存有用數據 */
/* Dp->SectorIndex:物理扇區索引 */
// rt = DISK_RETURN_OK;
// break;
case DISK_GET_SECTOR_NUMBER:
/* 獲得設備總扇區數,可選命令 */
Dp->SectorIndex = ATA[0].INFODATA.CurrentSectorCapacity;
rt = DISK_RETURN_OK;
break;
case DISK_GET_BYTES_PER_SECTOR:
/* 獲得每扇區字節數,可選命令 */
Dp->SectorIndex = 512;
rt = DISK_RETURN_OK;
break;
// case DISK_CHECK_CHANGE:
/* 查看介質是否改變,可選命令 */
/* if (介質改變(如更換了SD卡))
{
rt = DISK_TRUE;
}
else
{
rt = DISK_FALSE;
}
*/
// case DISK_GET_SECTORS_PER_BLOCK:
/* 獲取每塊扇區數,可選命令 */
// Dp->SectorIndex = 每塊扇區數;
// rt = DISK_RETURN_OK;
// break;
// case DISK_READ_BLOCK:
/* 讀數據塊,可選命令 */
/* Dp->Buf:存儲讀到的數據 */
/* Dp->SectorIndex:塊的第一個物理扇區索引 */
/* rt=DISK_READ_OK或DISK_READ_NOT_OK*/
// break;
// case DISK_WRITE_BLOCK:
/* 寫數據塊,可選命令 */
/* Dp->Buf:需要寫的數據 */
/* Dp->SectorIndex:塊的第一個物理扇區索引 */
/* rt=DISK_WRITE_OK或DISK_WRITE_NOT_OK*/
// break;
default:
rt = BAD_DISK_COMMAND;
break;
}
OS_EXIT_CRITICAL(); /* 開中斷,如果前面使用了OS_ENTER_CRITICAL(),則添加 */
return rt;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -