Byggern
mcp2515.h
1 #pragma once
2 
3 #include "../spi/spi.h"
4 #include "avr/interrupt.h"
5 #include "../can/can.h"
6 
7 #ifdef __AVR_ATmega162__
8 
9 #define MCP2515_INT INT0_vect
10 
11 #else
12 
13 #define MCP2515_INT INT4_vect
14 
15 #endif
16 
17 ISR(MCP2515_INT);
18 
32 class MCP2515: public CAN{
33 
34 private:
35 
39  void RequestToSend();
40 
46  void WriteToRegister(uint8_t register_address, uint8_t byte);
47 
53  void ReadFromRegister(uint8_t register_address, uint8_t &byte);
54 
59  void Reset();
60 
68  void BitModify(uint8_t register_address, uint8_t mask, uint8_t data);
69 
75  void ReadStatus(uint8_t &byte);
76 
81  void LoadTxFrame(CanMessage &message);
82 
88  void RxStatus(uint8_t &byte);
89 
94  void ReadRxFrame(CanMessage &message);
95 
99  MCP2515(){};
100 
105 
109  volatile bool clear_to_send = true;
110 
111 public:
112 
117  static MCP2515& GetInstance(){
118  static MCP2515 instance;
119  return instance;
120  }
121 
125  MCP2515(const MCP2515&) = delete;
126 
130  friend void MCP2515_INT();
131 
136  void SendMessage(CanMessage &message);
137 
142  void SetLoopback();
143 
148  void SetNormal();
149 
155  void Initialize(SPI::SPI *spi, uint16_t identifier);
156 };
void SetLoopback()
Definition: mcp2515.cpp:94
Struct defining a CAN Message.
Definition: can.h:6
friend void MCP2515_INT()
Definition: mcp2515.cpp:5
SPI::SPI * spi_driver
Definition: mcp2515.h:99
void ReadRxFrame(CanMessage &message)
Definition: mcp2515.cpp:168
void Reset()
Definition: mcp2515.cpp:83
A singleton class which implements the communication between the AVR and the MCP2515.
Definition: mcp2515.h:32
void BitModify(uint8_t register_address, uint8_t mask, uint8_t data)
Definition: mcp2515.cpp:87
void RequestToSend()
Definition: mcp2515.cpp:79
void ReadStatus(uint8_t &byte)
Definition: mcp2515.cpp:113
void SetNormal()
Definition: mcp2515.cpp:120
void Initialize(SPI::SPI *spi, uint16_t identifier)
Definition: mcp2515.cpp:40
void SendMessage(CanMessage &message)
Definition: mcp2515.cpp:212
static MCP2515 & GetInstance()
Definition: mcp2515.h:117
An SPI driver which implements the AVR SPI interface.
Definition: spi.h:60
volatile bool clear_to_send
Definition: mcp2515.h:109
void RxStatus(uint8_t &byte)
Definition: mcp2515.cpp:161
void WriteToRegister(uint8_t register_address, uint8_t byte)
Definition: mcp2515.cpp:100
MCP2515()
Definition: mcp2515.h:99
void LoadTxFrame(CanMessage &message)
Definition: mcp2515.cpp:126
Purely virtual class defining a CAN interface.
Definition: can.h:34
void ReadFromRegister(uint8_t register_address, uint8_t &byte)
Definition: mcp2515.cpp:106