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

📄 scc.c

📁 这是EBF533试验板的源代码和使用说明手册
💻 C
字号:
#include "net.h"
#include "scc.h"

void MemSet(void *dest, char c, int len){
	char *s=dest;
	char *limit = (char *)dest+len;

	while (s < limit) *s++ = c;
}	// MemSet.


static void WriteToPPR(short addr, short value){
	IO_PPPTR = addr;
	IO_PPDATA = value;
	return;
}	


static short ReadFromPPR(short addr){
	IO_PPPTR = addr;
	return IO_PPDATA;
}	


int EthTx(char *txPktBuf, int len){
	short *endPtr, *s;
	if (!(ReadFromPPR(PP_LineST) & LINK_OK)){
		return 0;
	}
	IO_TXCMD = TX_AFTER_ALL|0x9;
	IO_TXLEN = len;

	while ((ReadFromPPR(PP_BusST) & READY_FOR_TX_NOW)==0);

	for (s=(short *)txPktBuf, endPtr=(short *)(txPktBuf+len); s<endPtr; s++){
		IO_RTX_DATA = *s;
	}
	return 1;
}	

void EthRx(void){
	uchar* rxPktBuf=PktBuf;
	int		i;
	char	*s;
	short	isq, status, len, cnt;
	while ((isq=IO_ISQ)){
		if (isq & ISQ_RECEIVER_EVENT){
			status = IO_RTX_DATA;
			if ((status & RX_OK) && RX_IA_ACCEPT){
				len = IO_RTX_DATA;
				cnt = len/2 + len%2;
				for (i=0, s=(char *)rxPktBuf; i<cnt;i++){
					*((ushort *)s)++ = IO_RTX_DATA;
				}
				RxPacketHandle((char *)rxPktBuf, len);
			}
			else {
			}
		}
	}
}

int EthInit(){
	int		i;
//	MemSet((char *)IO_BASE, 0x0, 2);		

	if ((IO_PPPTR&0x7000) != 0x3000){
	//	return 0;
	}
	if (ReadFromPPR(PP_ChipID)!=0x630E){
		return 0;
	}
	WriteToPPR(PP_LineCTL, 			0x0000);
	WriteToPPR(PP_CS8900_ISAINT,	INTRQ0);
	WriteToPPR(PP_CS8900_ISADMA,	DMRQ_HIGH_IMPEDENCE);
	WriteToPPR(PP_RxCFG,	RX_OK_ENBL | RX_CRC_ERROR_ENBL);
	WriteToPPR(PP_RxCTL,	RX_OK_ACCEPT | RX_BROADCAST_ACCEPT|RX_IA_ACCEPT);
	
	WriteToPPR(PP_TxCFG,	TX_LOST_CRS_ENBL | TX_SQE_ERROR_ENBL | TX_OK_ENBL |
							TX_LATE_COL_ENBL | TX_JBR_ENBL | TX_ANY_COL_ENBL);
	WriteToPPR(PP_TxCMD,	TX_START_ALL_BYTES);
	WriteToPPR(PP_BufCFG,	0x0000);
	//WriteToPPR(PP_BusCTL,	ENABLE_IRQ | IO_CHANNEL_READY_ON);
	WriteToPPR(PP_BusCTL,	ENABLE_IRQ);//sugar laserman modified.
	WriteToPPR(PP_TestCTL,	0x0000);
	WriteToPPR(PP_TxCommand,0x00c0);
	for (i=0; i<4; i++){
		WriteToPPR(PP_LAF+i*2, 0xffff);
	}
	for (i=0; i<3; i++){
		WriteToPPR(PP_IA+i*2, *((ushort *)&(clientEther[i*2])));
	}
	WriteToPPR(PP_LineCTL,	SERIAL_RX_ON | SERIAL_TX_ON);
	return 1;
}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -