Skip to content

Commit 97f4d86

Browse files
committed
Baudrates 5k, 10k, 20k, 50k, 100k, 125k, 250k, 500k, & 1000k are now supported
1 parent 1487658 commit 97f4d86

File tree

7 files changed

+168
-6
lines changed

7 files changed

+168
-6
lines changed

examples/SparkFun_CAN_Demo/SparkFun_CAN_Demo.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void setup(){
3838
Serial.begin(9600);
3939
Serial.println("CAN-Bus Demo");
4040

41-
if(Canbus.init(CANSPEED_500)) /* Initialise MCP2515 CAN controller at the specified speed */
41+
if(Canbus.init(CAN_500KBPS)) /* Initialise MCP2515 CAN controller at the specified speed */
4242
{
4343
Serial.println("CAN Init ok");
4444
} else

examples/SparkFun_ECU_Demo/SparkFun_ECU_Demo.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ void setup() {
122122
digitalWrite(LED3, LOW);
123123

124124
//Initialize CAN Controller
125-
if(Canbus.init(CANSPEED_500)) /* Initialize MCP2515 CAN controller at the specified speed */
125+
if(Canbus.init(CAN_500KBPS)) /* Initialize MCP2515 CAN controller at the specified speed */
126126
{
127127
clear_lcd();
128128
lcd.print("CAN Init ok");

src/Canbus.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@
77
#ifndef canbus__h
88
#define canbus__h
99

10-
#define CANSPEED_125 7 // CAN speed at 125 kbps
11-
#define CANSPEED_250 3 // CAN speed at 250 kbps
12-
#define CANSPEED_500 1 // CAN speed at 500 kbps
13-
10+
#include "speeds.h"
1411

1512
#define ENGINE_COOLANT_TEMP 0x05
1613
#define ENGINE_RPM 0x0C

src/mcp2515.c

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,90 @@ uint8_t mcp2515_read_status(uint8_t type)
120120
uint8_t mcp2515_init(uint8_t speed)
121121
{
122122

123+
uint8_t cfg1, cfg2, cfg3;
124+
switch (speed)
125+
{
126+
case (CAN_5KBPS):
127+
cfg1 = MCP_16MHz_5kBPS_CFG1;
128+
cfg2 = MCP_16MHz_5kBPS_CFG2;
129+
cfg3 = MCP_16MHz_5kBPS_CFG3;
130+
break;
131+
132+
case (CAN_10KBPS):
133+
cfg1 = MCP_16MHz_10kBPS_CFG1;
134+
cfg2 = MCP_16MHz_10kBPS_CFG2;
135+
cfg3 = MCP_16MHz_10kBPS_CFG3;
136+
break;
137+
138+
case (CAN_20KBPS):
139+
cfg1 = MCP_16MHz_20kBPS_CFG1;
140+
cfg2 = MCP_16MHz_20kBPS_CFG2;
141+
cfg3 = MCP_16MHz_20kBPS_CFG3;
142+
break;
143+
144+
case (CAN_31K25BPS):
145+
cfg1 = MCP_16MHz_31k25BPS_CFG1;
146+
cfg2 = MCP_16MHz_31k25BPS_CFG2;
147+
cfg3 = MCP_16MHz_31k25BPS_CFG3;
148+
break;
149+
150+
case (CAN_40KBPS):
151+
cfg1 = MCP_16MHz_40kBPS_CFG1;
152+
cfg2 = MCP_16MHz_40kBPS_CFG2;
153+
cfg3 = MCP_16MHz_40kBPS_CFG3;
154+
break;
155+
156+
case (CAN_50KBPS):
157+
cfg1 = MCP_16MHz_50kBPS_CFG1;
158+
cfg2 = MCP_16MHz_50kBPS_CFG2;
159+
cfg3 = MCP_16MHz_50kBPS_CFG3;
160+
break;
161+
162+
case (CAN_80KBPS):
163+
cfg1 = MCP_16MHz_80kBPS_CFG1;
164+
cfg2 = MCP_16MHz_80kBPS_CFG2;
165+
cfg3 = MCP_16MHz_80kBPS_CFG3;
166+
break;
167+
168+
case (CAN_100KBPS):
169+
cfg1 = MCP_16MHz_100kBPS_CFG1;
170+
cfg2 = MCP_16MHz_100kBPS_CFG2;
171+
cfg3 = MCP_16MHz_100kBPS_CFG3;
172+
break;
173+
174+
case (CAN_125KBPS):
175+
cfg1 = MCP_16MHz_125kBPS_CFG1;
176+
cfg2 = MCP_16MHz_125kBPS_CFG2;
177+
cfg3 = MCP_16MHz_125kBPS_CFG3;
178+
break;
179+
180+
case (CAN_200KBPS):
181+
cfg1 = MCP_16MHz_200kBPS_CFG1;
182+
cfg2 = MCP_16MHz_200kBPS_CFG2;
183+
cfg3 = MCP_16MHz_200kBPS_CFG3;
184+
break;
185+
186+
case (CAN_250KBPS):
187+
cfg1 = MCP_16MHz_250kBPS_CFG1;
188+
cfg2 = MCP_16MHz_250kBPS_CFG2;
189+
cfg3 = MCP_16MHz_250kBPS_CFG3;
190+
break;
191+
192+
case (CAN_500KBPS):
193+
cfg1 = MCP_16MHz_500kBPS_CFG1;
194+
cfg2 = MCP_16MHz_500kBPS_CFG2;
195+
cfg3 = MCP_16MHz_500kBPS_CFG3;
196+
break;
197+
198+
case (CAN_1000KBPS):
199+
cfg1 = MCP_16MHz_1000kBPS_CFG1;
200+
cfg2 = MCP_16MHz_1000kBPS_CFG2;
201+
cfg3 = MCP_16MHz_1000kBPS_CFG3;
202+
break;
203+
204+
default:
205+
break;
206+
}
123207

124208
SET(MCP2515_CS);
125209
SET_OUTPUT(MCP2515_CS);
@@ -162,11 +246,17 @@ uint8_t mcp2515_init(uint8_t speed)
162246
spi_putc((1<<BTLMODE)|(1<<PHSEG11));
163247
spi_putc((1<<BRP1)|(1<<BRP0));
164248
*/
249+
/*
165250
spi_putc((1<<PHSEG21)); // Bitrate 250 kbps at 16 MHz
166251
spi_putc((1<<BTLMODE)|(1<<PHSEG11));
167252
//spi_putc(1<<BRP0);
168253
spi_putc(speed);
254+
*/
169255

256+
spi_putc(cfg3);
257+
spi_putc(cfg2);
258+
spi_putc(cfg1);
259+
170260
// activate interrupts
171261
spi_putc((1<<RX1IE)|(1<<RX0IE));
172262
SET(MCP2515_CS);

src/mcp2515.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <inttypes.h>
3333

3434
#include "mcp2515_defs.h"
35+
#include "speeds.h"
3536
#include "global.h"
3637
#ifdef __cplusplus
3738

src/mcp2515_defs.h

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,5 +276,59 @@
276276
#define DLC1 1
277277
#define DLC0 0
278278

279+
/** \brief speed 16M */
280+
281+
#define MCP_16MHz_1000kBPS_CFG1 (0x00)
282+
#define MCP_16MHz_1000kBPS_CFG2 (0xD0)
283+
#define MCP_16MHz_1000kBPS_CFG3 (0x82)
284+
285+
#define MCP_16MHz_500kBPS_CFG1 (0x00)
286+
#define MCP_16MHz_500kBPS_CFG2 (0xF0)
287+
#define MCP_16MHz_500kBPS_CFG3 (0x86)
288+
289+
#define MCP_16MHz_250kBPS_CFG1 (0x41)
290+
#define MCP_16MHz_250kBPS_CFG2 (0xF1)
291+
#define MCP_16MHz_250kBPS_CFG3 (0x85)
292+
293+
#define MCP_16MHz_200kBPS_CFG1 (0x01)
294+
#define MCP_16MHz_200kBPS_CFG2 (0xFA)
295+
#define MCP_16MHz_200kBPS_CFG3 (0x87)
296+
297+
#define MCP_16MHz_125kBPS_CFG1 (0x03)
298+
#define MCP_16MHz_125kBPS_CFG2 (0xF0)
299+
#define MCP_16MHz_125kBPS_CFG3 (0x86)
300+
301+
#define MCP_16MHz_100kBPS_CFG1 (0x03)
302+
#define MCP_16MHz_100kBPS_CFG2 (0xFA)
303+
#define MCP_16MHz_100kBPS_CFG3 (0x87)
304+
305+
#define MCP_16MHz_80kBPS_CFG1 (0x03)
306+
#define MCP_16MHz_80kBPS_CFG2 (0xFF)
307+
#define MCP_16MHz_80kBPS_CFG3 (0x87)
308+
309+
#define MCP_16MHz_50kBPS_CFG1 (0x07)
310+
#define MCP_16MHz_50kBPS_CFG2 (0xFA)
311+
#define MCP_16MHz_50kBPS_CFG3 (0x87)
312+
313+
#define MCP_16MHz_40kBPS_CFG1 (0x07)
314+
#define MCP_16MHz_40kBPS_CFG2 (0xFF)
315+
#define MCP_16MHz_40kBPS_CFG3 (0x87)
316+
317+
#define MCP_16MHz_31k25BPS_CFG1 (0x0F)
318+
#define MCP_16MHz_31k25BPS_CFG2 (0xF1)
319+
#define MCP_16MHz_31k25BPS_CFG3 (0x85)
320+
321+
#define MCP_16MHz_20kBPS_CFG1 (0x0F)
322+
#define MCP_16MHz_20kBPS_CFG2 (0xFF)
323+
#define MCP_16MHz_20kBPS_CFG3 (0x87)
324+
325+
#define MCP_16MHz_10kBPS_CFG1 (0x1F)
326+
#define MCP_16MHz_10kBPS_CFG2 (0xFF)
327+
#define MCP_16MHz_10kBPS_CFG3 (0x87)
328+
329+
#define MCP_16MHz_5kBPS_CFG1 (0x3F)
330+
#define MCP_16MHz_5kBPS_CFG2 (0xFF)
331+
#define MCP_16MHz_5kBPS_CFG3 (0x87)
332+
279333
/*@}*/
280334
#endif // MCP2515_DEFS_H

src/speeds.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#ifndef SPEEDS_H
2+
#define SPEEDS_H
3+
4+
/** \brief can speed */
5+
6+
#define CAN_5KBPS 1
7+
#define CAN_10KBPS 2
8+
#define CAN_20KBPS 3
9+
#define CAN_31K25BPS 4
10+
#define CAN_40KBPS 5
11+
#define CAN_50KBPS 6
12+
#define CAN_80KBPS 7
13+
#define CAN_100KBPS 8
14+
#define CAN_125KBPS 9
15+
#define CAN_200KBPS 10
16+
#define CAN_250KBPS 11
17+
#define CAN_500KBPS 12
18+
#define CAN_1000KBPS 13
19+
20+
#endif // SPEEDS

0 commit comments

Comments
 (0)