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  )