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

📄 ide_x_hw.c

📁 UC/FS做的文件系统很好.高版本的一般只有库文件.CF卡是一种很方便的存储设备。网上可得到的CF卡的驱动程序少三个文件:初始化、读和写。本代码测试读写成功。
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
**********************************************************************
*                          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
*

⌨️ 快捷键说明

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