Intial code push
This commit is contained in:
283
Telem_Debug/Debug2/CAN.h
Normal file
283
Telem_Debug/Debug2/CAN.h
Normal file
@@ -0,0 +1,283 @@
|
||||
/*
|
||||
* Tritium MCP2515 CAN interface header
|
||||
* Copyright (c) 2007, Tritium Pty Ltd. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
* - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the distribution.
|
||||
* - Neither the name of Tritium Pty Ltd nor the names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* Last Modified: J.Kennedy, Tritium Pty Ltd, 17 January 2007
|
||||
*
|
||||
* - Implements the following CAN interface functions
|
||||
* - can_init
|
||||
* - can_transmit
|
||||
* - can_receive
|
||||
*
|
||||
*/
|
||||
#ifndef CAN_H
|
||||
#define CAN_H
|
||||
|
||||
// Public function prototypes
|
||||
extern void can0_init();
|
||||
extern void can2_init();
|
||||
extern void can0_transmit();
|
||||
extern void can0_receive();
|
||||
extern void can0_sources(unsigned addr0, unsigned addr1);
|
||||
|
||||
// Public variables
|
||||
typedef struct _can_variables
|
||||
{
|
||||
unsigned int status;
|
||||
unsigned int address;
|
||||
unsigned char data[8];
|
||||
} can_variables;
|
||||
|
||||
extern can_variables can;
|
||||
extern can_variables can_2;
|
||||
extern can_variables can_3;
|
||||
|
||||
extern unsigned char canctrl;
|
||||
void can0_canctrl(unsigned char mask, unsigned char value);
|
||||
|
||||
// Private function prototypes
|
||||
void fill_data(can_message *can, unsigned char buff[]);
|
||||
void can0_reset();
|
||||
void can0_read(unsigned char address, unsigned char *ptr, unsigned char bytes );
|
||||
void can0_read_rx(unsigned char address, unsigned char *ptr );
|
||||
void can0_write(unsigned char address, unsigned char *ptr, unsigned char bytes );
|
||||
void can0_write_tx(unsigned char address, unsigned char *ptr );
|
||||
void can0_rts(unsigned char address );
|
||||
unsigned char can0_read_status();
|
||||
unsigned char can0_read_filter();
|
||||
void can0_mode(unsigned char address, unsigned char mask, unsigned char data );
|
||||
void can0_select();
|
||||
void can0_deselect();
|
||||
void can0_set_mask(unsigned id, unsigned mode);
|
||||
void can0_set_filter(unsigned id, unsigned addr);
|
||||
|
||||
// Device can0_SERIAL number
|
||||
#define CAN1_CAN1_SERIAL 0x00000001
|
||||
#define CAN2_CAN1_SERIAL 0x00000002
|
||||
|
||||
// Status values (for message reception)
|
||||
#define CAN_ERROR 0xFFFF
|
||||
#define CAN_MERROR 0xFFFE
|
||||
#define CAN_WAKE 0xFFFD
|
||||
#define CAN_RTR 0xFFFC
|
||||
#define CAN_OK 0x0001
|
||||
|
||||
// MCP2515 command bytes
|
||||
#define MCP_RESET 0xC0
|
||||
#define MCP_READ 0x03
|
||||
#define MCP_READ_RX 0x90 // When used, needs to have RX_BUFFER address inserted into lower bits 0nm0'b
|
||||
#define MCP_WRITE 0x02
|
||||
#define MCP_WRITE_TX 0x40 // When used, needs to have TX_BUFFER address inserted into lower bits 0abc'b
|
||||
#define MCP_RTS 0x80 // When used, needs to have buffer to transmit inserted into lower bits 0nnn'b
|
||||
#define MCP_STATUS 0xA0
|
||||
#define MCP_FILTER 0xB0
|
||||
#define MCP_MODIFY 0x05
|
||||
|
||||
//Read RX Buffer Addressess-MCP_READ_RX //n m addressPTR Address
|
||||
#define RXB_0SIDH 0x00 //0 0 RXB0SIDH 0x61
|
||||
#define RXB_0D0 0x02 //0 1 RXB0D0 0x66
|
||||
#define RXB_1SIDH 0x04 //1 0 RXB1SIDH 0x71
|
||||
#define RXB_1D0 0x06 //1 1 RXB1D0 0x76
|
||||
|
||||
//Load TX Buffer Addressess-MCP_WRITE_TX //a b c addressPTR Address
|
||||
#define TXB_0SIDH 0x00 //0 0 0 TXB0SIDH 0x31
|
||||
#define TXB_0D0 0x01 //0 0 1 TXB0D0 0x36
|
||||
#define TXB_1SIDH 0x02 //0 1 0 TXB1SIDH 0x41
|
||||
#define TXB_1D0 0x03 //0 1 1 TXB1D0 0x46
|
||||
#define TXB_2SIDH 0x04 //1 0 0 TXB2SIDH 0x51
|
||||
#define TXB_2D0 0x05 //1 0 1 TXB2SIDH 0x56
|
||||
|
||||
// MCP2515 register names
|
||||
#define RXF0SIDH 0x00
|
||||
#define RXF0SIDL 0x01
|
||||
#define RXF0EID8 0x02
|
||||
#define RXF0EID0 0x03
|
||||
#define RXF1SIDH 0x04
|
||||
#define RXF1SIDL 0x05
|
||||
#define RXF1EID8 0x06
|
||||
#define RXF1EID0 0x07
|
||||
#define RXF2SIDH 0x08
|
||||
#define RXF2SIDL 0x09
|
||||
#define RXF2EID8 0x0A
|
||||
#define RXF2EID0 0x0B
|
||||
#define BFPCTRL 0x0C
|
||||
#define TXRTSCTRL 0x0D
|
||||
#define CANSTAT 0x0E
|
||||
#define CANCTRL 0x0F
|
||||
|
||||
#define RXF3SIDH 0x10
|
||||
#define RXF3SIDL 0x11
|
||||
#define RXF3EID8 0x12
|
||||
#define RXF3EID0 0x13
|
||||
#define RXF4SIDH 0x14
|
||||
#define RXF4SIDL 0x15
|
||||
#define RXF4EID8 0x16
|
||||
#define RXF4EID0 0x17
|
||||
#define RXF5SIDH 0x18
|
||||
#define RXF5SIDL 0x19
|
||||
#define RXF5EID8 0x1A
|
||||
#define RXF5EID0 0x1B
|
||||
#define TEC 0x1C
|
||||
#define REC 0x1D
|
||||
|
||||
#define RXM0SIDH 0x20
|
||||
#define RXM0SIDL 0x21
|
||||
#define RXM0EID8 0x22
|
||||
#define RXM0EID0 0x23
|
||||
#define RXM1SIDH 0x24
|
||||
#define RXM1SIDL 0x25
|
||||
#define RXM1EID8 0x26
|
||||
#define RXM1EID0 0x27
|
||||
#define CNF3 0x28
|
||||
#define CNF2 0x29
|
||||
#define CNF1 0x2A
|
||||
#define CANINTE 0x2B
|
||||
#define CANINTF 0x2C
|
||||
#define EFLAG 0x2D
|
||||
|
||||
#define TXB0CTRL 0x30
|
||||
#define TXB0SIDH 0x31
|
||||
#define TXB0SIDL 0x32
|
||||
#define TXB0EID8 0x33
|
||||
#define TXB0EID0 0x34
|
||||
#define TXB0DLC 0x35
|
||||
#define TXB0D0 0x36
|
||||
#define TXB0D1 0x37
|
||||
#define TXB0D2 0x38
|
||||
#define TXB0D3 0x39
|
||||
#define TXB0D4 0x3A
|
||||
#define TXB0D5 0x3B
|
||||
#define TXB0D6 0x3C
|
||||
#define TXB0D7 0x3D
|
||||
|
||||
#define TXB1CTRL 0x40
|
||||
#define TXB1SIDH 0x41
|
||||
#define TXB1SIDL 0x42
|
||||
#define TXB1EID8 0x43
|
||||
#define TXB1EID0 0x44
|
||||
#define TXB1DLC 0x45
|
||||
#define TXB1D0 0x46
|
||||
#define TXB1D1 0x47
|
||||
#define TXB1D2 0x48
|
||||
#define TXB1D3 0x49
|
||||
#define TXB1D4 0x4A
|
||||
#define TXB1D5 0x4B
|
||||
#define TXB1D6 0x4C
|
||||
#define TXB1D7 0x4D
|
||||
|
||||
#define TXB2CTRL 0x50
|
||||
#define TXB2SIDH 0x51
|
||||
#define TXB2SIDL 0x52
|
||||
#define TXB2EID8 0x53
|
||||
#define TXB2EID0 0x54
|
||||
#define TXB2DLC 0x55
|
||||
#define TXB2D0 0x56
|
||||
#define TXB2D1 0x57
|
||||
#define TXB2D2 0x58
|
||||
#define TXB2D3 0x59
|
||||
#define TXB2D4 0x5A
|
||||
#define TXB2D5 0x5B
|
||||
#define TXB2D6 0x5C
|
||||
#define TXB2D7 0x5D
|
||||
|
||||
#define RXB0CTRL 0x60
|
||||
#define RXB0SIDH 0x61
|
||||
#define RXB0SIDL 0x62
|
||||
#define RXB0EID8 0x63
|
||||
#define RXB0EID0 0x64
|
||||
#define RXB0DLC 0x65
|
||||
#define RXB0D0 0x66
|
||||
#define RXB0D1 0x67
|
||||
#define RXB0D2 0x68
|
||||
#define RXB0D3 0x69
|
||||
#define RXB0D4 0x6A
|
||||
#define RXB0D5 0x6B
|
||||
#define RXB0D6 0x6C
|
||||
#define RXB0D7 0x6D
|
||||
|
||||
#define RXB1CTRL 0x70
|
||||
#define RXB1SIDH 0x71
|
||||
#define RXB1SIDL 0x72
|
||||
#define RXB1EID8 0x73
|
||||
#define RXB1EID0 0x74
|
||||
#define RXB1DLC 0x75
|
||||
#define RXB1D0 0x76
|
||||
#define RXB1D1 0x77
|
||||
#define RXB1D2 0x78
|
||||
#define RXB1D3 0x79
|
||||
#define RXB1D4 0x7A
|
||||
#define RXB1D5 0x7B
|
||||
#define RXB1D6 0x7C
|
||||
#define RXB1D7 0x7D
|
||||
|
||||
// MCP2515 RX ctrl bit definitions
|
||||
#define MCP_RXB0_RTR 0x08
|
||||
#define MCP_RXB1_RTR 0x08
|
||||
|
||||
// MCP2515 Interrupt flag register bit definitions
|
||||
#define MCP_IRQ_MERR 0x80
|
||||
#define MCP_IRQ_WAKE 0x40
|
||||
#define MCP_IRQ_ERR 0x20
|
||||
#define MCP_IRQ_TXB2 0x10
|
||||
#define MCP_IRQ_TXB1 0x08
|
||||
#define MCP_IRQ_TXB0 0x04
|
||||
#define MCP_IRQ_RXB1 0x02
|
||||
#define MCP_IRQ_RXB0 0x01
|
||||
|
||||
//CANCTL Bit definitions
|
||||
#define MCP_CTL_CLKPRE_0 0x00
|
||||
#define MCP_CTL_CLKPRE_2 0x01
|
||||
#define MCP_CTL_CLKPRE_4 0x02
|
||||
#define MCP_CTL_CLKPRE_8 0x03
|
||||
#define MCP_CTL_CLKEN 0x04 //Enable CLKOUT Pin
|
||||
#define MCP_CTL_OSM 0x08 //One Shot Mode
|
||||
#define MCP_CTL_ABAT 0x10 //Abort all Pending Transmissions
|
||||
//Request Operation Modes & Mode Status
|
||||
#define MCP_NML_MOD 0x00 //Normal Mode
|
||||
#define MCP_SLP_MOD 0x20 //Sleep Mode
|
||||
#define MCP_LB_MOD 0x40 //Loopback Mode
|
||||
#define MCP_LO_MOD 0x60 //Listen Only Mode
|
||||
#define MCP_CNF_MOD 0x80 //Configuration Mode
|
||||
|
||||
//READ_STATUS definitions
|
||||
|
||||
//RX_status definitions
|
||||
#define MESS_REC 0xC0 //Received Message Filter
|
||||
#define RM_0 0x00 //no message
|
||||
#define RM_RXB0 0x40 //RX buff 0
|
||||
#define RM_RXB1 0x80 //RX buff 1
|
||||
#define RM_BOTH 0xC0 //both
|
||||
|
||||
#define MSG_TYP 0x18 //Message Type Filter
|
||||
#define MT_SDF 0x00 //standard data frame
|
||||
#define MT_SRF 0x08 //standard remote frame
|
||||
#define MT_EDF 0x10 //extended data frame
|
||||
#define MT_ERF 0x18 //extended remote frame
|
||||
|
||||
#define FIL_MATCH 0x07 //Filter Match Filter
|
||||
#define FM_RXF0 0x00 //RXF0
|
||||
#define FM_RXF1 0x01 //RXF1
|
||||
#define FM_RXF2 0x02 //RXF2
|
||||
#define FM_RXF3 0x03 //RXF3
|
||||
#define FM_RXF4 0x04 //RXF4
|
||||
#define FM_RXF5 0x05 //RXF5
|
||||
#define FM_RXF0_B1 0x06 //RXF0 - rollover to RXB1
|
||||
#define FM_RXF1_B1 0x07 //RXF1 - rollover to RXB1
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user