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

📄 hal4sys.c

📁 飞利浦公司usb2.0芯片isp1581的通用驱动代码
💻 C
字号:
/*
   //*************************************************************************
   //
   //                  P H I L I P S   P R O P R I E T A R Y
   //
   //           COPYRIGHT (c)   2000 BY PHILIPS SINGAPORE.
   //                     --  ALL RIGHTS RESERVED  --
   //
   // Project:		ISP1581 EVA board
   // File Name:	HAL4SYS.C
   // Author:		Qian Jiang
   // Created:		Sept. 1, 2000
   // Modified:
   // Revision:		0.0
   //
   //*************************************************************************
*/

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

#include "BasicTyp.h"
#include "common.h"
#include "hal4sys.h"
#include "isp1581.h"
#include "mainloop.h"
#include "verify.h"


/*
//*************************************************************************
//  Public static data
//*************************************************************************
*/
ULONG   Hal4Sys_ClockTicks = 0;


extern CONTROL_XFER RequestData;
extern ISP1581FLAGS bISP1581flags;

/*
//*************************************************************************
//  Private static data
//*************************************************************************
*/
UCHAR Hal4Sys_FPGA_ID = 0;
UCHAR Hal4Sys_SysCtrl_PORT = 0;
void interrupt (*Hal4Sys_OldIsr4Timer)();

/*
//*************************************************************************
//  Subroutines
//*************************************************************************
*/
void Hal4Sys_AcquireFPGA(void)
{
   	if(bISP1581flags.bits.verbose)
    	cprintf("enter Hal4Sys_AcquireFPGA\r\n");

    Hal4Sys_FPGA_ID = Hal4Sys_GetFPGAId();
   	if(bISP1581flags.bits.verbose)
    	cprintf("FPGA Id = %x\r\n", Hal4Sys_FPGA_ID);


   	if(bISP1581flags.bits.verbose)
	    cprintf("exit Hal4Sys_AcquireFPGA\r\n");

}

// this function added for reset and set the clock synchronization.
void Hal4Sys_ResetPCBA(void)
{
	Hal4Sys_SysCtrl_PORT &= ~SCP_RST;
	outport(ctlport,Hal4Sys_SysCtrl_PORT); // reset all PCBA
#ifdef debug
//	cprintf("Control port value %x", Hal4Sys_SysCtrl_PORT);
#endif
	Hal4Sys_SysCtrl_PORT |= SCP_RST;
	outport(ctlport,Hal4Sys_SysCtrl_PORT); // reset release
#ifdef debug
//	cprintf("Control port value %x", Hal4Sys_SysCtrl_PORT);
#endif
}

void Hal4Sys_ReleaseFPGA(void)
{
   	if(bISP1581flags.bits.verbose)
    	cprintf("enter Hal4Sys_ReleaseFPGA\r\n");


   	if(bISP1581flags.bits.verbose)
	    cprintf("exit Hal4Sys_ReleaseFPGA\r\n");
}

void Hal4Sys_AcquireKeypad(void)
{
   	if(bISP1581flags.bits.verbose)
    	cprintf("enter Hal4Sys_AcquireKeypad\r\n");


   	if(bISP1581flags.bits.verbose)
	    cprintf("exit Hal4Sys_AcquireKeypad\r\n");
}

void Hal4Sys_ReleaseKeypad(void)
{
   	if(bISP1581flags.bits.verbose)
    	cprintf("enter Hal4Sys_ReleaseKeypad\r\n");


   	if(bISP1581flags.bits.verbose)
	    cprintf("exit Hal4Sys_ReleaseKeypad\r\n");
}

void Hal4Sys_AcquireLED(void)
{
  	if(bISP1581flags.bits.verbose)
    	cprintf("enter Hal4Sys_AcquireLED\r\n");
/*
	Hal4Sys_ControlLEDPattern(0x00);
	Hal4Sys_WaitinUS(1000);
	Hal4Sys_ControlLEDPattern(0x0f);

*/  	if(bISP1581flags.bits.verbose)
    	cprintf("exit Hal4Sys_AcquireLED\r\n");
}

void Hal4Sys_ReleaseLED(void)
{
  	if(bISP1581flags.bits.verbose)
    	cprintf("enter Hal4Sys_AcquireKeypad\r\n");

//	Hal4Sys_ControlLEDPattern(0x00);

  	if(bISP1581flags.bits.verbose)
    	cprintf("exit Hal4Sys_AcquireKeypad\r\n");
}

void Hal4Sys_AcquireTimer0(void)
{
  	if(bISP1581flags.bits.verbose)
    	cprintf("enter Hal4Sys_AcquireTimer0\r\n");

	RaiseIRQL();
	Hal4Sys_OldIsr4Timer = getvect(0x8);
	setvect(0x8, Hal4Sys_Isr4Timer);
	LowerIRQL();

  	if(bISP1581flags.bits.verbose)
    	cprintf("exit Hal4Sys_AcquireTimer0\r\n");
}

void Hal4Sys_ReleaseTimer0(void)
{
  	if(bISP1581flags.bits.verbose)
    	cprintf("enter Hal4Sys_ReleaseTimer0\r\n");

	setvect(0x8, Hal4Sys_OldIsr4Timer);

  	if(bISP1581flags.bits.verbose)
    	cprintf("exit Hal4Sys_ReleaseTimer0\r\n");
}

void Hal4Sys_AcquireSerial(void)
{
  	if(bISP1581flags.bits.verbose)
    	cprintf("enter Hal4Sys_AcquireSerial\r\n");


	if(bISP1581flags.bits.verbose)
        cprintf("exit Hal4Sys_AcquireSerial\r\n");

}

void Hal4Sys_ReleaseSerial(void)
{
   	if(bISP1581flags.bits.verbose)
    	cprintf("enter Hal4Sys_ReleaseSerial\r\n");


   	if(bISP1581flags.bits.verbose)
    	cprintf("exit Hal4Sys_ReleaseSerial\r\n");
}

void interrupt Hal4Sys_Isr4Timer(void)
{
	RaiseIRQL();

	Hal4Sys_ClockTicks++;
	bISP1581flags.bits.timer = 1;

	(*Hal4Sys_OldIsr4Timer)();

	LowerIRQL();
}



#define MACHINE_CYCLE 30

void Hal4Sys_WaitinUS(IN OUT ULONG time)
{
	ULONG loop;
	for(loop =time*MACHINE_CYCLE;loop>0 ;loop--)
	{
		continue;
	}

}

void Hal4Sys_WaitinMS(
	 IN OUT ULONG time
)
{
	ULONG	ClockExpired;
	ClockExpired = Hal4Sys_ClockTicks + time*10/182;
	while(Hal4Sys_ClockTicks < ClockExpired)
		;
}

void Hal4Sys_ControlISP1581Interrupt(BOOLEAN InterruptEN)
{
	if(InterruptEN)
    {
        Hal4Sys_SysCtrl_PORT |= SCP_INTEN;
    }
    else
    {
        Hal4Sys_SysCtrl_PORT &= ~SCP_INTEN;
    }
	outport(ctlport,Hal4Sys_SysCtrl_PORT); // reset bit set to '1';
#ifdef debug
//	cprintf("Control port value %x", Hal4Sys_SysCtrl_PORT);
#endif
}

void Hal4Sys_ControlLEDPattern(
	UCHAR LEDpattern
)
{
	LEDpattern &= 0x1f;
	Hal4Sys_SysCtrl_PORT &= 0xf0;
	Hal4Sys_SysCtrl_PORT |= LEDpattern ;
}

UCHAR Hal4Sys_GetFPGAId(void)
{
	UCHAR FPGAId;
	FPGAId = inport(ctlport);
	return FPGAId;

}

void Hal4Sys_ZeroBuffer(PUCHAR BuffPtr, ULONG length)
{
    ULONG i;
    PUCHAR ptr = (PUCHAR)BuffPtr;
    for( i = 0; i< length; i++, ptr ++ )
        * ptr = 0;
}

void debug_out(unsigned int debug_code)
{
	outport(aport, 0xffff);
	outport(dport, debug_code);
	cprintf("debug_code %04x", debug_code);
	return;
}

⌨️ 快捷键说明

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