| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /*
- mcp_can.h
- 2012 Copyright (c) Seeed Technology Inc. All right reserved.
- 2017 Copyright (c) Cory J. Fowler All Rights Reserved.
- Author:Loovee
- Contributor: Cory J. Fowler
- 2017-09-25
- 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
- version 2.1 of the License, or (at your option) any later version.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-
- 1301 USA
- */
- #ifndef _MCP2515_H_
- #define _MCP2515_H_
- #include "mcp_can_dfs.h"
- #define MAX_CHAR_IN_MESSAGE 8
- class MCP_CAN
- {
- private:
-
- INT8U m_nExtFlg; // Identifier Type
- // Extended (29 bit) or Standard (11 bit)
- INT32U m_nID; // CAN ID
- INT8U m_nDlc; // Data Length Code
- INT8U m_nDta[MAX_CHAR_IN_MESSAGE]; // Data array
- INT8U m_nRtr; // Remote request flag
- INT8U m_nfilhit; // The number of the filter that matched the message
- INT8U MCPCS; // Chip Select pin number
- INT8U mcpMode; // Mode to return to after configurations are performed.
-
- /*********************************************************************************************************
- * mcp2515 driver function
- *********************************************************************************************************/
- // private:
- private:
- void mcp2515_reset(void); // Soft Reset MCP2515
- INT8U mcp2515_readRegister(const INT8U address); // Read MCP2515 register
-
- void mcp2515_readRegisterS(const INT8U address, // Read MCP2515 successive registers
- INT8U values[],
- const INT8U n);
-
- void mcp2515_setRegister(const INT8U address, // Set MCP2515 register
- const INT8U value);
- void mcp2515_setRegisterS(const INT8U address, // Set MCP2515 successive registers
- const INT8U values[],
- const INT8U n);
-
- void mcp2515_initCANBuffers(void);
-
- void mcp2515_modifyRegister(const INT8U address, // Set specific bit(s) of a register
- const INT8U mask,
- const INT8U data);
- INT8U mcp2515_readStatus(void); // Read MCP2515 Status
- INT8U mcp2515_setCANCTRL_Mode(const INT8U newmode); // Set mode
- INT8U mcp2515_configRate(const INT8U canSpeed, // Set baud rate
- const INT8U canClock);
-
- INT8U mcp2515_init(const INT8U canIDMode, // Initialize Controller
- const INT8U canSpeed,
- const INT8U canClock);
-
- void mcp2515_write_mf( const INT8U mcp_addr, // Write CAN Mask or Filter
- const INT8U ext,
- const INT32U id );
-
- void mcp2515_write_id( const INT8U mcp_addr, // Write CAN ID
- const INT8U ext,
- const INT32U id );
- void mcp2515_read_id( const INT8U mcp_addr, // Read CAN ID
- INT8U* ext,
- INT32U* id );
- void mcp2515_write_canMsg( const INT8U buffer_sidh_addr ); // Write CAN message
- void mcp2515_read_canMsg( const INT8U buffer_sidh_addr); // Read CAN message
- INT8U mcp2515_getNextFreeTXBuf(INT8U *txbuf_n); // Find empty transmit buffer
-
-
- inline void initSS() { pinMode(MCPCS, OUTPUT); }
- inline void setSS() { digitalWrite(MCPCS, LOW); Serial.print(" SET CS["); Serial.print(MCPCS); Serial.print("] "); }
- inline void resetSS() { digitalWrite(MCPCS, HIGH); }
-
-
- /*********************************************************************************************************
- * CAN operator function
- *********************************************************************************************************/
- INT8U setMsg(INT32U id, INT8U rtr, INT8U ext, INT8U len, INT8U *pData); // Set message
- INT8U clearMsg(); // Clear all message to zero
- INT8U readMsg(); // Read message
- INT8U sendMsg(); // Send message
- public:
- MCP_CAN(INT8U _CS);
- INT8U begin(INT8U idmodeset, INT8U speedset, INT8U clockset); // Initialize controller parameters
- INT8U init_Mask(INT8U num, INT8U ext, INT32U ulData); // Initialize Mask(s)
- INT8U init_Mask(INT8U num, INT32U ulData); // Initialize Mask(s)
- INT8U init_Filt(INT8U num, INT8U ext, INT32U ulData); // Initialize Filter(s)
- INT8U init_Filt(INT8U num, INT32U ulData); // Initialize Filter(s)
- INT8U setMode(INT8U opMode); // Set operational mode
- INT8U sendMsgBuf(INT32U id, INT8U ext, INT8U len, INT8U *buf); // Send message to transmit buffer
- INT8U sendMsgBuf(INT32U id, INT8U len, INT8U *buf); // Send message to transmit buffer
- INT8U readMsgBuf(INT32U *id, INT8U *ext, INT8U *len, INT8U *buf); // Read message from receive buffer
- INT8U readMsgBuf(INT32U *id, INT8U *len, INT8U *buf); // Read message from receive buffer
- INT8U checkReceive(void); // Check for received data
- INT8U checkError(void); // Check for errors
- INT8U getError(void); // Check for errors
- INT8U errorCountRX(void); // Get error count
- INT8U errorCountTX(void); // Get error count
- INT8U enOneShotTX(void); // Enable one-shot transmission
- INT8U disOneShotTX(void); // Disable one-shot transmission
- INT8U abortTX(void); // Abort queued transmission(s)
- INT8U setGPO(INT8U data); // Sets GPO
- INT8U getGPI(void); // Reads GPI
-
-
-
- };
- #endif
- /*********************************************************************************************************
- * END FILE
- *********************************************************************************************************/
|