web_init.c

来自「裸板的tftp客户端」· C语言 代码 · 共 78 行

C
78
字号
#include "./include/web_init.h"#include "./include/myout.h"U16 get_reg_init_bus (U32 regno){	// force 16 bit busmode 	char c;	c = CS8900_BUS16_0;	c = CS8900_BUS16_1;	c = CS8900_BUS16_0;	c = CS8900_BUS16_1;	c = CS8900_BUS16_0;	CS8900_PPTR = regno;	return (U16) CS8900_PDATA;}U16 get_reg (U32 regno){	CS8900_PPTR = regno;	return (U16) CS8900_PDATA;}void put_reg (U32 regno, U16 val){	CS8900_PPTR = regno;	CS8900_PDATA = val;}void eth_reset (void){		// reset NIC 	put_reg (PP_SelfCTL, get_reg (PP_SelfCTL) | PP_SelfCTL_Reset);	// Wait until the chip is reset 	while ((( get_reg(PP_SelfSTAT)) & PP_SelfSTAT_InitD) !=  PP_SelfSTAT_InitD);}void eth_reginit (void){	// receive only error free packets addressed to this card 	put_reg (PP_RxCTL, PP_RxCTL_IA | PP_RxCTL_Broadcast | PP_RxCTL_RxOK | PP_RxCTL_Promiscuous);	// do not generate any interrupts on receive operations 	put_reg (PP_RxCFG, 0);	// do not generate any interrupts on transmit operations 	put_reg (PP_TxCFG, 0);	// do not generate any interrupts on buffer operations 	put_reg (PP_BufCFG, 0);	// enable transmitter/receiver mode 	put_reg (PP_LineCTL, PP_LineCTL_Rx | PP_LineCTL_Tx);	put_reg (PP_BusCtl, 0);}U32 eth_init (U8 *Mac){	// verify chip id 	if (get_reg_init_bus (PP_ChipID) != 0x630e) {		MyOut("%s","CS8900 Ethernet chip not found?!");		return 0;	}	eth_reset ();	// set the ethernet address 	put_reg (PP_IA + 0, Mac[0] | (Mac[1] << 8));	put_reg (PP_IA + 2, Mac[2] | (Mac[3] << 8));	put_reg (PP_IA + 4, Mac[4] | (Mac[5] << 8));	eth_reginit ();	return 0;}

⌨️ 快捷键说明

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