📄 d13_reg.c
字号:
/*
//*************************************************************************
//
// 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: D13_Reg.C
// Created: Feb. 1, 2000
// Modified:
// Revision: 0.1
//
//*************************************************************************
//
//*************************************************************************
*/
#include <dos.h>
#include "SysCnfg.h"
#include "BasicTyp.h"
#include "DcCommon.h"
#include "HAL4Sys.h"
#include "Hal4ISA.h"
#include "Hal4IKit.h"
#include "HAL4D13.h"
#include "D13_Reg.h"
/*
//*************************************************************************
// Public static data
//*************************************************************************
*/
extern UCHAR bIRQL;
/*
//*************************************************************************
// Private static data
//*************************************************************************
*/
/*
//*************************************************************************
// Functions
//*************************************************************************
*/
void D13_SWResetDevice(void)
{
if( 0 == bIRQL)
RaiseIRQL();
Hal4D13_CommandOutB(D13CMD_DEV_RESET);
if( 0 == bIRQL)
LowerIRQL();
}
USHORT D13_GetDevConfig(void)
{
USHORT wDevConfig;
if(0 == bIRQL)
RaiseIRQL();
wDevConfig = Hal4D13_RegInW(D13CMD_DEV_RD_CNFG);
if(0 == bIRQL )
LowerIRQL();
return wDevConfig;
}
void D13_SetDevConfig(USHORT wDevCnfg)
{
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_RegOutW(D13CMD_DEV_WR_CNFG,wDevCnfg);
if(0 == bIRQL)
LowerIRQL();
}
void D13_SetMode(UCHAR byMode)
{
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_RegOutW(D13CMD_DEV_WR_MODE,byMode);
if(0 == bIRQL)
LowerIRQL();
}
UCHAR D13_GetMode(void)
{
UCHAR byMode;
if(0 == bIRQL)
RaiseIRQL();
byMode = (UCHAR) Hal4D13_RegInW(D13CMD_DEV_RD_MODE);
if(0 == bIRQL)
LowerIRQL();
return byMode;
}
UCHAR D13_GetAddress(void)
{
UCHAR byAddress;
if(0 == bIRQL)
RaiseIRQL();
byAddress = (UCHAR)Hal4D13_RegInW(D13CMD_DEV_RD_ADDR);
if(0 == bIRQL)
LowerIRQL();
return byAddress;
}
void D13_SetAddressEnable(UCHAR byAddress, UCHAR byEnable)
{
if(0 == bIRQL)
RaiseIRQL();
if(byEnable)
byAddress |= D13REG_DEVADDR_EN;
else
byAddress &= D13REG_DEVADDR_MASK;
Hal4D13_RegOutW(D13CMD_DEV_WR_ADDR, (USHORT)byAddress);
if(0 == bIRQL)
LowerIRQL();
}
void D13_SendResume(void)
{
UCHAR byResueReg;
if(0 == bIRQL)
RaiseIRQL();
byResueReg = (UCHAR) Hal4D13_RegInW(D13CMD_DEV_WR_MODE);
byResueReg |= D13REG_MODE_RESUME;
Hal4D13_RegOutW(D13CMD_DEV_WR_MODE, (USHORT)byResueReg);
if(0 == bIRQL)
LowerIRQL();
}
void D13_SoftConnect(UCHAR bEnable)
{
UCHAR bySftConnect;
if(0 == bIRQL)
RaiseIRQL();
bySftConnect = (UCHAR) Hal4D13_RegInW(D13CMD_DEV_RD_MODE);
if(bEnable)
bySftConnect |= D13REG_MODE_SOFTCONNECT;
else
bySftConnect &= ~D13REG_MODE_SOFTCONNECT;
Hal4D13_RegOutW(D13CMD_DEV_WR_MODE, (USHORT)bySftConnect );
if(0 == bIRQL)
LowerIRQL();
}
void D13_AcknowledgeSETUP(void)
{
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_CommandOutB( D13CMD_ACK_SETUP);
if(0 == bIRQL)
LowerIRQL();
}
void D13_ClearBuffer(UCHAR byEPIndex)
{
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_CommandOutB(D13CMD_EP_CLEAR_BUF + byEPIndex);
if(0 == bIRQL)
LowerIRQL();
}
void D13_ValidBuffer(UCHAR byEPIndex)
{
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_CommandOutB(D13CMD_EP_VALID_BUF + byEPIndex);
if(0 == bIRQL)
LowerIRQL();
}
USHORT D13_ReadEndpoint(UCHAR byEPIndex, USHORT * ptrBuf, USHORT wLength)
{
USHORT wXferedCount;
if(0 == bIRQL)
RaiseIRQL();
/* Select Endpoint Index */
Hal4D13_CommandOutB(D13CMD_EP_RD_FIFO + byEPIndex);
wXferedCount = Hal4D13_DataInW(); // Get BufferwLength
if( wLength > wXferedCount)
wLength = wXferedCount;
for(wXferedCount = 0; wXferedCount < wLength ; wXferedCount += 2 , ptrBuf ++ )
*ptrBuf = Hal4D13_DataInW();
/* Clear Buffer */
Hal4D13_CommandOutB(D13CMD_EP_CLEAR_BUF + byEPIndex);
if( 0 == bIRQL )
LowerIRQL();
return wXferedCount;
}
USHORT D13_ReadEndpointWOClearBuffer(UCHAR byEPIndex, USHORT * ptrBuf, USHORT wLength)
{
USHORT wXferedCount;
if( 0 == bIRQL )
RaiseIRQL();
// Select Endpoint Index
Hal4D13_CommandOutB( D13CMD_EP_RD_FIFO + byEPIndex);
/* read Buffer */
wXferedCount = Hal4D13_DataInW();/* LSB ofwLength word */
if(wLength > wXferedCount)
wLength = wXferedCount;
for(wXferedCount = 0; wXferedCount < wLength; wXferedCount += 2, ptrBuf ++ )
*ptrBuf = Hal4D13_DataInW();
if(0 == bIRQL)
LowerIRQL();
return wXferedCount;
}
USHORT D13_ReadEndpoint2IO(UCHAR byEPIndex, USHORT wIoPort, USHORT wLength)
{
USHORT wXferedCount;
USHORT wTemp;
if( 0 == bIRQL )
RaiseIRQL();
/* Select Endpoint */
Hal4D13_CommandOutB( D13CMD_EP_RD_FIFO + byEPIndex);
/* read Buffer Length */
wTemp = Hal4D13_DataInW();/* LSB ofwLength */
if( wLength > wTemp)
wLength = wTemp;
for(wXferedCount = 0; wXferedCount < wLength; wXferedCount += 2 )
{
wTemp = Hal4D13_DataInW();
Hal4Sys_OutportW(wIoPort, wTemp);
}
/* Clear Buffer */
Hal4D13_CommandOutB( D13CMD_EP_CLEAR_BUF + byEPIndex);
if( 0 == bIRQL )
LowerIRQL();
return wXferedCount;
}
USHORT D13_WriteEndpoint(UCHAR byEPIndex, USHORT * ptrBuf, USHORT wLength)
{
UCHAR wXferedCount;
if(0 == bIRQL)
RaiseIRQL();
// Select Endpoint
Hal4D13_CommandOutB( D13CMD_EP_WR_FIFO + byEPIndex);
// Set Xfer Count
Hal4D13_DataOutW( wLength);
/* Write Buffer */
for(wXferedCount = 0; wXferedCount < wLength; wXferedCount += 2, ptrBuf ++ )
Hal4D13_DataOutW( * ptrBuf);
/* Validate Buffer */
Hal4D13_CommandOutB( D13CMD_EP_VALID_BUF + byEPIndex);
if(0 == bIRQL)
LowerIRQL();
return wXferedCount;
}
USHORT D13_ReadEndpointWOValidBuffer(UCHAR byEPIndex, USHORT * ptrBuf, USHORT wLength)
{
UCHAR wXferedCount;
if(0 == bIRQL)
RaiseIRQL();
// Select Endpoint
Hal4D13_CommandOutB( D13CMD_EP_WR_FIFO + byEPIndex);
// Set Xfer Count
Hal4D13_DataOutW( wLength);
/* Write Buffer */
for(wXferedCount = 0; wXferedCount < wLength; wXferedCount += 2, ptrBuf ++ )
Hal4D13_DataOutW( *ptrBuf);
if(0 == bIRQL)
LowerIRQL();
return wXferedCount;
}
USHORT D13_WriteEndpoint2IO(UCHAR byEPIndex, USHORT wIoPort, USHORT wLength)
{
USHORT wTemp;
UCHAR wXferedCount;
if(0 == bIRQL)
RaiseIRQL();
// Select Endpoint
Hal4D13_CommandOutB( D13CMD_EP_WR_FIFO + byEPIndex);
// Set Xfer Length
Hal4D13_DataOutW( wLength );
/* Write Buffer */
for(wXferedCount =0; wXferedCount < wLength; wXferedCount = wXferedCount+2 )
{
wTemp = Hal4Sys_InportW(wIoPort);
Hal4D13_DataOutW(wTemp);
}
/* Validate Buffer */
Hal4D13_CommandOutB( D13CMD_EP_VALID_BUF+byEPIndex);
if(0 == bIRQL)
LowerIRQL();
return wXferedCount;
}
ULONG D13_GetIntEnable(void)
{
ULONG dwIrqEnable;
if(0 == bIRQL)
RaiseIRQL();
dwIrqEnable = Hal4D13_RegInDW(D13CMD_DEV_RD_INTEN);
if(0 == bIRQL)
LowerIRQL();
return dwIrqEnable;
}
void D13_SetIntEnable(ULONG dwIntEn)
{
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_RegOutDW(D13CMD_DEV_WR_INTEN,dwIntEn );
if(0 == bIRQL)
LowerIRQL();
}
ULONG D13_ReadInterruptRegister(void)
{
ULONG dwIRQStatus = 0;
if(0 == bIRQL)
RaiseIRQL();
dwIRQStatus = Hal4D13_RegInDW( D13CMD_DEV_INT_SRC);
if(0 == bIRQL)
LowerIRQL();
return dwIRQStatus;
}
UCHAR D13_GetEndpointStatusWInteruptClear(UCHAR byEPIndex)
{
UCHAR byEndpStatus;
if(0 == bIRQL)
RaiseIRQL();
byEndpStatus = (UCHAR)Hal4D13_RegInW( D13CMD_EP_RDSTS_CLRINT + byEPIndex);
if(0 == bIRQL)
LowerIRQL();
return byEndpStatus;
}
UCHAR D13_GetEndpointStatusWOInteruptClear(UCHAR byEPIndex)
{
UCHAR byEndpStatus;
if(0 == bIRQL)
RaiseIRQL();
byEndpStatus = (UCHAR)Hal4D13_RegInW( D13CMD_EP_RDSTS + byEPIndex);
if(0 == bIRQL)
LowerIRQL();
return byEndpStatus;
}
void D13_SetEndpointStatus(UCHAR byEPIndex, UCHAR byStalled)
{
if(0 == bIRQL)
RaiseIRQL();
if(byStalled & 0x80)
{
Hal4D13_CommandOutB( D13CMD_EP_WR_STS + byEPIndex);
}
else
{
Hal4D13_CommandOutB( D13CMD_EP_CLR_STALL + byEPIndex);
}
if(0 == bIRQL)
LowerIRQL();
}
void D13_SetDMAConfig(USHORT wDMACnfg)
{
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_RegOutW(D13CMD_DMA_WR_CNFG, wDMACnfg);
if(0 == bIRQL)
LowerIRQL();
}
USHORT D13_GetDMAConfig(void)
{
USHORT wDMAConfig;
if(0 == bIRQL)
RaiseIRQL();
wDMAConfig = Hal4D13_RegInW(D13CMD_DMA_RD_CNFG);
if(0 == bIRQL)
LowerIRQL();
return wDMAConfig;
}
void D13_SetDMACounter(USHORT wDMACounter)
{
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_RegOutW(D13CMD_DMA_WR_COUNT, wDMACounter);
if(0 == bIRQL)
LowerIRQL();
}
USHORT D13_GetDMACounter(void)
{
USHORT wDMACounter;
if(0 == bIRQL)
RaiseIRQL();
wDMACounter = Hal4D13_RegInW(D13CMD_DMA_RD_COUNT);
if(0 == bIRQL)
LowerIRQL();
return wDMACounter;
}
USHORT D13_GetDataFromChipRam(void)
{
USHORT wData;
if(0 == bIRQL)
RaiseIRQL();
wData = Hal4D13_RegInW(D13CMD_DEV_RD_RAM);
if(0 == bIRQL)
LowerIRQL();
return wData;
}
void D13_SetDataToChipRam(USHORT wData)
{
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_RegOutW(D13CMD_DEV_WR_RAM, wData);
if(0 == bIRQL)
LowerIRQL();
}
USHORT D13_ReadCurrentFrameNumber(void)
{
USHORT wFrameNum;
if(0 == bIRQL)
RaiseIRQL();
wFrameNum = Hal4D13_RegInW( D13CMD_RD_FRMNUM);
if(0 == bIRQL)
LowerIRQL();
return wFrameNum;
}
void D13_UnlockDevice(void)
{
ULONG dwTemp;
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_RegOutDW(D13CMD_DEV_LOCK,D13REG_UNLOCK_CODE);
if(0 == bIRQL)
LowerIRQL();
}
USHORT D13_ReadChipID(void)
{
USHORT wChipID;
if(0 == bIRQL)
RaiseIRQL();
wChipID = Hal4D13_RegInW(D13CMD_DEV_RD_CHIPID);
if(0 == bIRQL)
LowerIRQL();
return wChipID;
}
UCHAR D13_GetErrorCode(UCHAR byEPIndex)
{
UCHAR byTemp;
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_CommandOutB( D13CMD_EP_RD_ERR+byEPIndex);
byTemp = (UCHAR) Hal4D13_DataInW();
if(0 == bIRQL)
LowerIRQL();
return byTemp;
}
UCHAR D13_GetEndpointConfig(UCHAR byEPIndex)
{
UCHAR byTemp;
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_CommandOutB( D13CMD_EP_RD_CNFG+byEPIndex);
byTemp = (UCHAR) Hal4D13_DataInW();
if(0 == bIRQL)
LowerIRQL();
return byTemp;
}
void D13_SetEndpointConfig(UCHAR byEPConfig, UCHAR byEPIndex)
{
if(0 == bIRQL)
RaiseIRQL();
Hal4D13_CommandOutB( D13CMD_EP_WR_CNFG+byEPIndex);
Hal4D13_DataOutW((USHORT)byEPConfig);
if(0 == bIRQL)
LowerIRQL();
}
UCHAR D13_Endp2EndpIndex(UCHAR byEndpoint)
{
return byEndpoint+1;
}
UCHAR D13_EndpIndex2Endp(UCHAR byEndpointIndex)
{
return byEndpointIndex-1 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -