MCP2515 CAN library
Fork of mcp2515 by
Diff: mcp2515.h
- Revision:
- 0:d8f50b1e384f
- Child:
- 1:dbc44582f2f8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mcp2515.h Sat Jan 30 08:46:04 2010 +0000 @@ -0,0 +1,106 @@ + +#ifndef _MCP2515_H_ +#define _MCP2515_H_ + +#include <mbed.h> +#include "mcp2515_defs.h" + +#define MCPDEBUG (1) +#define MCPDEBUG_TXBUF (0) + +#define MCP_CS_PORT PORTB +#define MCP_CS_DDR DDRB +#define MCP_CS_BIT PB0 + +#define MCP_N_TXBUFFERS (3) + +#define MCP_RXBUF_0 (MCP_RXB0SIDH) +#define MCP_RXBUF_1 (MCP_RXB1SIDH) + +#define MCP_TXBUF_0 (MCP_TXB0SIDH) +#define MCP_TXBUF_1 (MCP_TXB1SIDH) +#define MCP_TXBUF_2 (MCP_TXB2SIDH) + +// #define MCP2515_SELECT() (SPI_SS_LOW()) +// #define MCP2515_UNSELECT() (SPI_SS_HIGH()) + +#define MCP2515_SELECT() ( MCP_CS_PORT &= ~(1<<MCP_CS_BIT) ) +#define MCP2515_UNSELECT() ( MCP_CS_PORT |= (1<<MCP_CS_BIT) ) + +#define MCP2515_OK (0) +#define MCP2515_FAIL (1) +#define MCP_ALLTXBUSY (2) + +typedef unsigned char u8; + +// Connections to the chip +//volatile bit mcp2515_rst @ PORTC . 1; +//volatile bit mcp2515_rst_tris @ TRISC . 1; + +// Function declarations +/* +void can_reset(); +char can_read_register(char reg); +void can_write_bits(char address, char data, char mask); +void can_init(short id); +char can_peek_message(); +char can_rx_byte(); +void can_set_id(short id); +void can_init_buffer(); +void can_load_byte(char input); +void can_tx_buffer(); +void can_read_status(); +*/ + +#include "mbed.h" +#include "SPI.h" + class mcp2515 { + public: + mcp2515(PinName mosi, PinName miso, PinName clk, PinName ncs); + // float read (void); + // void setThigh (float); + // void setTlow (float); + // float getThigh (void); + // float getTlow (void); + virtual void _reset(); + uint8_t configRate(const uint8_t canSpeed); + void setRegister(const uint8_t address, const uint8_t value); + + uint8_t readRegister(const uint8_t address); + void modifyRegister(const uint8_t address, const uint8_t mask, const uint8_t data); + uint8_t setCANCTRL_Mode(uint8_t newmode); + uint8_t init(const uint8_t canSpeed); + void initCANBuffers(void); + void setRegisterS(const uint8_t address, const uint8_t values[], const uint8_t n); + void write_can_id( const uint8_t mcp_addr, const uint8_t ext, const uint32_t can_id ); + // + + void readRegisterS(const uint8_t address, uint8_t values[], const uint8_t n); + uint8_t readXXStatus_helper(const uint8_t cmd); + uint8_t readStatus(void); + uint8_t RXStatus(void); + + void read_can_id( const uint8_t mcp_addr, uint8_t* ext, uint32_t* can_id ); + void read_canMsg( const uint8_t buffer_sidh_addr, CANMessage* msg); + void write_canMsg( const uint8_t buffer_sidh_addr, CANMessage* msg); + + uint8_t getNextFreeTXBuf(uint8_t *txbuf_n); + + void start_transmit(const uint8_t buffer_sidh_addr); + + SPI _spi; + DigitalOut _ncs; + // Private functions + private : + void _select (void); + void _deselect (void); + int status(); + void _pollbusy() ; + + uint8_t _spi_readwrite(uint8_t data); + uint8_t _spi_read(void); + + + }; + +#endif // _MCP2515_H_