csio.c
来自「PPPoE协议在Psos中的实现源代码」· C语言 代码 · 共 85 行
C
85 行
/************************************************************************/
/* */
/* MODULE: myfunc.c */
/* DATE: 12/1/2000 */
/* PURPOSE: Crystal Semiconductor CS8900 driver for pSOS/trimedia */
/* PROGRAMMER: fangpeng */
/*----------------------------------------------------------------------*/
/* */
/* Copyright 1996, fangpeng . */
/* ALL RIGHTS RESERVED */
/************************************************************************/
/************************************************************************/
/* This file defines some functions specific to Trimedia such as */
/* IO/MEM Byte/Word Read/Write and Interrupt service */
/************************************************************************/
#include "csio.h"
extern volatile int csInMemoryMode;
unsigned char inb(unsigned long PortAddr)
{ return myxioRead(PortAddr + CS_XIO_Read_IO_BASE);
}
unsigned short inw(unsigned long PortAddr)
{ volatile unsigned long tmpData;
tmpData = myxioRead(PortAddr+CS_XIO_Read_IO_BASE);
tmpData += (myxioRead(PortAddr+CS_XIO_Read_IO_BASE+1))<<8;
return tmpData;
}
void outw(unsigned long PortAddr,unsigned short value)
{ myxioWrite(PortAddr + CS_XIO_Write_IO_BASE+1 , value>>8);
myxioWrite(PortAddr + CS_XIO_Write_IO_BASE, value);
}
unsigned short inMEMw(unsigned short *MemAddr)
{ unsigned short tmpData;
unsigned long tmpAddr;
tmpAddr = (unsigned long)MemAddr + CS_XIO_Read_MEM_BASE;
tmpData = myxioRead(tmpAddr);
tmpData+= (myxioRead(tmpAddr+1))<<8;
return tmpData;
}
void outMEMw(unsigned short *MemAddr,unsigned short value)
{ unsigned long tmpAddr;
tmpAddr = (unsigned long)MemAddr + CS_XIO_Write_MEM_BASE;
myxioWrite(tmpAddr+1, value>>8);
myxioWrite(tmpAddr, value);
}
unsigned char inMEMb(unsigned short *MemAddr)
{ unsigned long tmpAddr;
unsigned short tmpData,lastbit;
if ( ((unsigned long )MemAddr)&1 == 0 )
lastbit = 0;
else
lastbit = 1;
tmpAddr = (unsigned long)MemAddr + CS_XIO_Read_MEM_BASE - lastbit;
tmpData = inMEMw((unsigned short *)tmpAddr);
return (lastbit ==0 )?(tmpData&0x00ff):(tmpData>>8);
}
void outMEMb(unsigned short *MemAddr,unsigned short value)
{ unsigned long tmpAddr;
unsigned short tmpData,lastbit;
if ( ((unsigned long )MemAddr)&1 == 0 )
lastbit = 0;
else
lastbit = 1;
tmpAddr = (unsigned long)MemAddr + CS_XIO_Write_MEM_BASE - lastbit;
tmpData = inMEMw((unsigned short *)tmpAddr);
outMEMw((unsigned short *)tmpAddr, (lastbit ==0 )?(tmpData&0xff00+value):(tmpData&0x00ff+value<<8) );
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?