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