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

📄 hw_acces.c

📁 isp1160_isa_evel_codeUSB主机软件
💻 C
字号:
/*
**  Kenobi2          version 1.3
**
**      ** This code has been made to check/learn the 1161 functionalities ** 
**      ** Release 25-Feb-2002                                             **
**
**      OKANO, Akifumi 
**      
**		Computing Segment, Semisonductors Div, Philips Japan Ltd.
**      akifumi.okano@philips.com
**      +81-3-3740-4668 
*/


#include		<stdio.h>
#include		<dos.h>
#include		<conio.h>

#include		"hc_comm.h"
#include		"hw_acces.h"
#include		"ui.h"

unsigned int	g_ISA_base_address;
unsigned int	g_1161_command_address;
unsigned int	g_1161_data_address;


/*
**	Hardware related : x86-ISA-1161 address
*/

unsigned int	get_ISA_base_address( void );


unsigned int get_ISA_base_address( void )
{
	return ( g_ISA_base_address );
}


void read_register_burst_char( unsigned short register_address, unsigned char *data, unsigned short length  )
{
	unsigned short	tmp;
	int				i;
	int				odd;
	
	odd		= length & 0x0001;
	
	if ( odd )
		length	&= ~0x1;		
	
	disable();

	outport( g_1161_command_address, register_address );

	for ( i = 0; i < length; i += 2 )
	{
		tmp		= inport( g_1161_data_address );
		
		*(data + i + 1)		= tmp >> 8;
		*(data + i + 0)		= tmp & 0x00FF;
	}
	
	
	if ( odd )
	{
		tmp		= inport( g_1161_data_address );
		
		*(data + i + 0)		= tmp & 0x00FF;
	}

	enable();
}
	


void write_register_burst_char( unsigned short register_address, unsigned char *data, unsigned short length  )
{
	unsigned short	tmp;
	int				i;

	register_address	+= 0x80;

	disable();

	outport( g_1161_command_address, register_address );

	for ( i = 0; i < length; i += 2 )
	{

		tmp		= (*(data + i + 1) << 8) | *(data + i);		/*  swap bytes  */
/*
		if ( !(i % 16) )
			mprintf( LIGHTGRAY, CONTINUE, "\r\nwr:%04d > ", i );
			
		mprintf( LIGHTGRAY, CONTINUE, " 0x%04X", tmp );
*/
		outport( g_1161_data_address, tmp );		
	}
	
	enable();
}


void read_register_burst_int( unsigned short register_address, unsigned char *data, unsigned short length  )
{
	int		i;

	disable();

	outport( g_1161_command_address, register_address );

	for ( i = 0; i < length; i++ )
		*data++		= inport( g_1161_data_address );

	enable();
}


void write_register_burst_int( unsigned short register_address, unsigned short *data, unsigned short length  )
{
	int		i;

	register_address	+= 0x80;

	disable();

	outport( g_1161_command_address, register_address );

	for ( i = 0; i < length; i++ )
		outport( g_1161_data_address, *data++ );

	enable();
}


unsigned long read_register32( unsigned short register_address )
{
	unsigned long		tmp;
	
	disable();

	outport( g_1161_command_address, register_address );
	tmp		 = inport( g_1161_data_address );
	tmp		|= (unsigned long)inport( g_1161_data_address ) << 16;

	enable();

	return ( tmp );
}


void write_register32( unsigned short register_address, unsigned long value )
{
	register_address	+= 0x80;

	disable();

	outport( g_1161_command_address, register_address );	
	outport( g_1161_data_address, (unsigned short)(value & 0x0000FFFF) );
	outport( g_1161_data_address, (unsigned short)(value >> 16)        );

	enable();
}


unsigned short read_register16( unsigned short register_address )
{
	unsigned short	tmp;

	disable();

	outport( g_1161_command_address, register_address );
	tmp	= inport( g_1161_data_address );
	
	enable();

	return ( tmp );
}


void write_register16( unsigned short register_address, unsigned short value )
{
	register_address	+= 0x80;
	
	disable();

	outport( g_1161_command_address, register_address );
	outport( g_1161_data_address,    value            );

	enable();
}

⌨️ 快捷键说明

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