diff --git a/mcp2515.cpp b/mcp2515.cpp index 54e5f5a..58a3b4d 100644 --- a/mcp2515.cpp +++ b/mcp2515.cpp @@ -49,15 +49,22 @@ 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}; + // 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; } @@ -69,7 +76,7 @@ MCP2515::ERROR MCP2515::reset(void) if (result != ERROR_OK) { return result; } - }*/ + } return ERROR_OK; } 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;