📄 hal4sys.c
字号:
//IDE外设低层代码
//*************************************************************************
//
// P H I L I P S P R O P R I E T A R Y
//
// COPYRIGHT (c) 1999 BY PHILIPS SINGAPORE.
// -- ALL RIGHTS RESERVED --
//
// File Name: Hal4sys.C
// Author: Hilbert Zhang ZhenYu
// Created: Nov. 19, 99
// Modified:
// Revision: 0.0.
//
//*************************************************************************
//
//*************************************************************************
#include "config.h" /* special function register declarations */
#undef GLOBAL_EXT
#include "SysCnfg.h"
#include "BasicTyp.H"
#include "Hal4Sys.h"
void bus_delay(void)
{
unsigned char i,j;
for(j=0;j<=1;j++)
{
i = D12_NOP;
// D12_NOP = i;
}
}
void Hal4Sys_Wait4US(void)
{ uint32 i;
for(i=0;i<5;i++);
}
void Hal4Sys_WaitInUS(uint32 time)
{
uint32 i;
for(i=0;i<time;i++);
}
void Hal4Sys_WaitInMS(uint32 time)
{
uint32 i;
for(i=0;i<time;i++);
}
/* PIO mode for D12 access */
void Hal4Sys_D12CmdPortOutB( uint8 val) //D12写命令
{
bus_delay();
D12_command = val;
//*((uint8 *)D12_command) = val;
}
void Hal4Sys_D12DataPortOutB( INT8 val) //D12写数据
{
bus_delay();
D12_data = val;
//*((INT8 xdata *)D12_data) = val;
}
unsigned char Hal4Sys_D12DataPortInB( void) //D12读
{
//return *((INT8 xdata *)D12_data);
bus_delay();
return D12_data;
}
/* EasyARM2200 */
/****************************************************************************
* 名称:IDE_Read(unsigned int reg)(EasyARM2200)
* 功能:通过EasyARM2104 GPIO 读取硬盘数据(一个16位的字)。
* 入口参数:reg 寄存器名称
* 出口参数:读出的数据
****************************************************************************/
uint16 IDE_Read(uint32 reg)
{
uint16 res ;
IO2DIR = IO2DIR & MASK_P2; // 定义输出口其它为输入(ATA_DATA为输入)
IO0SET |= IDE_WR +IDE_RD;
IO1SET = OUT_PUT_P1; // 控所硬盘引脚信号输出(输出高电平)
IO1CLR = (~reg) & OUT_PUT_P1; // 控所硬盘引脚信号输出(输出低电平)
IO0CLR = IDE_RD; // 读信号脚置低
res = (uint16)(IO2PIN >>16); // 读取数据
IO0SET = IDE_RD;
IO1SET = OUT_PUT_P1; // 输出控制信号置高
return res;
}
/* EasyARM2200 */
/****************************************************************************
* 名称:IDE_Write(unsigned int reg, short data)
* 功能:通过EasyARM2104 GPIO 写入硬盘数据(一个16位的字)。
* 入口参数:reg 寄存器名称
data 写入的数据
* 出口参数:无
****************************************************************************/
void IDE_Write(uint32 reg, uint16 data)
{
IO2DIR = IO2DIR | ATA_DATA; // 定义输出口(ATA_DATA为输出),其它口不变
IO1SET = OUT_PUT_P1; // 控制硬盘引脚信号输出(输出高电平)
IO0SET |= IDE_WR +IDE_RD;
IO1CLR = (~reg) & OUT_PUT_P1 ; // 控制硬盘引脚信号输出(输出低电平)
IO2CLR = (~data)<<16;
IO0CLR = IDE_WR; // 写信号脚置低
IO0SET = IDE_WR; // 写信号脚置高[与低>162ns]
IO1SET = OUT_PUT_P1; // 输出控制信号置高
IO2SET = ATA_DATA;
IO2DIR &= MASK_P2; // 使数据线为输入,降低功耗
}
void Hal4Sys_ATAPortOutB(uint32 Addr, uint8 Data) //ATA写一字节
{
IDE_Write( Addr, Data);
}
uint8 Hal4Sys_ATAPortInB(uint32 Addr) //ATA读字节
{
return (uint8)IDE_Read( Addr );
}
uint16 Hal4Sys_ATADataPortInW(void) //ATA读字16位
{
return IDE_Read( IDE_DATA );;
}
//Amend by Liu Ying Bin
INT16 Hal4Sys_SwapINT16(INT16 wData)
{
return ( (wData<<8)|(wData>>8) );
}
uint32 Hal4Sys_SwapINT32(uint32 dData)
{
dData = (dData&0xff)<<24|(dData&0xff00)<<8|(dData&0xff000000)>>24|(dData&0xff0000)>>8;
return dData;
}
void Hal4Sys_ResetD12(void) //D12复位
{
uint32 i;
//复位D12
IOCLR = USBRST;
for(i=0;i<0x00000fff;i++);
IOSET = USBRST;
for(i=0;i<0x0003fff;i++);
}
void Hal4Sys_InitD12(void)
{
Hal4Sys_ResetD12();
// D12INT_EDGE = 0; // Level trigle for D12INT_N
// D12INT_PRIORITY = 0; // 0 Priority Level of D12INT_N
//D12INT_ENABLE = 1; // Enalbe External IRQ0 for D12INT_N
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -