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

📄 hal4sys.c

📁 ARM嵌入式系统软件开发实例(一) 里面含有很多UCOS教程和源码
💻 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 + -