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

📄 csio.c

📁 网络单片机 让嵌入式系统上网,基于keil C. 文件名:microweb-keil-0.1
💻 C
字号:
// ***************************************************************************// An 8051 Based Web Server// csio.c: driver code for CS8900A chip// By Mason Kidd 3/14/02// ***************************************************************************#include "csio.h"#include "lcd_disp.h"extern void write_byte(unsigned char io_port, unsigned char out_data);extern unsigned char read_byte(unsigned char io_port);extern void write_word(unsigned char io_port, unsigned int out_data);extern unsigned int read_wordL(unsigned char io_port);extern unsigned int read_wordH(unsigned char io_port);void cs_init(unsigned char *my_MAC_addr){	unsigned int nReturn = 0;	    // reset the chip    write_word(IO_PPPointer, PP_SelfCTL);    write_word(IO_PPData, RESET);    // wait until chip is ready    while (!(nReturn & INITD))    {    	write_word(IO_PPPointer, PP_SelfST);    	nReturn = read_wordL(IO_PPData);    }	// setup RxCTL(0104h)	write_word(IO_PPPointer, PP_RxCTL);	write_word(IO_PPData, RX_OK_ACCEPT | RX_IA_ACCEPT | RX_BROADCAST_ACCEPT);	nReturn = read_wordL(IO_PPData);	    // write the MAC address starting at 0158h	write_word(IO_PPPointer, PP_IA);	write_word(IO_PPData, (my_MAC_addr[1] << 8) | my_MAC_addr[0]);	write_word(IO_PPPointer, PP_IA + 2);	write_word(IO_PPData, (my_MAC_addr[3] << 8) | my_MAC_addr[2]);	write_word(IO_PPPointer, PP_IA + 4);	write_word(IO_PPData, (my_MAC_addr[5] << 8) | my_MAC_addr[4]);	    // enable receive and transmit    write_word(IO_PPPointer, PP_LineCTL);    write_word(IO_PPData, SERIAL_RX_ON | SERIAL_TX_ON);}unsigned char cs_test(void){	unsigned int nReturn;		// Read from PPData port, should get 0E63h	nReturn = read_wordL(IO_PPData);       	if (nReturn != 0x630E)		return 0;             		// Read from register RxCFG(0102h), should get 3h	write_word(IO_PPPointer, PP_RxCFG);	nReturn = read_wordL(IO_PPData);		if (nReturn != 0x0003)		return 0;       	       		lcdout('O');	lcdout('K');	lcdout(' ');	lcd_crlf();		return 1;}bit rx_event_poll(void){	unsigned int nReturn = 0x0000;		write_word(IO_PPPointer, PP_RxEvent);	nReturn = read_wordL(IO_PPData);	//	write_word(IO_PPPointer, PP_TxEvent);//	nReturn = read_wordL(IO_PPData);       //	write_word(IO_PPPointer, PP_BufEvent);//	nReturn = read_wordL(IO_PPData);	if ((nReturn & RX_OK) && !(nReturn & RX_HASH))		return 1;	return 0;}unsigned int rx_packet(unsigned char *rx_buffer){	unsigned int data nStatus = 0;	unsigned int data nLength = 0;	unsigned char data i;	unsigned char data cDataL, cDataH;	    nStatus = read_wordH(IO_RxTxData);    nLength = read_wordH(IO_RxTxData);        for (i = 0; i < nLength; i += 2)    {    	cDataL = read_byte(IO_RxTxData);    	cDataH = read_byte(IO_RxTxData + 1);    	rx_buffer[i] = cDataL;    	rx_buffer[i + 1] = cDataH;    }        return nLength;}  void tx_packet(unsigned char *tx_buffer, unsigned int tx_buffer_len){	unsigned int nReturn = 0;	unsigned int i = 0;	unsigned char *tx_send = (unsigned char *)tx_buffer;		// write transmit command to TxCMD port	write_word(IO_TxCMD, 0x00C0);	// write transmit size to TxLength port	write_word(IO_TxLength, tx_buffer_len);	    // wait until space is available    while (!(nReturn & READY_FOR_TX_NOW))    {    	write_word(IO_PPPointer, PP_BusST);    	nReturn = read_wordL(IO_PPData);    }        // round odd packets up and convert to words    tx_buffer_len = (tx_buffer_len + 1) >> 1;    for (i = 0; i < tx_buffer_len; i++)    {//    	write_word(IO_RxTxData, *(tx_send++));		write_byte(IO_RxTxData, *(tx_send)); 		write_byte(IO_RxTxData + 1, *(tx_send + 1));  		tx_send += 2;    }}      

⌨️ 快捷键说明

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