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 + -
显示快捷键?