Skip to content

Commit 8d5baff

Browse files
committed
Merge fixes from 'mister0wl/master'
2 parents a1cd301 + 8e06f8c commit 8d5baff

File tree

1 file changed

+80
-49
lines changed

1 file changed

+80
-49
lines changed

src/ESP32SJA1000.cpp

Lines changed: 80 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -70,58 +70,89 @@ int ESP32SJA1000Class::begin(long baudRate)
7070
modifyRegister(REG_BTR0, 0xc0, 0x40); // SJW = 1
7171
modifyRegister(REG_BTR1, 0x70, 0x10); // TSEG2 = 1
7272

73-
switch (baudRate) {
74-
case (long)1000E3:
75-
modifyRegister(REG_BTR1, 0x0f, 0x04);
76-
modifyRegister(REG_BTR0, 0x3f, 4);
77-
break;
78-
79-
case (long)500E3:
80-
modifyRegister(REG_BTR1, 0x0f, 0x0c);
81-
modifyRegister(REG_BTR0, 0x3f, 4);
82-
break;
83-
84-
case (long)250E3:
85-
modifyRegister(REG_BTR1, 0x0f, 0x0c);
86-
modifyRegister(REG_BTR0, 0x3f, 9);
87-
break;
88-
89-
case (long)200E3:
90-
modifyRegister(REG_BTR1, 0x0f, 0x0c);
91-
modifyRegister(REG_BTR0, 0x3f, 12);
92-
break;
93-
94-
case (long)125E3:
95-
modifyRegister(REG_BTR1, 0x0f, 0x0c);
96-
modifyRegister(REG_BTR0, 0x3f, 19);
97-
break;
98-
99-
case (long)100E3:
100-
modifyRegister(REG_BTR1, 0x0f, 0x0c);
101-
modifyRegister(REG_BTR0, 0x3f, 24);
102-
break;
103-
104-
case (long)80E3:
105-
modifyRegister(REG_BTR1, 0x0f, 0x0c);
106-
modifyRegister(REG_BTR0, 0x3f, 30);
107-
break;
108-
109-
case (long)50E3:
110-
modifyRegister(REG_BTR1, 0x0f, 0x0c);
111-
modifyRegister(REG_BTR0, 0x3f, 49);
112-
break;
113-
114-
/*
115-
Due to limitations in ESP32 hardware and/or RTOS software, baudrate can't be lower than 50kbps.
116-
See https://esp32.com/viewtopic.php?t=2142
117-
*/
118-
default:
119-
return 0;
120-
break;
73+
esp_chip_info_t chip;
74+
esp_chip_info(&chip);
75+
76+
if (baudRate >= 50E3) {
77+
78+
if (chip.revision >= 2) {
79+
modifyRegister(REG_IER, 0x10, 0); // From rev2 used as "divide BRP by 2"
80+
}
81+
82+
switch (baudRate) {
83+
case (long)1000E3:
84+
modifyRegister(REG_BTR1, 0x0f, 0x04);
85+
modifyRegister(REG_BTR0, 0x3f, 4);
86+
break;
87+
88+
case (long)500E3:
89+
modifyRegister(REG_BTR1, 0x0f, 0x0c);
90+
modifyRegister(REG_BTR0, 0x3f, 4);
91+
break;
92+
93+
case (long)250E3:
94+
modifyRegister(REG_BTR1, 0x0f, 0x0c);
95+
modifyRegister(REG_BTR0, 0x3f, 9);
96+
break;
97+
98+
case (long)200E3:
99+
modifyRegister(REG_BTR1, 0x0f, 0x0c);
100+
modifyRegister(REG_BTR0, 0x3f, 12);
101+
break;
102+
103+
case (long)125E3:
104+
modifyRegister(REG_BTR1, 0x0f, 0x0c);
105+
modifyRegister(REG_BTR0, 0x3f, 19);
106+
break;
107+
108+
case (long)100E3:
109+
modifyRegister(REG_BTR1, 0x0f, 0x0c);
110+
modifyRegister(REG_BTR0, 0x3f, 24);
111+
break;
112+
113+
case (long)80E3:
114+
modifyRegister(REG_BTR1, 0x0f, 0x0c);
115+
modifyRegister(REG_BTR0, 0x3f, 30);
116+
break;
117+
118+
case (long)50E3:
119+
modifyRegister(REG_BTR1, 0x0f, 0x0c);
120+
modifyRegister(REG_BTR0, 0x3f, 49);
121+
break;
122+
123+
default:
124+
return 0;
125+
break;
126+
}
127+
}else {
128+
129+
if (chip.revision >= 2) {
130+
modifyRegister(REG_IER, 0x10, 0x10); // From rev2 used as "divide BRP by 2"
131+
}else {
132+
return 0;
133+
}
134+
135+
switch (baudRate) {
136+
137+
case (long)40E3:
138+
modifyRegister(REG_BTR1, 0x0f, 0x0c);
139+
modifyRegister(REG_BTR0, 0x3f, 30);
140+
break;
141+
142+
case (long)20E3:
143+
modifyRegister(REG_BTR1, 0x0f, 0x4d);
144+
modifyRegister(REG_BTR0, 0x3f, 30);
145+
break;
146+
147+
default:
148+
return 0;
149+
break;
150+
}
151+
121152
}
122153

123154
modifyRegister(REG_BTR1, 0x80, 0x80); // SAM = 1
124-
writeRegister(REG_IER, 0xff); // enable all interrupts
155+
modifyRegister(REG_IER, 0xef, 0xef); // enable all interrupts
125156

126157
// set filter to allow anything
127158
writeRegister(REG_ACRn(0), 0x00);

0 commit comments

Comments
 (0)