mirror of
https://github.com/Seeed-Studio/Seeed_Arduino_CAN.git
synced 2026-09-14 18:42:56 +00:00
Major issue in transmission code fixed; MCP library updated and supports both 16Mhz and 8Mhz CAN modules
This commit is contained in:
@@ -19,8 +19,11 @@
|
||||
|
||||
void setup() {
|
||||
Serial.begin(LW232_DEFAULT_BAUD_RATE); // default COM baud rate is 115200.
|
||||
Can232::init(CAN_125KBPS); // set default rate you need here
|
||||
// CAN_10KBPS, CAN_20KBPS, CAN_50KBPS, CAN_100KBPS, CAN_125KBPS, CAN_250KBPS, CAN_500KBPS, CAN_500KBPS, CAN_1000KBPS, CAN_83K3BPS
|
||||
Can232::init(CAN_125KBPS); // set default rate you need here and clock frequency of CAN shield. Typically it is 16MHz, but on some MCP2515 + TJA1080 it is 8Mhz
|
||||
// Rates: CAN_10KBPS, CAN_20KBPS, CAN_50KBPS, CAN_100KBPS, CAN_125KBPS, CAN_250KBPS, CAN_500KBPS, CAN_500KBPS, CAN_1000KBPS, CAN_83K3BPS
|
||||
// Freq: MCP_16MHz or MCP_8MHz. Default is MCP_16MHz. Please note, not all CAN speeds supported. check big switch in mcp_can.cpp
|
||||
|
||||
// Can232::init(CAN_125KBPS, MCP_8MHz); // set default rate you need here and clock frequency of CAN shield. Typically it is 16MHz, but on some MCP2515 + TJA1080 it is 8Mhz
|
||||
|
||||
|
||||
// optional custom packet filter to reduce number of messages comingh through to canhacker
|
||||
|
||||
+8
-3
@@ -60,6 +60,11 @@ void Can232::init(INT8U defaultCanSpeed) {
|
||||
instance()->lw232CanSpeedSelection = defaultCanSpeed;
|
||||
}
|
||||
|
||||
void Can232::init(INT8U defaultCanSpeed, const INT8U clock) {
|
||||
init(defaultCanSpeed);
|
||||
instance()->lw232McpModuleClock = clock;
|
||||
}
|
||||
|
||||
void Can232::setFilter(INT8U (*userFunc)(INT32U)) {
|
||||
instance()->setFilterFunc(userFunc);
|
||||
}
|
||||
@@ -203,7 +208,7 @@ INT8U Can232::parseAndRunCommand() {
|
||||
parseCanStdId();
|
||||
lw232PacketLen = HexHelper::parseNibbleWithLimit(lw232Message[LW232_OFFSET_STD_PKT_LEN], LW232_FRAME_MAX_LENGTH);
|
||||
for (; idx < lw232PacketLen; idx++) {
|
||||
lw232Buffer[idx] = HexHelper::parseFullByte(lw232Message[LW232_OFFSET_STD_PKT_DATA + idx * 2 + 1], lw232Message[LW232_OFFSET_STD_PKT_DATA + idx * 2 + 1]);
|
||||
lw232Buffer[idx] = HexHelper::parseFullByte(lw232Message[LW232_OFFSET_STD_PKT_DATA + idx * 2], lw232Message[LW232_OFFSET_STD_PKT_DATA + idx * 2 + 1]);
|
||||
}
|
||||
if (CAN_OK != sendMsgBuf(lw232CanId, 0, 0, lw232PacketLen, lw232Buffer)) {
|
||||
ret = LW232_ERR;
|
||||
@@ -222,7 +227,7 @@ INT8U Can232::parseAndRunCommand() {
|
||||
parseCanExtId();
|
||||
lw232PacketLen = HexHelper::parseNibbleWithLimit(lw232Message[LW232_OFFSET_EXT_PKT_LEN], LW232_FRAME_MAX_LENGTH);
|
||||
for (; idx < lw232PacketLen; idx++) {
|
||||
lw232Buffer[idx] = HexHelper::parseFullByte(lw232Message[LW232_OFFSET_EXT_PKT_DATA + idx * 2 + 1], lw232Message[LW232_OFFSET_EXT_PKT_DATA + idx * 2 + 1]);
|
||||
lw232Buffer[idx] = HexHelper::parseFullByte(lw232Message[LW232_OFFSET_EXT_PKT_DATA + idx * 2], lw232Message[LW232_OFFSET_EXT_PKT_DATA + idx * 2 + 1]);
|
||||
}
|
||||
if (CAN_OK != sendMsgBuf(lw232CanId, 1, 0, lw232PacketLen, lw232Buffer)) {
|
||||
ret = LW232_ERR;
|
||||
@@ -462,7 +467,7 @@ INT8U Can232::checkPassFilter(INT32U addr) {
|
||||
INT8U Can232::openCanBus() {
|
||||
INT8U ret = LW232_OK;
|
||||
#ifndef _MCP_FAKE_MODE_
|
||||
if (CAN_OK != lw232CAN.begin(lw232CanSpeedSelection))
|
||||
if (CAN_OK != lw232CAN.begin(lw232CanSpeedSelection, lw232McpModuleClock))
|
||||
ret = LW232_ERR;
|
||||
#endif
|
||||
return ret;
|
||||
|
||||
@@ -153,24 +153,26 @@ class Can232
|
||||
public:
|
||||
static void init();
|
||||
static void init(INT8U defaultCanSpeed);
|
||||
static void setFilter(INT8U (*userFunc)(INT32U));
|
||||
static void init(INT8U defaultCanSpeed, const INT8U clock);
|
||||
static void setFilter(INT8U (*userFunc)(INT32U));
|
||||
static void loop();
|
||||
static void serialEvent();
|
||||
|
||||
private:
|
||||
static Can232* _instance;
|
||||
static Can232* const& instance();
|
||||
|
||||
|
||||
void initFunc();
|
||||
void setFilterFunc(INT8U (*userFunc)(INT32U));
|
||||
void setFilterFunc(INT8U (*userFunc)(INT32U));
|
||||
void loopFunc();
|
||||
void serialEventFunc();
|
||||
|
||||
INT8U (*userAddressFilterFunc)(INT32U addr) = 0;
|
||||
|
||||
INT8U (*userAddressFilterFunc)(INT32U addr) = 0;
|
||||
|
||||
MCP_CAN lw232CAN = MCP_CAN(LW232_CAN_BUS_SHIELD_CS_PIN);
|
||||
|
||||
INT8U lw232CanSpeedSelection = CAN_83K3BPS;
|
||||
INT8U lw232CanSpeedSelection = CAN_83K3BPS;
|
||||
INT8U lw232McpModuleClock = MCP_16MHz;
|
||||
INT8U lw232CanChannelMode = LW232_STATUS_CAN_CLOSED;
|
||||
INT8U lw232LastErr = LW232_OK;
|
||||
|
||||
|
||||
+192
-95
@@ -157,111 +157,207 @@ INT8U MCP_CAN::mcp2515_setCANCTRL_Mode(const INT8U newmode)
|
||||
** Function name: mcp2515_configRate
|
||||
** Descriptions: set boadrate
|
||||
*********************************************************************************************************/
|
||||
INT8U MCP_CAN::mcp2515_configRate(const INT8U canSpeed)
|
||||
INT8U MCP_CAN::mcp2515_configRate(const INT8U canSpeed, const INT8U clock)
|
||||
{
|
||||
INT8U set, cfg1, cfg2, cfg3;
|
||||
set = 1;
|
||||
switch (canSpeed)
|
||||
switch (clock)
|
||||
{
|
||||
case (CAN_5KBPS):
|
||||
cfg1 = MCP_16MHz_5kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_5kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_5kBPS_CFG3;
|
||||
break;
|
||||
case (MCP_16MHz) :
|
||||
switch (canSpeed)
|
||||
{
|
||||
case (CAN_5KBPS) :
|
||||
cfg1 = MCP_16MHz_5kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_5kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_5kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_10KBPS):
|
||||
cfg1 = MCP_16MHz_10kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_10kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_10kBPS_CFG3;
|
||||
break;
|
||||
case (CAN_10KBPS) :
|
||||
cfg1 = MCP_16MHz_10kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_10kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_10kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_20KBPS):
|
||||
cfg1 = MCP_16MHz_20kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_20kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_20kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_31K25BPS):
|
||||
cfg1 = MCP_16MHz_31k25BPS_CFG1;
|
||||
cfg2 = MCP_16MHz_31k25BPS_CFG2;
|
||||
cfg3 = MCP_16MHz_31k25BPS_CFG3;
|
||||
break;
|
||||
case (CAN_20KBPS) :
|
||||
cfg1 = MCP_16MHz_20kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_20kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_20kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_33KBPS):
|
||||
cfg1 = MCP_16MHz_33kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_33kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_33kBPS_CFG3;
|
||||
break;
|
||||
case (CAN_31K25BPS) :
|
||||
cfg1 = MCP_16MHz_31k25BPS_CFG1;
|
||||
cfg2 = MCP_16MHz_31k25BPS_CFG2;
|
||||
cfg3 = MCP_16MHz_31k25BPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_40KBPS):
|
||||
cfg1 = MCP_16MHz_40kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_40kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_40kBPS_CFG3;
|
||||
break;
|
||||
case (CAN_33KBPS):
|
||||
cfg1 = MCP_16MHz_33kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_33kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_33kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_50KBPS):
|
||||
cfg1 = MCP_16MHz_50kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_50kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_50kBPS_CFG3;
|
||||
break;
|
||||
case (CAN_40KBPS) :
|
||||
cfg1 = MCP_16MHz_40kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_40kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_40kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_80KBPS):
|
||||
cfg1 = MCP_16MHz_80kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_80kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_80kBPS_CFG3;
|
||||
break;
|
||||
case (CAN_50KBPS) :
|
||||
cfg1 = MCP_16MHz_50kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_50kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_50kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_83K3BPS):
|
||||
cfg1 = MCP_16MHz_83k3BPS_CFG1;
|
||||
cfg2 = MCP_16MHz_83k3BPS_CFG2;
|
||||
cfg3 = MCP_16MHz_83k3BPS_CFG3;
|
||||
break;
|
||||
case (CAN_80KBPS) :
|
||||
cfg1 = MCP_16MHz_80kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_80kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_80kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_95KBPS):
|
||||
cfg1 = MCP_16MHz_95kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_95kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_95kBPS_CFG3;
|
||||
break;
|
||||
case (CAN_83K3BPS):
|
||||
cfg1 = MCP_16MHz_83k3BPS_CFG1;
|
||||
cfg2 = MCP_16MHz_83k3BPS_CFG2;
|
||||
cfg3 = MCP_16MHz_83k3BPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_100KBPS): /* 100KBPS */
|
||||
cfg1 = MCP_16MHz_100kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_100kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_100kBPS_CFG3;
|
||||
break;
|
||||
case (CAN_95KBPS):
|
||||
cfg1 = MCP_16MHz_95kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_95kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_95kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_125KBPS):
|
||||
cfg1 = MCP_16MHz_125kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_125kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_125kBPS_CFG3;
|
||||
break;
|
||||
case (CAN_100KBPS) : /* 100KBPS */
|
||||
cfg1 = MCP_16MHz_100kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_100kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_100kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_200KBPS):
|
||||
cfg1 = MCP_16MHz_200kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_200kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_200kBPS_CFG3;
|
||||
break;
|
||||
case (CAN_125KBPS) :
|
||||
cfg1 = MCP_16MHz_125kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_125kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_125kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_250KBPS):
|
||||
cfg1 = MCP_16MHz_250kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_250kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_250kBPS_CFG3;
|
||||
break;
|
||||
case (CAN_200KBPS) :
|
||||
cfg1 = MCP_16MHz_200kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_200kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_200kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_500KBPS):
|
||||
cfg1 = MCP_16MHz_500kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_500kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_500kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_1000KBPS):
|
||||
cfg1 = MCP_16MHz_1000kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_1000kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_1000kBPS_CFG3;
|
||||
break;
|
||||
case (CAN_250KBPS) :
|
||||
cfg1 = MCP_16MHz_250kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_250kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_250kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_500KBPS) :
|
||||
cfg1 = MCP_16MHz_500kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_500kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_500kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_1000KBPS) :
|
||||
cfg1 = MCP_16MHz_1000kBPS_CFG1;
|
||||
cfg2 = MCP_16MHz_1000kBPS_CFG2;
|
||||
cfg3 = MCP_16MHz_1000kBPS_CFG3;
|
||||
break;
|
||||
|
||||
default:
|
||||
set = 0;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case (MCP_8MHz) :
|
||||
switch (canSpeed)
|
||||
{
|
||||
case (CAN_5KBPS) :
|
||||
cfg1 = MCP_8MHz_5kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_5kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_5kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_10KBPS) :
|
||||
cfg1 = MCP_8MHz_10kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_10kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_10kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_20KBPS) :
|
||||
cfg1 = MCP_8MHz_20kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_20kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_20kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_31K25BPS) :
|
||||
cfg1 = MCP_8MHz_31k25BPS_CFG1;
|
||||
cfg2 = MCP_8MHz_31k25BPS_CFG2;
|
||||
cfg3 = MCP_8MHz_31k25BPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_40KBPS) :
|
||||
cfg1 = MCP_8MHz_40kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_40kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_40kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_50KBPS) :
|
||||
cfg1 = MCP_8MHz_50kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_50kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_50kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_80KBPS) :
|
||||
cfg1 = MCP_8MHz_80kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_80kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_80kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_100KBPS) : /* 100KBPS */
|
||||
cfg1 = MCP_8MHz_100kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_100kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_100kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_125KBPS) :
|
||||
cfg1 = MCP_8MHz_125kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_125kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_125kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_200KBPS) :
|
||||
cfg1 = MCP_8MHz_200kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_200kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_200kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_250KBPS) :
|
||||
cfg1 = MCP_8MHz_250kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_250kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_250kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_500KBPS) :
|
||||
cfg1 = MCP_8MHz_500kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_500kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_500kBPS_CFG3;
|
||||
break;
|
||||
|
||||
case (CAN_1000KBPS) :
|
||||
cfg1 = MCP_8MHz_1000kBPS_CFG1;
|
||||
cfg2 = MCP_8MHz_1000kBPS_CFG2;
|
||||
cfg3 = MCP_8MHz_1000kBPS_CFG3;
|
||||
break;
|
||||
|
||||
default:
|
||||
set = 0;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
set = 0;
|
||||
break;
|
||||
set = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (set) {
|
||||
@@ -321,7 +417,7 @@ void MCP_CAN::mcp2515_initCANBuffers(void)
|
||||
** Function name: mcp2515_init
|
||||
** Descriptions: init the device
|
||||
*********************************************************************************************************/
|
||||
INT8U MCP_CAN::mcp2515_init(const INT8U canSpeed) /* mcp2515init */
|
||||
INT8U MCP_CAN::mcp2515_init(const INT8U canSpeed, const INT8U clock) /* mcp2515init */
|
||||
{
|
||||
|
||||
INT8U res;
|
||||
@@ -345,7 +441,7 @@ INT8U MCP_CAN::mcp2515_init(const INT8U canSpeed) /* mcp25
|
||||
#endif
|
||||
|
||||
/* set boadrate */
|
||||
if(mcp2515_configRate(canSpeed))
|
||||
if (mcp2515_configRate(canSpeed, clock))
|
||||
{
|
||||
#if DEBUG_MODE
|
||||
Serial.print("set rate fall!!\r\n");
|
||||
@@ -391,7 +487,7 @@ INT8U MCP_CAN::mcp2515_init(const INT8U canSpeed) /* mcp25
|
||||
#endif
|
||||
/* enter normal mode */
|
||||
res = mcp2515_setCANCTRL_Mode(MODE_NORMAL);
|
||||
if(res)
|
||||
if (res)
|
||||
{
|
||||
#if DEBUG_MODE
|
||||
Serial.print("Enter Normal Mode Fall!!\r\n");
|
||||
@@ -562,12 +658,12 @@ MCP_CAN::MCP_CAN(INT8U _CS)
|
||||
** Function name: init
|
||||
** Descriptions: init can and set speed
|
||||
*********************************************************************************************************/
|
||||
INT8U MCP_CAN::begin(INT8U speedset)
|
||||
INT8U MCP_CAN::begin(INT8U speedset, const INT8U clockset)
|
||||
{
|
||||
INT8U res;
|
||||
|
||||
SPI.begin();
|
||||
res = mcp2515_init(speedset);
|
||||
res = mcp2515_init(speedset, clockset);
|
||||
if (res == MCP2515_OK) return CAN_OK;
|
||||
else return CAN_FAILINIT;
|
||||
}
|
||||
@@ -769,10 +865,10 @@ INT8U MCP_CAN::sendMsg()
|
||||
do
|
||||
{
|
||||
uiTimeOut++;
|
||||
res1= mcp2515_readRegister(txbuf_n); /* read send buff ctrl reg */
|
||||
res1 = res1 & 0x08;
|
||||
res1= mcp2515_readRegister(txbuf_n-1 /* the ctrl reg is located at txbuf_n-1 */); /* read send buff ctrl reg */
|
||||
res1 = res1 & 0x08;
|
||||
}while(res1 && (uiTimeOut < TIMEOUTVALUE));
|
||||
if(uiTimeOut == TIMEOUTVALUE) /* send msg timeout */
|
||||
if(uiTimeOut == TIMEOUTVALUE) /* send msg timeout */
|
||||
{
|
||||
return CAN_SENDMSGTIMEOUT;
|
||||
}
|
||||
@@ -846,7 +942,7 @@ INT8U MCP_CAN::readMsgBuf(INT8U *len, INT8U buf[])
|
||||
buf[i] = m_nDta[i];
|
||||
}
|
||||
} else {
|
||||
*len = 0;
|
||||
*len = 0;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
@@ -907,6 +1003,7 @@ INT8U MCP_CAN::checkError(void)
|
||||
return CAN_OK;
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************************************************
|
||||
** Function name: checkError
|
||||
** Descriptions: if something error
|
||||
|
||||
@@ -52,7 +52,7 @@ private:
|
||||
INT8U mcp2515_readRegister(const INT8U address); /* read mcp2515's register */
|
||||
|
||||
void mcp2515_readRegisterS(const INT8U address,
|
||||
INT8U values[],
|
||||
INT8U values[],
|
||||
const INT8U n);
|
||||
void mcp2515_setRegister(const INT8U address, /* set mcp2515's register */
|
||||
const INT8U value);
|
||||
@@ -69,8 +69,8 @@ private:
|
||||
|
||||
INT8U mcp2515_readStatus(void); /* read mcp2515's Status */
|
||||
INT8U mcp2515_setCANCTRL_Mode(const INT8U newmode); /* set mode */
|
||||
INT8U mcp2515_configRate(const INT8U canSpeed); /* set boadrate */
|
||||
INT8U mcp2515_init(const INT8U canSpeed); /* mcp2515init */
|
||||
INT8U mcp2515_configRate(const INT8U canSpeed, const INT8U clock); /* set boadrate */
|
||||
INT8U mcp2515_init(const INT8U canSpeed, const INT8U clock); /* mcp2515init */
|
||||
|
||||
void mcp2515_write_id( const INT8U mcp_addr, /* write can id */
|
||||
const INT8U ext,
|
||||
@@ -97,7 +97,7 @@ private:
|
||||
|
||||
public:
|
||||
MCP_CAN(INT8U _CS);
|
||||
INT8U begin(INT8U speedset); /* init can */
|
||||
INT8U begin(INT8U speedset, const INT8U clockset = MCP_16MHz); /* init can */
|
||||
INT8U init_Mask(INT8U num, INT8U ext, INT32U ulData); /* init Masks */
|
||||
INT8U init_Filt(INT8U num, INT8U ext, INT32U ulData); /* init filters */
|
||||
INT8U sendMsgBuf(INT32U id, INT8U ext, INT8U rtr, INT8U len, INT8U *buf); /* send buf */
|
||||
|
||||
+63
-1
@@ -5,6 +5,7 @@
|
||||
Author:Loovee
|
||||
Contributor: Cory J. Fowler
|
||||
2014-1-16
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
@@ -243,6 +244,12 @@
|
||||
#define MCP_WAKIF 0x40
|
||||
#define MCP_MERRF 0x80
|
||||
|
||||
/*
|
||||
* clock
|
||||
*/
|
||||
#define MCP_16MHz 1
|
||||
#define MCP_8MHz 2
|
||||
|
||||
/*
|
||||
* speed 16M
|
||||
*/
|
||||
@@ -316,6 +323,61 @@
|
||||
#define MCP_16MHz_5kBPS_CFG2 (0xFF)
|
||||
#define MCP_16MHz_5kBPS_CFG3 (0x87)
|
||||
|
||||
/*
|
||||
* speed 8M
|
||||
*/
|
||||
#define MCP_8MHz_1000kBPS_CFG1 (0x00)
|
||||
#define MCP_8MHz_1000kBPS_CFG2 (0x80)
|
||||
#define MCP_8MHz_1000kBPS_CFG3 (0x00)
|
||||
|
||||
#define MCP_8MHz_500kBPS_CFG1 (0x00)
|
||||
#define MCP_8MHz_500kBPS_CFG2 (0x90)
|
||||
#define MCP_8MHz_500kBPS_CFG3 (0x02)
|
||||
|
||||
#define MCP_8MHz_250kBPS_CFG1 (0x00)
|
||||
#define MCP_8MHz_250kBPS_CFG2 (0xb1)
|
||||
#define MCP_8MHz_250kBPS_CFG3 (0x05)
|
||||
|
||||
#define MCP_8MHz_200kBPS_CFG1 (0x00)
|
||||
#define MCP_8MHz_200kBPS_CFG2 (0xb4)
|
||||
#define MCP_8MHz_200kBPS_CFG3 (0x06)
|
||||
|
||||
#define MCP_8MHz_125kBPS_CFG1 (0x01)
|
||||
#define MCP_8MHz_125kBPS_CFG2 (0xb1)
|
||||
#define MCP_8MHz_125kBPS_CFG3 (0x05)
|
||||
|
||||
#define MCP_8MHz_100kBPS_CFG1 (0x01)
|
||||
#define MCP_8MHz_100kBPS_CFG2 (0xb4)
|
||||
#define MCP_8MHz_100kBPS_CFG3 (0x06)
|
||||
|
||||
#define MCP_8MHz_80kBPS_CFG1 (0x01)
|
||||
#define MCP_8MHz_80kBPS_CFG2 (0xbf)
|
||||
#define MCP_8MHz_80kBPS_CFG3 (0x07)
|
||||
|
||||
#define MCP_8MHz_50kBPS_CFG1 (0x03)
|
||||
#define MCP_8MHz_50kBPS_CFG2 (0xb4)
|
||||
#define MCP_8MHz_50kBPS_CFG3 (0x06)
|
||||
|
||||
#define MCP_8MHz_40kBPS_CFG1 (0x03)
|
||||
#define MCP_8MHz_40kBPS_CFG2 (0xbf)
|
||||
#define MCP_8MHz_40kBPS_CFG3 (0x07)
|
||||
|
||||
#define MCP_8MHz_31k25BPS_CFG1 (0x07)
|
||||
#define MCP_8MHz_31k25BPS_CFG2 (0xa4)
|
||||
#define MCP_8MHz_31k25BPS_CFG3 (0x04)
|
||||
|
||||
#define MCP_8MHz_20kBPS_CFG1 (0x07)
|
||||
#define MCP_8MHz_20kBPS_CFG2 (0xbf)
|
||||
#define MCP_8MHz_20kBPS_CFG3 (0x07)
|
||||
|
||||
#define MCP_8MHz_10kBPS_CFG1 (0x0f)
|
||||
#define MCP_8MHz_10kBPS_CFG2 (0xbf)
|
||||
#define MCP_8MHz_10kBPS_CFG3 (0x07)
|
||||
|
||||
#define MCP_8MHz_5kBPS_CFG1 (0x1f)
|
||||
#define MCP_8MHz_5kBPS_CFG2 (0xbf)
|
||||
#define MCP_8MHz_5kBPS_CFG3 (0x07)
|
||||
|
||||
|
||||
|
||||
#define MCPDEBUG (0)
|
||||
@@ -384,4 +446,4 @@
|
||||
#endif
|
||||
/*********************************************************************************************************
|
||||
END FILE
|
||||
*********************************************************************************************************/
|
||||
*********************************************************************************************************/
|
||||
Reference in New Issue
Block a user