typedef xpcc::SoftwareSpi<Sclk, Mosi, Miso> Spi; typedef xpcc::Mcp2515<Spi, Cs, Int> CanDevice; static CanDevice device; static xpcc::CanConnector< CanDevice > connector(&device); // create an instance of the generated postman Postman postman; xpcc::Dispatcher dispatcher(&connector, &postman); // Default filters to receive any extended CAN frame FLASH_STORAGE(uint8_t canFilter[]) = { MCP2515_FILTER_EXTENDED(0), // Filter 0 MCP2515_FILTER_EXTENDED(0), // Filter 1 MCP2515_FILTER_EXTENDED(0), // Filter 2 MCP2515_FILTER_EXTENDED(0), // Filter 3 MCP2515_FILTER_EXTENDED(0), // Filter 4 MCP2515_FILTER_EXTENDED(0), // Filter 5 MCP2515_FILTER_EXTENDED(0), // Mask 0 MCP2515_FILTER_EXTENDED(0), // Mask 1 }; namespace component { Receiver receiver(robot::component::RECEIVER, &dispatcher); }
* MCP2515_FILTER_EXTENDED(0), // Mask 0 (for group 0) * MCP2515_FILTER_EXTENDED(0), // Mask 1 (for group 1) * }; * \endcode * * If you want to receive both 11 and 29 bit identifiers, set your filters * and masks as follows: */ prog_uint8_t can_filter[] = { // Group 0 MCP2515_FILTER(0), // Filter 0 MCP2515_FILTER(0), // Filter 1 // Group 1 MCP2515_FILTER_EXTENDED(0), // Filter 2 MCP2515_FILTER_EXTENDED(0), // Filter 3 MCP2515_FILTER_EXTENDED(0), // Filter 4 MCP2515_FILTER_EXTENDED(0), // Filter 5 MCP2515_FILTER(0), // Mask 0 (for group 0) MCP2515_FILTER_EXTENDED(0), // Mask 1 (for group 1) }; // You can receive 11 bit identifiers with either group 0 or 1. // ----------------------------------------------------------------------------- // Main loop for receiving and sending messages. int main(void) {
#define R_CNF1 (0) #else #error invalid value for MCP2515_BITRATE #endif #endif #define MCP2515_FILTER_EXTENDED(id) \ (uint8_t) ((uint32_t) (id) >> 21), \ (uint8_t)((((uint32_t) (id) >> 13) & 0xe0) | (1<<3) | \ (((uint32_t) (id) >> 16) & 0x3)), \ (uint8_t) ((uint32_t) (id) >> 8), \ (uint8_t) ((uint32_t) (id)) // ------------------------------------------------------------------------- uint8_t mcp2515_register_map[45] = { MCP2515_FILTER_EXTENDED(0x00001000), // Filter 0 MCP2515_FILTER_EXTENDED(0), // Filter 1 MCP2515_FILTER_EXTENDED(0), // Filter 2 0, // BFPCTRL 0, // TXRTSCTRL 0, // CANSTAT (read-only) (1<<REQOP2) | CLKOUT_PRESCALER_, // CANCTRL MCP2515_FILTER_EXTENDED(0), // Filter 3 MCP2515_FILTER_EXTENDED(0), // Filter 4 MCP2515_FILTER_EXTENDED(0), // Filter 5 0, // TEC (read-only) 0, // REC (read-only) 0, // CANSTAT (read-only) (1<<REQOP2) | CLKOUT_PRESCALER_, // CANCTRL MCP2515_FILTER_EXTENDED(0x3fff),// Mask 0 (for group 0) MCP2515_FILTER_EXTENDED(0x1fffffff), // Mask 1 (for group 1)