-
Notifications
You must be signed in to change notification settings - Fork 180
/
registers.go
420 lines (341 loc) · 7.98 KB
/
registers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
// Package mcp2515 implements a driver for the MCP2515 CAN Controller.
//
// Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/MCP2515-Stand-Alone-CAN-Controller-with-SPI-20001801J.pdf
package mcp2515 // import "tinygo.org/x/drivers/mcp2515"
const DebugEn = 0
const (
// begin mt
timeoutvalue = 50
mcpSidh = 0
mcpSidl = 1
mcpEid8 = 2
mcpEid0 = 3
mcpTxbExideM = 0x08 // in txbnsidl
mcpDlcMask = 0x0f //= 4 lsbits
mcpRtrMask = 0x40 // =(1<=<6) bit= 6
mcpRxbRxAny = 0x60
mcpRxbRxExt = 0x40
mcpRxbRxStd = 0x20
mcpRxbRxStdExt = 0x00
mcpRxbRxMask = 0x60
mcpRxbBuktMask = 1 << 2
// bits in the txbnctrl registers.
mcpTxbTxbufeM = 0x80
mcpTxbAbtfM = 0x40
mcpTxbMloaM = 0x20
mcpTxbTxerrM = 0x10
mcpTxbTxreqM = 0x08
mcpTxbTxieM = 0x04
mcpTxbTxp10M = 0x03
mcpTxbRtrM = 0x40 // in txbndlc
mcpRxbIdeM = 0x08 // in rxbnsidl
mcpRxbRtrM = 0x40 // in rxbndlc
mcpStatTxPendingMask = 0x54
mcpStatTx0Pending = 0x04
mcpStatTx1Pending = 0x10
mcpStatTx2Pending = 0x40
mcpStatTxifMask = 0xa8
mcpStatTx0if = 0x08
mcpStatTx1if = 0x20
mcpStatTx2if = 0x80
mcpStatRxifMask = 0x03
mcpStatRx0if = 1 << 0
mcpStatRx1if = 1 << 1
mcpEflgRx1ovr = 1 << 7
mcpEflgRx0ovr = 1 << 6
mcpEflgTxbo = 1 << 5
mcpEflgTxep = 1 << 4
mcpEflgRxep = 1 << 3
mcpEflgTxwar = 1 << 2
mcpEflgRxwar = 1 << 1
mcpEflgEwarn = 1 << 0
mcpEflgErrormask = 0xf8 //= 5 ms-bits
// define mcp2515 register addresses
mcpRXF0SIDH = 0x00
mcpRXF0SIDL = 0x01
mcpRXF0EID8 = 0x02
mcpRXF0EID0 = 0x03
mcpRXF1SIDH = 0x04
mcpRXF1SIDL = 0x05
mcpRXF1EID8 = 0x06
mcpRXF1EID0 = 0x07
mcpRXF2SIDH = 0x08
mcpRXF2SIDL = 0x09
mcpRXF2EID8 = 0x0a
mcpRXF2EID0 = 0x0b
mcpBFPCTRL = 0x0c
mcpTXRTSCTRl = 0x0d
mcpCANSTAT = 0x0e
mcpCANCTRL = 0x0f
mcpRXF3SIDH = 0x10
mcpRXF3SIDL = 0x11
mcpRXF3EID8 = 0x12
mcpRXF3EID0 = 0x13
mcpRXF4SIDH = 0x14
mcpRXF4SIDL = 0x15
mcpRXF4EID8 = 0x16
mcpRXF4EID0 = 0x17
mcpRXF5SIDH = 0x18
mcpRXF5SIDL = 0x19
mcpRXF5EID8 = 0x1a
mcpRXF5EID0 = 0x1b
mcpTEC = 0x1c
mcpREC = 0x1d
mcpRXM0SIDH = 0x20
mcpRXM0SIDL = 0x21
mcpRXM0EID8 = 0x22
mcpRXM0EID0 = 0x23
mcpRXM1SIDH = 0x24
mcpRXM1SIDL = 0x25
mcpRXM1EID8 = 0x26
mcpRXM1EID0 = 0x27
mcpCNF3 = 0x28
mcpCNF2 = 0x29
mcpCNF1 = 0x2a
mcpCANINTE = 0x2b
mcpCANINTF = 0x2c
mcpEFLG = 0x2d
mcpTXB0CTRL = 0x30
mcpTXB0SIDH = 0x31
mcpTXB1CTRL = 0x40
mcpTXB1SIDH = 0x41
mcpTXB2CTRL = 0x50
mcpTXB2SIDH = 0x51
mcpRXB0CTRL = 0x60
mcpRXB0SIDH = 0x61
mcpRXB1CTRL = 0x70
mcpRXB1SIDH = 0x71
mcpTxInt = 0x1c // enable all transmit interrup ts
mcpTx01Int = 0x0c // enable txb0 and txb1 interru pts
mcpRxInt = 0x03 // enable receive interrupts
mcpNoInt = 0x00 // disable all interrupts
mcpTx01Mask = 0x14
mcpTxMask = 0x54
// define spi instruction set
mcpWrite = 0x02
mcpRead = 0x03
mcpBitMod = 0x05
mcpLoadTx0 = 0x40
mcpLoadTx1 = 0x42
mcpLoadTx2 = 0x44
mcpRtsTx0 = 0x81
mcpRtsTx1 = 0x82
mcpRtsTx2 = 0x84
mcpRtsAll = 0x87
mcpReadRx0 = 0x90
mcpReadRx1 = 0x94
mcpReadStatus = 0xa0
mcpRxStatus = 0xb0
mcpReset = 0xc0
// canctrl register values
modeNormal = 0x00
modeSleep = 0x20
modeLoopBack = 0x40
modeListenOnly = 0x60
modeConfig = 0x80
modePowerUp = 0xe0
modeMask = 0xe0
abortTx = 0x10
modeOneShot = 0x08
clkoutEnable = 0x04
clkoutDisable = 0x00
clkoutPs1 = 0x00
clkoutPs2 = 0x01
clkoutPs4 = 0x02
clkoutPs8 = 0x03
// cnf1 register values
sjw1 = 0x00
sjw2 = 0x40
sjw3 = 0x80
sjw4 = 0xc0
// cnf2 register values
btlmode = 0x80
sample1x = 0x00
sample3x = 0x40
// cnf3 register values
sofEnable = 0x80
sofDisable = 0x00
wakfilEnable = 0x40
wakfilDisable = 0x00
// canintf register bits
mcpRX0IF = 0x01
mcpRX1IF = 0x02
mcpTX0IF = 0x04
mcpTX1IF = 0x08
mcpTX2IF = 0x10
mcpERRIF = 0x20
mcpWAKIF = 0x40
mcpMERRF = 0x80
// bfpctrl register bits
b1bfs = 0x20
b0bfs = 0x10
b1bfe = 0x08
b0bfe = 0x04
b1bfm = 0x02
b0bfm = 0x01
// txrtctrl register bits
b2rts = 0x20
b1rts = 0x10
b0rts = 0x08
b2rtsm = 0x04
b1rtsm = 0x02
b0rtsm = 0x01
// clock
Clock16MHz = 1
Clock8MHz = 2
// speed= 16m
mcp16mHz1000kBpsCfg1 = 0x00
mcp16mHz1000kBpsCfg2 = 0xd0
mcp16mHz1000kBpsCfg3 = 0x82
mcp16mHz500kBpsCfg1 = 0x00
mcp16mHz500kBpsCfg2 = 0xf0
mcp16mHz500kBpsCfg3 = 0x86
mcp16mHz250kBpsCfg1 = 0x41
mcp16mHz250kBpsCfg2 = 0xf1
mcp16mHz250kBpsCfg3 = 0x85
mcp16mHz200kBpsCfg1 = 0x01
mcp16mHz200kBpsCfg2 = 0xfa
mcp16mHz200kBpsCfg3 = 0x87
mcp16mHz125kBpsCfg1 = 0x03
mcp16mHz125kBpsCfg2 = 0xf0
mcp16mHz125kBpsCfg3 = 0x86
mcp16mHz100kBpsCfg1 = 0x03
mcp16mHz100kBpsCfg2 = 0xfa
mcp16mHz100kBpsCfg3 = 0x87
mcp16mHz95kBpsCfg1 = 0x03
mcp16mHz95kBpsCfg2 = 0xad
mcp16mHz95kBpsCfg3 = 0x07
mcp16mHz83k3BpsCfg1 = 0x03
mcp16mHz83k3BpsCfg2 = 0xbe
mcp16mHz83k3BpsCfg3 = 0x07
mcp16mHz80kBpsCfg1 = 0x03
mcp16mHz80kBpsCfg2 = 0xff
mcp16mHz80kBpsCfg3 = 0x87
mcp16mHz50kBpsCfg1 = 0x07
mcp16mHz50kBpsCfg2 = 0xfa
mcp16mHz50kBpsCfg3 = 0x87
mcp16mHz40kBpsCfg1 = 0x07
mcp16mHz40kBpsCfg2 = 0xff
mcp16mHz40kBpsCfg3 = 0x87
mcp16mHz33kBpsCfg1 = 0x09
mcp16mHz33kBpsCfg2 = 0xbe
mcp16mHz33kBpsCfg3 = 0x07
mcp16mHz31k25BpsCfg1 = 0x0f
mcp16mHz31k25BpsCfg2 = 0xf1
mcp16mHz31k25BpsCfg3 = 0x85
mcp16mHz25kBpsCfg1 = 0x0f
mcp16mHz25kBpsCfg2 = 0xba
mcp16mHz25kBpsCfg3 = 0x07
mcp16mHz20kBpsCfg1 = 0x0f
mcp16mHz20kBpsCfg2 = 0xff
mcp16mHz20kBpsCfg3 = 0x87
mcp16mHz10kBpsCfg1 = 0x1f
mcp16mHz10kBpsCfg2 = 0xff
mcp16mHz10kBpsCfg3 = 0x87
mcp16mHz5kBpsCfg1 = 0x3f
mcp16mHz5kBpsCfg2 = 0xff
mcp16mHz5kBpsCfg3 = 0x87
mcp16mHz666kBpsCfg1 = 0x00
mcp16mHz666kBpsCfg2 = 0xa0
mcp16mHz666kBpsCfg3 = 0x04
// speed= 8m
mcp8mHz1000kBpsCfg1 = 0x00
mcp8mHz1000kBpsCfg2 = 0x80
mcp8mHz1000kBpsCfg3 = 0x00
mcp8mHz500kBpsCfg1 = 0x00
mcp8mHz500kBpsCfg2 = 0x90
mcp8mHz500kBpsCfg3 = 0x02
mcp8mHz250kBpsCfg1 = 0x00
mcp8mHz250kBpsCfg2 = 0xb1
mcp8mHz250kBpsCfg3 = 0x05
mcp8mHz200kBpsCfg1 = 0x00
mcp8mHz200kBpsCfg2 = 0xb4
mcp8mHz200kBpsCfg3 = 0x06
mcp8mHz125kBpsCfg1 = 0x01
mcp8mHz125kBpsCfg2 = 0xb1
mcp8mHz125kBpsCfg3 = 0x05
mcp8mHz100kBpsCfg1 = 0x01
mcp8mHz100kBpsCfg2 = 0xb4
mcp8mHz100kBpsCfg3 = 0x06
mcp8mHz80kBpsCfg1 = 0x01
mcp8mHz80kBpsCfg2 = 0xbf
mcp8mHz80kBpsCfg3 = 0x07
mcp8mHz50kBpsCfg1 = 0x03
mcp8mHz50kBpsCfg2 = 0xb4
mcp8mHz50kBpsCfg3 = 0x06
mcp8mHz40kBpsCfg1 = 0x03
mcp8mHz40kBpsCfg2 = 0xbf
mcp8mHz40kBpsCfg3 = 0x07
mcp8mHz31k25BpsCfg1 = 0x07
mcp8mHz31k25BpsCfg2 = 0xa4
mcp8mHz31k25BpsCfg3 = 0x04
mcp8mHz20kBpsCfg1 = 0x07
mcp8mHz20kBpsCfg2 = 0xbf
mcp8mHz20kBpsCfg3 = 0x07
mcp8mHz10kBpsCfg1 = 0x0f
mcp8mHz10kBpsCfg2 = 0xbf
mcp8mHz10kBpsCfg3 = 0x07
mcp8mHz5kBpsCfg1 = 0x1f
mcp8mHz5kBpsCfg2 = 0xbf
mcp8mHz5kBpsCfg3 = 0x07
mcp16mHz47kBpsCfg1 = 0x06
mcp16mHz47kBpsCfg2 = 0xbe
mcp16mHz47kBpsCfg3 = 0x07
mcpdebug = 0
mcpdebugTxbuf = 0
mcpNTxbuffers = 3
mcpRxbuf0 = 0x61
mcpRxbuf1 = 0x71
mcp2515Ok = 0
mcp2515Fail = 1
mcpAlltxbusy = 2
candebug = 1
canuseloop = 0
cansendtimeout = 200 // milliseconds
mcpPinHiz = 0
mcpPinInt = 1
mcpPinOut = 2
mcpPinIn = 3
mcpRx0bf = 0
mcpRx1bf = 1
mcpTx0rts = 2
mcpTx1rts = 3
mcpTx2rts = 4
// initial value of gcanautoprocess
canautoprocess = 1
canautoon = 1
canautooff = 0
canStdid = 0
canExtid = 1
candefaultident = 0x55cc
candefaultidentext = 1
CAN5kBps = 1
CAN10kBps = 2
CAN20kBps = 3
CAN25kBps = 4
CAN31k25Bps = 5
CAN33kBps = 6
CAN40kBps = 7
CAN50kBps = 8
CAN80kBps = 9
CAN83k3Bps = 10
CAN95kBps = 11
CAN100kBps = 12
CAN125kBps = 13
CAN200kBps = 14
CAN250kBps = 15
CAN500kBps = 16
CAN666kBps = 17
CAN1000kBps = 18
CAN47kBps = 19
canOk = 0
canFailinit = 1
canFailtx = 2
canMsgavail = 3
canNomsg = 4
canCtrlerror = 5
canGettxbftimeout = 6
canSendmsgtimeout = 7
canFail = 0xff
canMaxCharInMessage = 8
)