Dependents:   Kamal_CAN ReadFromSerial446 USNA-UMBC-KF-02_v3-noise USNA-UMBC-KF-01

mcp2515.h

Committer:
tecnosys
Date:
2010-01-30
Revision:
0:d8f50b1e384f
Child:
1:dbc44582f2f8

File content as of revision 0:d8f50b1e384f:


#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_