void Enc28J60Network::writeOp(uint8_t op, uint8_t address, uint8_t data) { CSACTIVE; // issue write command SPI.transfer(op | (address & ADDR_MASK)); SPI.transfer(data); CSPASSIVE; }
void Enc28J60Network::writeByte(uint16_t addr, uint8_t data) { writeRegPair(EWRPTL, addr); CSACTIVE; SPI.transfer(ENC28J60_WRITE_BUF_MEM); SPI.transfer(data); CSPASSIVE; }
uint8_t Enc28J60Network::readByte(uint16_t addr) { writeRegPair(ERDPTL, addr); CSACTIVE; SPI.transfer(ENC28J60_READ_BUF_MEM); uint8_t data = SPI.transfer(0x00); CSPASSIVE; return data; }
void Enc28J60Network::writeBuffer(uint16_t len, uint8_t* data) { CSACTIVE; // issue write command SPI.transfer(ENC28J60_WRITE_BUF_MEM); while (len--) { SPI.transfer(*data++); } CSPASSIVE; }
void Enc28J60Network::readBuffer(uint16_t len, uint8_t* data) { CSACTIVE; // issue read command SPI.transfer(ENC28J60_READ_BUF_MEM); while (len--) { *data++ = SPI.transfer(0x00); } CSPASSIVE; }
uint8_t Enc28J60Network::readOp(uint8_t op, uint8_t address) { CSACTIVE; // issue read command SPI.transfer(op | (address & ADDR_MASK)); byte result = SPI.transfer(0x00); if (address & 0x80) result = SPI.transfer(0x00); CSPASSIVE; return result; }
/** Receive a byte from the card */ static uint8_t spiRec(void) { #ifndef USE_SPI_LIB spiSend(0XFF); return SPDR; #else return SPI_for_SD.transfer(0xFF); #endif }
/** Send a byte to the card */ static void spiSend(uint8_t b) { #ifndef USE_SPI_LIB SPDR = b; while (!(SPSR & (1 << SPIF))); #else SPI_for_SD.transfer(b); #endif }