📄 hal4sys.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 + -