Dependents: Kamal_CAN ReadFromSerial446 USNA-UMBC-KF-02_v3-noise USNA-UMBC-KF-01
mcp2515.h@0:d8f50b1e384f, 2010-01-30 (annotated)
- Committer:
- tecnosys
- Date:
- Sat Jan 30 08:46:04 2010 +0000
- Revision:
- 0:d8f50b1e384f
- Child:
- 1:dbc44582f2f8
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tecnosys | 0:d8f50b1e384f | 1 | |
tecnosys | 0:d8f50b1e384f | 2 | #ifndef _MCP2515_H_ |
tecnosys | 0:d8f50b1e384f | 3 | #define _MCP2515_H_ |
tecnosys | 0:d8f50b1e384f | 4 | |
tecnosys | 0:d8f50b1e384f | 5 | #include <mbed.h> |
tecnosys | 0:d8f50b1e384f | 6 | #include "mcp2515_defs.h" |
tecnosys | 0:d8f50b1e384f | 7 | |
tecnosys | 0:d8f50b1e384f | 8 | #define MCPDEBUG (1) |
tecnosys | 0:d8f50b1e384f | 9 | #define MCPDEBUG_TXBUF (0) |
tecnosys | 0:d8f50b1e384f | 10 | |
tecnosys | 0:d8f50b1e384f | 11 | #define MCP_CS_PORT PORTB |
tecnosys | 0:d8f50b1e384f | 12 | #define MCP_CS_DDR DDRB |
tecnosys | 0:d8f50b1e384f | 13 | #define MCP_CS_BIT PB0 |
tecnosys | 0:d8f50b1e384f | 14 | |
tecnosys | 0:d8f50b1e384f | 15 | #define MCP_N_TXBUFFERS (3) |
tecnosys | 0:d8f50b1e384f | 16 | |
tecnosys | 0:d8f50b1e384f | 17 | #define MCP_RXBUF_0 (MCP_RXB0SIDH) |
tecnosys | 0:d8f50b1e384f | 18 | #define MCP_RXBUF_1 (MCP_RXB1SIDH) |
tecnosys | 0:d8f50b1e384f | 19 | |
tecnosys | 0:d8f50b1e384f | 20 | #define MCP_TXBUF_0 (MCP_TXB0SIDH) |
tecnosys | 0:d8f50b1e384f | 21 | #define MCP_TXBUF_1 (MCP_TXB1SIDH) |
tecnosys | 0:d8f50b1e384f | 22 | #define MCP_TXBUF_2 (MCP_TXB2SIDH) |
tecnosys | 0:d8f50b1e384f | 23 | |
tecnosys | 0:d8f50b1e384f | 24 | // #define MCP2515_SELECT() (SPI_SS_LOW()) |
tecnosys | 0:d8f50b1e384f | 25 | // #define MCP2515_UNSELECT() (SPI_SS_HIGH()) |
tecnosys | 0:d8f50b1e384f | 26 | |
tecnosys | 0:d8f50b1e384f | 27 | #define MCP2515_SELECT() ( MCP_CS_PORT &= ~(1<<MCP_CS_BIT) ) |
tecnosys | 0:d8f50b1e384f | 28 | #define MCP2515_UNSELECT() ( MCP_CS_PORT |= (1<<MCP_CS_BIT) ) |
tecnosys | 0:d8f50b1e384f | 29 | |
tecnosys | 0:d8f50b1e384f | 30 | #define MCP2515_OK (0) |
tecnosys | 0:d8f50b1e384f | 31 | #define MCP2515_FAIL (1) |
tecnosys | 0:d8f50b1e384f | 32 | #define MCP_ALLTXBUSY (2) |
tecnosys | 0:d8f50b1e384f | 33 | |
tecnosys | 0:d8f50b1e384f | 34 | typedef unsigned char u8; |
tecnosys | 0:d8f50b1e384f | 35 | |
tecnosys | 0:d8f50b1e384f | 36 | // Connections to the chip |
tecnosys | 0:d8f50b1e384f | 37 | //volatile bit mcp2515_rst @ PORTC . 1; |
tecnosys | 0:d8f50b1e384f | 38 | //volatile bit mcp2515_rst_tris @ TRISC . 1; |
tecnosys | 0:d8f50b1e384f | 39 | |
tecnosys | 0:d8f50b1e384f | 40 | // Function declarations |
tecnosys | 0:d8f50b1e384f | 41 | /* |
tecnosys | 0:d8f50b1e384f | 42 | void can_reset(); |
tecnosys | 0:d8f50b1e384f | 43 | char can_read_register(char reg); |
tecnosys | 0:d8f50b1e384f | 44 | void can_write_bits(char address, char data, char mask); |
tecnosys | 0:d8f50b1e384f | 45 | void can_init(short id); |
tecnosys | 0:d8f50b1e384f | 46 | char can_peek_message(); |
tecnosys | 0:d8f50b1e384f | 47 | char can_rx_byte(); |
tecnosys | 0:d8f50b1e384f | 48 | void can_set_id(short id); |
tecnosys | 0:d8f50b1e384f | 49 | void can_init_buffer(); |
tecnosys | 0:d8f50b1e384f | 50 | void can_load_byte(char input); |
tecnosys | 0:d8f50b1e384f | 51 | void can_tx_buffer(); |
tecnosys | 0:d8f50b1e384f | 52 | void can_read_status(); |
tecnosys | 0:d8f50b1e384f | 53 | */ |
tecnosys | 0:d8f50b1e384f | 54 | |
tecnosys | 0:d8f50b1e384f | 55 | #include "mbed.h" |
tecnosys | 0:d8f50b1e384f | 56 | #include "SPI.h" |
tecnosys | 0:d8f50b1e384f | 57 | class mcp2515 { |
tecnosys | 0:d8f50b1e384f | 58 | public: |
tecnosys | 0:d8f50b1e384f | 59 | mcp2515(PinName mosi, PinName miso, PinName clk, PinName ncs); |
tecnosys | 0:d8f50b1e384f | 60 | // float read (void); |
tecnosys | 0:d8f50b1e384f | 61 | // void setThigh (float); |
tecnosys | 0:d8f50b1e384f | 62 | // void setTlow (float); |
tecnosys | 0:d8f50b1e384f | 63 | // float getThigh (void); |
tecnosys | 0:d8f50b1e384f | 64 | // float getTlow (void); |
tecnosys | 0:d8f50b1e384f | 65 | virtual void _reset(); |
tecnosys | 0:d8f50b1e384f | 66 | uint8_t configRate(const uint8_t canSpeed); |
tecnosys | 0:d8f50b1e384f | 67 | void setRegister(const uint8_t address, const uint8_t value); |
tecnosys | 0:d8f50b1e384f | 68 | |
tecnosys | 0:d8f50b1e384f | 69 | uint8_t readRegister(const uint8_t address); |
tecnosys | 0:d8f50b1e384f | 70 | void modifyRegister(const uint8_t address, const uint8_t mask, const uint8_t data); |
tecnosys | 0:d8f50b1e384f | 71 | uint8_t setCANCTRL_Mode(uint8_t newmode); |
tecnosys | 0:d8f50b1e384f | 72 | uint8_t init(const uint8_t canSpeed); |
tecnosys | 0:d8f50b1e384f | 73 | void initCANBuffers(void); |
tecnosys | 0:d8f50b1e384f | 74 | void setRegisterS(const uint8_t address, const uint8_t values[], const uint8_t n); |
tecnosys | 0:d8f50b1e384f | 75 | void write_can_id( const uint8_t mcp_addr, const uint8_t ext, const uint32_t can_id ); |
tecnosys | 0:d8f50b1e384f | 76 | // |
tecnosys | 0:d8f50b1e384f | 77 | |
tecnosys | 0:d8f50b1e384f | 78 | void readRegisterS(const uint8_t address, uint8_t values[], const uint8_t n); |
tecnosys | 0:d8f50b1e384f | 79 | uint8_t readXXStatus_helper(const uint8_t cmd); |
tecnosys | 0:d8f50b1e384f | 80 | uint8_t readStatus(void); |
tecnosys | 0:d8f50b1e384f | 81 | uint8_t RXStatus(void); |
tecnosys | 0:d8f50b1e384f | 82 | |
tecnosys | 0:d8f50b1e384f | 83 | void read_can_id( const uint8_t mcp_addr, uint8_t* ext, uint32_t* can_id ); |
tecnosys | 0:d8f50b1e384f | 84 | void read_canMsg( const uint8_t buffer_sidh_addr, CANMessage* msg); |
tecnosys | 0:d8f50b1e384f | 85 | void write_canMsg( const uint8_t buffer_sidh_addr, CANMessage* msg); |
tecnosys | 0:d8f50b1e384f | 86 | |
tecnosys | 0:d8f50b1e384f | 87 | uint8_t getNextFreeTXBuf(uint8_t *txbuf_n); |
tecnosys | 0:d8f50b1e384f | 88 | |
tecnosys | 0:d8f50b1e384f | 89 | void start_transmit(const uint8_t buffer_sidh_addr); |
tecnosys | 0:d8f50b1e384f | 90 | |
tecnosys | 0:d8f50b1e384f | 91 | SPI _spi; |
tecnosys | 0:d8f50b1e384f | 92 | DigitalOut _ncs; |
tecnosys | 0:d8f50b1e384f | 93 | // Private functions |
tecnosys | 0:d8f50b1e384f | 94 | private : |
tecnosys | 0:d8f50b1e384f | 95 | void _select (void); |
tecnosys | 0:d8f50b1e384f | 96 | void _deselect (void); |
tecnosys | 0:d8f50b1e384f | 97 | int status(); |
tecnosys | 0:d8f50b1e384f | 98 | void _pollbusy() ; |
tecnosys | 0:d8f50b1e384f | 99 | |
tecnosys | 0:d8f50b1e384f | 100 | uint8_t _spi_readwrite(uint8_t data); |
tecnosys | 0:d8f50b1e384f | 101 | uint8_t _spi_read(void); |
tecnosys | 0:d8f50b1e384f | 102 | |
tecnosys | 0:d8f50b1e384f | 103 | |
tecnosys | 0:d8f50b1e384f | 104 | }; |
tecnosys | 0:d8f50b1e384f | 105 | |
tecnosys | 0:d8f50b1e384f | 106 | #endif // _MCP2515_H_ |