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