From fc85784f557a9bbcc46ddb57ced4115fad73aa1b Mon Sep 17 00:00:00 2001 From: Nicholas Humfrey Date: Thu, 23 Aug 2018 09:16:41 +0100 Subject: [PATCH] Switch to using Arduino SPI library --- src/enc28j60.cpp | 92 +++++++++++++++++------------------------------- 1 file changed, 32 insertions(+), 60 deletions(-) diff --git a/src/enc28j60.cpp b/src/enc28j60.cpp index e44b61c..9acd96e 100644 --- a/src/enc28j60.cpp +++ b/src/enc28j60.cpp @@ -13,6 +13,7 @@ #else #include // Arduino 0022 #endif +#include #include "enc28j60.h" uint16_t ENC28J60::bufferSize; @@ -226,78 +227,55 @@ bool ENC28J60::promiscuous_enabled = false; // (note: maximum ethernet frame length would be 1518) #define MAX_FRAMELEN 1500 -#define FULL_SPEED 1 // switch to full-speed SPI for bulk transfers - static byte Enc28j60Bank; static byte selectPin; -void ENC28J60::initSPI () { - pinMode(SS, OUTPUT); - digitalWrite(SS, HIGH); - pinMode(MOSI, OUTPUT); - pinMode(SCK, OUTPUT); - pinMode(MISO, INPUT); +// The ENC28J60 SPI Interface supports clock speeds up to 20 MHz +static const SPISettings spiSettings(20000000, MSBFIRST, SPI_MODE0); - digitalWrite(MOSI, HIGH); - digitalWrite(MOSI, LOW); - digitalWrite(SCK, LOW); - SPCR = bit(SPE) | bit(MSTR); // 8 MHz @ 16 - bitSet(SPSR, SPI2X); +void ENC28J60::initSPI() { + pinMode(selectPin, OUTPUT); + digitalWrite(selectPin, HIGH); + + SPI.begin(); } -static void enableChip () { - cli(); +static void enableChip() { digitalWrite(selectPin, LOW); + SPI.beginTransaction(spiSettings); } -static void disableChip () { +static void disableChip() { + SPI.endTransaction(); digitalWrite(selectPin, HIGH); - sei(); } -static void xferSPI (byte data) { - SPDR = data; - while (!(SPSR&(1<