📄 cs8900.org.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include "2460lib.h"
#include "2460addr.h"
#include "def.h"
#include "cs8900.h"
#define PUBLIC
#define PRIVATE static
#define IOREAD(o) ((unsigned short)*((volatile unsigned short *)(dwEthernetIOBase + (o))))
#define IOWRITE(o, d) *((volatile unsigned short*)(dwEthernetIOBase + (o))) = (unsigned short)(d)
#define MEMREAD(o) ((unsigned short)*((volatile unsigned short *)(dwEthernetMemBase + (o))))
#define MEMWRITE(o, d) *((volatile unsigned short *)(dwEthernetMemBase + (o))) = (unsigned short)(d)
//#define DBGMSG EdbgOutputDebugString
#define MAX_COUNT 0x100000
#define CS8900DBG_PROBE (1 << 0)
PRIVATE unsigned int dwEthernetIOBase;
PRIVATE unsigned int dwEthernetMemBase;
#define CS8900_MEM_MODE
#ifdef CS8900_MEM_MODE
#define READ_REG1 ReadReg
#define READ_REG2 MEMREAD
#define WRITE_REG1 WriteReg
#define WRITE_REG2 MEMWRITE
#else
#define READ_REG1 ReadReg
#define READ_REG2 ReadReg
#define WRITE_REG1 WriteReg
#define WRITE_REG2 WriteReg
#endif
PRIVATE unsigned char bIsPacket;
void Detect_CS8900(void);
void * func_cs8900_test[][2]=
{
// "123456789012345678"
//Clock test
(void *)Detect_CS8900, "Detect CS8900 ",
0,0
};
void Ch34_CS8900_Test(void)
{
int i;
rSROM_BW|=(1<<5)|(1<<4)|(1<<3);
//rSROM_BW|=(1<<8)|(1<<7)|(1<<6);
//rSROM_BW=(1<<7)|(1<<6)|(1<<3);
//rSROM_BW&=~(1<<7);
printf("rSROM_BW=%x\n",rSROM_BW);
printf("rSROM_BC0=%x\n",rSROM_BC0);
printf("rSROM_BC1=%x\n",rSROM_BC1);
printf("rSROM_BC2=%x\n",rSROM_BC2);
printf("\nPower mode test.\n");
while(1)
{
i=0;
printf("\n\n");
while(1)
{ //display menu
printf("%2d:%s",i,func_cs8900_test[i][1]);
i++;
if((int)(func_cs8900_test[i][0])==0)
{
printf("\n");
break;
}
if((i%3)==0)
printf("\n");
}
printf("\nSelect (\"-1\" to exit) : ");
i = GetIntNum();
if(i==-1)
break; // return.
if(i>=0 && (i<((sizeof(func_cs8900_test)-1)/8)) ) // select and execute...
( (void (*)(void)) (func_cs8900_test[i][0]) )();
}
printf("\nCS8900_Test program end.\n");
}
PRIVATE unsigned short
ReadReg(unsigned short offset)
{
IOWRITE(IO_PACKET_PAGE_POINTER, offset);
return IOREAD(IO_PACKET_PAGE_DATA_0);
}
PRIVATE void
WriteReg(unsigned short offset, unsigned short data)
{
IOWRITE(IO_PACKET_PAGE_POINTER, offset);
IOWRITE(IO_PACKET_PAGE_DATA_0 , data);
}
void Detect_CS8900(void)
{
unsigned int iobase = 0;
unsigned int membase = 0;
unsigned short signature;
unsigned short eisa_number;
unsigned short prod_id;
unsigned char r = FALSE;
////////////////////////////////////////////////////////
// bank1 = 0x04000000
// cs8900 cs base address
// ADDR24 - high -> ioread/write
// ADDR24 - low --> mem read/write
////////////////////////////////////////////////////////
// io read/write base address
// = 0x04000000 + 0x01000000 (ADDR24 high) + 0x300 (cs8900 io base offset) = 0x05000300
//------------------------------------------------------
// memory read/write base address
// = 0x04000000 + 0x00000000 (ADDR24 low) = 0x04000000
////////////////////////////////////////////////////////
iobase = 0x06000300;
membase = 0x04000000;
printf(" CS8900 Probe()\r\n");
dwEthernetIOBase = iobase;
dwEthernetMemBase = membase;
/*
printf(" CS2\n");
signature = IOREAD(IO_PACKET_PAGE_POINTER);
getchar();
printf(" CS1\n");
*/
do
{
signature = IOREAD(IO_PACKET_PAGE_POINTER);
printf("Signature = 0x%x\r\n", signature);
if (signature != CS8900_SIGNATURE)
{
printf("Signature Error = 0x%x\r\n", signature);
//break;
}
/* Check the EISA registration number. */
eisa_number = READ_REG1(PKTPG_EISA_NUMBER);
printf("Eisa Number = 0x%x\r\n", eisa_number);
if (eisa_number != CS8900_EISA_NUMBER)
{
printf("Eisa Number Error = 0x%x\r\n", eisa_number);
break;
}
/* Check the Product ID. */
prod_id = READ_REG1(PKTPG_PRDCT_ID_CODE);
printf("Product ID = 0x%x\r\n", prod_id);
if (( prod_id & CS8900_PRDCT_ID_MASK)!= CS8900_PRDCT_ID)
{
printf("Product ID Error = 0x%x\r\n", prod_id);
break;
}
printf("CS8900 is Detected..\n");
r = TRUE;
} while (0);
//return r;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -