From aee61dd534fcc61e38ac0066fb3006afcc8dff4a Mon Sep 17 00:00:00 2001 From: jxltom Date: Fri, 20 Mar 2020 14:45:36 +0800 Subject: [PATCH 1/2] Set RXF0 for RXB0 and RXF1 for RXB1 --- mcp2515.cpp | 10 +++++++--- mcp2515.h | 4 ++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/mcp2515.cpp b/mcp2515.cpp index 54e5f5a..5e2fcfb 100644 --- a/mcp2515.cpp +++ b/mcp2515.cpp @@ -49,10 +49,14 @@ MCP2515::ERROR MCP2515::reset(void) setRegister(MCP_CANINTE, CANINTF_RX0IF | CANINTF_RX1IF | CANINTF_ERRIF | CANINTF_MERRF); + // receives all valid messages using either Standard or Extended Identifiers that + // meet filter criteria. RXF0 is applied for RXB0, RXF1 is applied for RXB1 modifyRegister(MCP_RXB0CTRL, - RXBnCTRL_RXM_MASK | RXB0CTRL_BUKT, - RXBnCTRL_RXM_STDEXT | RXB0CTRL_BUKT); - modifyRegister(MCP_RXB1CTRL, RXBnCTRL_RXM_MASK, RXBnCTRL_RXM_STDEXT); + RXBnCTRL_RXM_MASK | RXB0CTRL_BUKT | RXB0CTRL_FILHIT_MASK, + RXBnCTRL_RXM_STDEXT | RXB0CTRL_BUKT | RXB0CTRL_FILHIT); + modifyRegister(MCP_RXB1CTRL, + RXBnCTRL_RXM_MASK | RXB1CTRL_FILHIT_MASK, + RXBnCTRL_RXM_STDEXT | RXB1CTRL_FILHIT); // clear filters and masks /*RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; diff --git a/mcp2515.h b/mcp2515.h index 7e38d18..2a4f8ef 100644 --- a/mcp2515.h +++ b/mcp2515.h @@ -292,6 +292,10 @@ class MCP2515 static const uint8_t RXBnCTRL_RXM_MASK = 0x60; static const uint8_t RXBnCTRL_RTR = 0x08; static const uint8_t RXB0CTRL_BUKT = 0x04; + static const uint8_t RXB0CTRL_FILHIT_MASK = 0x03; + static const uint8_t RXB1CTRL_FILHIT_MASK = 0x07; + static const uint8_t RXB0CTRL_FILHIT = 0x00; + static const uint8_t RXB1CTRL_FILHIT = 0x01; static const uint8_t MCP_SIDH = 0; static const uint8_t MCP_SIDL = 1; From a1a6a32130213cab49d433576cb3a827990e52b8 Mon Sep 17 00:00:00 2001 From: jxltom Date: Fri, 20 Mar 2020 14:46:29 +0800 Subject: [PATCH 2/2] Do not filter sid for RXF0 and not filter eid for RXF1 --- mcp2515.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mcp2515.cpp b/mcp2515.cpp index 5e2fcfb..58a3b4d 100644 --- a/mcp2515.cpp +++ b/mcp2515.cpp @@ -59,9 +59,12 @@ MCP2515::ERROR MCP2515::reset(void) RXBnCTRL_RXM_STDEXT | RXB1CTRL_FILHIT); // clear filters and masks - /*RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; + // do not filter any standard frames for RXF0 used by RXB0 + // do not filter any extended frames for RXF1 used by RXB1 + RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; for (int i=0; i<6; i++) { - ERROR result = setFilter(filters[i], true, 0); + bool ext = (i == 1); + ERROR result = setFilter(filters[i], ext, 0); if (result != ERROR_OK) { return result; } @@ -73,7 +76,7 @@ MCP2515::ERROR MCP2515::reset(void) if (result != ERROR_OK) { return result; } - }*/ + } return ERROR_OK; }