⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cs8900.org.c

📁 三星s3c2460开发板完整功能测试代码
💻 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 + -