All pastes #736217 Raw Edit

enc28j60Send/Receive

public c v1 · immutable
·published 2007-10-14 10:13 UTC
rendered paste body
#ifdef ENC28J60_USART_SPI_MODE uint8_t enc28j60ReadOp(uint8_t op, uint8_t address) {	CSACTIVE;	/* Wait for empty transmit buffer */	while ( !( UCSR0A & (1<<UDRE0)) );	// issue read command	UDR0 = op | (address & ADDR_MASK);	waitspi();	// read data	UDR0 = 0x00;	waitspi();	// do dummy read if needed (for mac and mii, see datasheet page 29)	if(address & 0x80) {		UDR0 = 0x00;		waitspi();	}		// release CS	CSPASSIVE;	return UDR0;}void enc28j60WriteOp(uint8_t op, uint8_t address, uint8_t data) {	CSACTIVE;	/* Wait for empty transmit buffer */	while ( !( UCSR0A & (1<<UDRE0)) );	// issue write command	UDR0 = op | (address & ADDR_MASK);	waitspi();	// write data	UDR0 = data;	waitspi();	CSPASSIVE;}void enc28j60ReadBuffer(uint16_t len, uint8_t* data) {	CSACTIVE;	/* Wait for empty transmit buffer */	while ( !( UCSR0A & (1<<UDRE0)) );	// issue read command	UDR0 = ENC28J60_READ_BUF_MEM;	waitspi();	while(len) {		len--;		// read data		UDR0 = 0x00;		waitspi();		*data = UDR0;		data++;	}	*data='\0';	CSPASSIVE;}void enc28j60WriteBuffer(uint16_t len, uint8_t* data) {	CSACTIVE;	/* Wait for empty transmit buffer */	while ( !( UCSR0A & (1<<UDRE0)) );	// issue write command	UDR0 = ENC28J60_WRITE_BUF_MEM;	waitspi();	while(len) {		len--;		// write data		UDR0 = *data;		data++;		waitspi();	}	CSPASSIVE;}#elseuint8_t enc28j60ReadOp(uint8_t op, uint8_t address) {	CSACTIVE;	// issue read command	SPDR = op | (address & ADDR_MASK);	waitspi();	// read data	SPDR = 0x00;	waitspi();	// do dummy read if needed (for mac and mii, see datasheet page 29)	if(address & 0x80) {		SPDR = 0x00;		waitspi();	}	// release CS	CSPASSIVE;	return(SPDR);}void enc28j60WriteOp(uint8_t op, uint8_t address, uint8_t data) {	CSACTIVE;	// issue write command	SPDR = op | (address & ADDR_MASK);	waitspi();	// write data	SPDR = data;	waitspi();	CSPASSIVE;}void enc28j60ReadBuffer(uint16_t len, uint8_t* data) {	CSACTIVE;	// issue read command	SPDR = ENC28J60_READ_BUF_MEM;	waitspi();	while(len) {		len--;		// read data		SPDR = 0x00;		waitspi();		*data = SPDR;		data++;	}	*data='\0';	CSPASSIVE;}void enc28j60WriteBuffer(uint16_t len, uint8_t* data) {	CSACTIVE;	// issue write command	SPDR = ENC28J60_WRITE_BUF_MEM;	waitspi();	while(len) {		len--;		// write data		SPDR = *data;		data++;		waitspi();	}	CSPASSIVE;}#endif