?? ide_x_hw.c
字號(hào):
/*
**********************************************************************
* Micrium, Inc.
* 949 Crestview Circle
* Weston, FL 33327-1848
*
* uC/FS
*
* (c) Copyright 2001 - 2003, Micrium, Inc.
* All rights reserved.
*
***********************************************************************
----------------------------------------------------------------------
File : ide_X_hw.c
Purpose : IDE hardware layer for EP7312
----------------------------------------------------------------------
Known problems or limitations with current version
----------------------------------------------------------------------
None.
---------------------------END-OF-HEADER------------------------------
*/
/*********************************************************************
*
* #include Section
*
**********************************************************************
*/
#include "fs_port.h"
#include "fs_conf.h"
#include "def.h"
#if FS_USE_IDE_DRIVER
#include "ide_x_hw.h"
/*********************************************************************
*
* #define Macros
*
**********************************************************************
*/
// Command Block Registers //
//Little Endiann IDE=GCS4(0x2000_0000)
//read base bank2 0x10000000
//write abse bank4 0x20000000
#define Data_Reg_re (*(volatile U16*)0x20000020) // Read ->1F0h
#define Data_Reg_wr (*(volatile U16*)0x20000020) // Write ->1F0h
#define Error_Reg (*(volatile U8*)0x20000022) // R only ->1F1h
#define Features_Reg (*(volatile U8*)0x20000022) // W only ->1F1h
#define Sector_Count (*(volatile U8*)0x20000024) // R/W ->1F2h
#define Sector_Number (*(volatile U8*)0x20000026) // R/W ->1F3h
#define Cylinder_Low (*(volatile U8*)0x20000028) // R/W ->1F4h
#define Cylinder_High (*(volatile U8*)0x2000002a) // R/W ->1F5h
#define SDH (*(volatile U8*)0x2000002c) // R/W ->1F6h(Driver/Head)
#define Status_Reg (*(volatile U8*)0x2000002e) // R ->1F7h
#define Command_Reg (*(volatile U8*)0x2000002e) // W ->1F7h
// Control Block Registers //
#define Alt_Status_Reg (*(volatile U8*)0x1000001c) // R ->3F6h
#define Dev_control_Reg (*(volatile U8*)0x1000001c) // W ->3F6h
#define Drv_addr_Reg (*(volatile U8*)0x1000001e) // R ->3F7h
//LBA
#define LBA0 Sector_Number
#define LBA1 Cylinder_Low
#define LBA2 Cylinder_High
#define LBA3 SDH
// The Following is ATA Command Define //
#define Read_Sectors_Retry 0x20
#define Write_Sectors_Retry 0x30
// The Following is Diagnostic Code Define //
#define No_Err_Detected 0x01
#define Formatter_Device_Err 0x02
#define Sector_Buf_Err 0x03
#define ECC_Circuitry_Err 0x04
#define MCU_Err 0x05
#define Slave_DRV_Failed 0x80
// The Following is Some Macro Define //
#define HDD_Sector_Size 512
#define ATA_OK 0x00
#define ATA_FAIL 0xFF
#define HW__DELAY400NS FS_IDE_HW_X_GetAltStatus(Unit); FS_IDE_HW_X_GetAltStatus(Unit); \
FS_IDE_HW_X_GetAltStatus(Unit); FS_IDE_HW_X_GetAltStatus(Unit)
/*********************************************************************
*
* Local Variables
*
**********************************************************************
*/
static char _HW_DevicePresent[2];
/*********************************************************************
*
* Global functions section
*
**********************************************************************
*/
/*********************************************************************
*
* FS_IDE_HW_X_BusyLedOn
*
Description:
FS driver hardware layer function. Turn on busy led.
Parameters:
Unit - Unit number.
Return value:
None.
*/
void FS_IDE_HW_X_BusyLedOn(FS_u32 Unit) {
}
/*********************************************************************
*
* FS_IDE_HW_X_BusyLedOff
*
Description:
FS driver hardware layer function. Turn off busy led.
Parameters:
Unit - Unit number.
Return value:
None.
*/
void FS_IDE_HW_X_BusyLedOff(FS_u32 Unit) {
}
/*********************************************************************
*
* FS_IDE_HW_X_SetData
*
Description:
FS driver hardware layer function. Set the WR DATA register.
Parameters:
Unit - Unit number.
Data - Data to be set.
Return value:
None.
*/
void FS_IDE_HW_X_SetData(FS_u32 Unit, FS_u16 Data) {
// __MEMCFG2 = 0x1c13; /* CS5 16 bit */
Data_Reg_wr = Data;
}
/*********************************************************************
*
* FS_IDE_HW_X_GetData
*
Description:
FS driver hardware layer function. Read the RD DATA register.
Parameters:
Unit - Unit number.
Return value:
Value of the RD DATA register.
*/
FS_u16 FS_IDE_HW_X_GetData(FS_u32 Unit) {
FS_u16 data;
// __MEMCFG2 = 0x1c13; /* CS5 16 bit */
data = Data_Reg_re;
return data;
}
/*********************************************************************
*
* FS_IDE_HW_X_SetFeatures
*
Description:
FS driver hardware layer function. Set the FEATURES register.
Parameters:
Unit - Unit number.
Data - Value to write to the FEATURES register.
Return value:
None.
*/
void FS_IDE_HW_X_SetFeatures(FS_u32 Unit, unsigned char Data) {
// __MEMCFG2 = 0x1f13; /* CS5 8 bit */
Features_Reg = Data;
}
/*********************************************************************
*
* FS_IDE_HW_X_GetError
*
Description:
FS driver hardware layer function. Read the ERROR register.
Parameters:
Unit - Unit number.
Return value:
Value of the ERROR register.
*/
unsigned char FS_IDE_HW_X_GetError(FS_u32 Unit) {
unsigned char data;
// __MEMCFG2 = 0x1f13; /* CS5 8 bit */
data =Error_Reg;
return data;
}
/*********************************************************************
*
* FS_IDE_HW_X_SetSectorCount
*
Description:
FS driver hardware layer function. Set the SECTOR COUNT register.
Parameters:
Unit - Unit number.
Data - Value to write to the SECTOR COUNT register.
Return value:
None.
*/
void FS_IDE_HW_X_SetSectorCount(FS_u32 Unit, unsigned char Data) {
// __MEMCFG2 = 0x1f13; /* CS5 8 bit */
Sector_Count = Data;
}
/*********************************************************************
*
* FS_IDE_HW_X_GetSectorCount
*
Description:
FS driver hardware layer function. Read the SECTOR COUNT register.
Parameters:
Unit - Unit number.
Return value:
Value of the SECTOR COUNT register.
*/
unsigned char FS_IDE_HW_X_GetSectorCount(FS_u32 Unit) {
unsigned char data;
// __MEMCFG2 = 0x1f13; /* CS5 8 bit */
data =Sector_Count ;
return data;
}
/*********************************************************************
*
* FS_IDE_HW_X_SetSectorNo
*
Description:
FS driver hardware layer function. Set the SECTOR NUMBER register.
Parameters:
Unit - Unit number.
Data - Value to write to the SECTOR NUMBER register.
Return value:
None.
*/
void FS_IDE_HW_X_SetSectorNo(FS_u32 Unit, unsigned char Data) {
// __MEMCFG2 = 0x1f13; /* CS5 8 bit */
Sector_Number = Data;
}
/*********************************************************************
*
* FS_IDE_HW_X_GetSectorNo
*
Description:
FS driver hardware layer function. Read the SECTOR NUMBER register.
Parameters:
Unit - Unit number.
Return value:
Value of the SECTOR NUMBER register.
*/
unsigned char FS_IDE_HW_X_GetSectorNo(FS_u32 Unit) {
unsigned char data;
// __MEMCFG2 = 0x1f13; /* CS5 8 bit */
data = Sector_Number;
return data;
}
/*********************************************************************
*
* FS_IDE_HW_X_SetCylLow
*
Description:
FS driver hardware layer function. Set the CYLINDER LOW register.
Parameters:
Unit - Unit number.
Data - Value to write to the CYLINDER LOW register.
Return value:
None.
*/
void FS_IDE_HW_X_SetCylLow(FS_u32 Unit, unsigned char Data) {
// __MEMCFG2 = 0x1f13; /* CS5 8 bit */
Cylinder_Low = Data;
}
/*********************************************************************
*
* FS_IDE_HW_X_GetCylLow
*
Description:
FS driver hardware layer function. Read the CYLINDER LOW register.
Parameters:
Unit - Unit number.
Return value:
Value of the CYLINDER LOW register.
*/
unsigned char FS_IDE_HW_X_GetCylLow(FS_u32 Unit) {
unsigned char data;
// __MEMCFG2 = 0x1f13; /* CS5 8 bit */
data = Cylinder_Low;
return data;
}
/*********************************************************************
*
* FS_IDE_HW_X_SetCylHigh
*
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -