From 6944090b06db57fdc28faf13c3d6c85352cda05e Mon Sep 17 00:00:00 2001 From: Miles Frankland Date: Tue, 10 Dec 2019 08:58:16 +0000 Subject: [PATCH 1/2] Add begin command and oneshot command. Fix SPI.begin issue --- mcp2515.cpp | 15 ++++++++++++--- mcp2515.h | 4 +++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/mcp2515.cpp b/mcp2515.cpp index cc6e29e..bbe62b9 100644 --- a/mcp2515.cpp +++ b/mcp2515.cpp @@ -13,11 +13,9 @@ const struct MCP2515::RXBn_REGS MCP2515::RXB[N_RXBUFFERS] = { MCP2515::MCP2515(const uint8_t _CS) { - SPI.begin(); - SPICS = _CS; pinMode(SPICS, OUTPUT); - endSPI(); + digitalWrite(SPICS, HIGH); } void MCP2515::startSPI() { @@ -30,6 +28,12 @@ void MCP2515::endSPI() { SPI.endTransaction(); } +MCP2515::ERROR MCP2515::begin(void) { + SPI.begin(); + reset(); + return ERROR_OK; +} + MCP2515::ERROR MCP2515::reset(void) { startSPI(); @@ -162,6 +166,11 @@ MCP2515::ERROR MCP2515::setNormalMode() return setMode(CANCTRL_REQOP_NORMAL); } +MCP2515::ERROR MCP2515::setOneShotMode() +{ + return setMode(CANCTRL_REQOP_ONESHOT); +} + MCP2515::ERROR MCP2515::setMode(const CANCTRL_REQOP_MODE mode) { modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode); diff --git a/mcp2515.h b/mcp2515.h index 7e38d18..aba4b5d 100644 --- a/mcp2515.h +++ b/mcp2515.h @@ -274,7 +274,7 @@ class MCP2515 CANCTRL_REQOP_LOOPBACK = 0x40, CANCTRL_REQOP_LISTENONLY = 0x60, CANCTRL_REQOP_CONFIG = 0x80, - CANCTRL_REQOP_POWERUP = 0xE0 + CANCTRL_REQOP_ONESHOT = 0x08 }; static const uint8_t CANSTAT_OPMOD = 0xE0; @@ -458,11 +458,13 @@ class MCP2515 public: MCP2515(const uint8_t _CS); ERROR reset(void); + ERROR begin(void); ERROR setConfigMode(); ERROR setListenOnlyMode(); ERROR setSleepMode(); ERROR setLoopbackMode(); ERROR setNormalMode(); + ERROR setOneShotMode(); ERROR setClkOut(const CAN_CLKOUT divisor); ERROR setBitrate(const CAN_SPEED canSpeed); ERROR setBitrate(const CAN_SPEED canSpeed, const CAN_CLOCK canClock); From 057b322779c82aee465cb86607856170fc5c7940 Mon Sep 17 00:00:00 2001 From: Miles Frankland Date: Tue, 10 Dec 2019 09:04:16 +0000 Subject: [PATCH 2/2] Update readme and examples for new begin command --- README.md | 2 +- examples/CAN_SpeedTest/CAN_SpeedTest.ino | 3 +-- examples/CAN_read/CAN_read.ino | 3 +-- examples/CAN_write/CAN_write.ino | 3 +-- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index c37cb27..70e8912 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ Example of initialization ```C++ MCP2515 mcp2515(10); -mcp2515.reset(); +mcp2515.begin(); mcp2515.setBitrate(CAN_125KBPS); mcp2515.setLoopbackMode(); ``` diff --git a/examples/CAN_SpeedTest/CAN_SpeedTest.ino b/examples/CAN_SpeedTest/CAN_SpeedTest.ino index 140ac2b..fcc6074 100644 --- a/examples/CAN_SpeedTest/CAN_SpeedTest.ino +++ b/examples/CAN_SpeedTest/CAN_SpeedTest.ino @@ -9,9 +9,8 @@ unsigned long oldTime = 0; void setup() { Serial.begin(115200); - SPI.begin(); - mcp2515.reset(); + mcp2515.begin(); mcp2515.setBitrate(CAN_125KBPS); mcp2515.setNormalMode(); diff --git a/examples/CAN_read/CAN_read.ino b/examples/CAN_read/CAN_read.ino index b43e56a..21bdc39 100644 --- a/examples/CAN_read/CAN_read.ino +++ b/examples/CAN_read/CAN_read.ino @@ -7,9 +7,8 @@ MCP2515 mcp2515(10); void setup() { Serial.begin(115200); - SPI.begin(); - mcp2515.reset(); + mcp2515.begin(); mcp2515.setBitrate(CAN_125KBPS); mcp2515.setNormalMode(); diff --git a/examples/CAN_write/CAN_write.ino b/examples/CAN_write/CAN_write.ino index da1fdf9..bfdeb3a 100644 --- a/examples/CAN_write/CAN_write.ino +++ b/examples/CAN_write/CAN_write.ino @@ -32,9 +32,8 @@ void setup() { while (!Serial); Serial.begin(115200); - SPI.begin(); - mcp2515.reset(); + mcp2515.begin(); mcp2515.setBitrate(CAN_125KBPS); mcp2515.setNormalMode();