?? can18xx8.h
字號:
/*********************************************************************
* PIC18CXX8 CAN C Library Header File
*********************************************************************
* FileName: CAN18CXX8.h
* Dependencies: None
* Date: 09/06/00
* Processor: PIC18CXX8
* Complier: MPLAB 5.11.00
* Company: Microchip Technology, Inc.
*
*
* Software License Agreement
*
* The software supplied herewith by Microchip Technology Incorporated
* (the 揅ompany? for its PICmicro?Microcontroller is intended and
* supplied to you, the Company抯 customer, for use solely and
* exclusively on Microchip PICmicro Microcontroller products. The
* software is owned by the Company and/or its supplier, and is
* protected under applicable copyright laws. All rights are reserved.
* Any use in violation of the foregoing restrictions may subject the
* user to criminal sanctions under applicable laws, as well as to
* civil liability for the breach of the terms and conditions of this
* license.
*
* THIS SOFTWARE IS PROVIDED IN AN 揂S IS?CONDITION. NO WARRANTIES,
* WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
* TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
* IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
*
* Author Date Comment
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Nilesh Rajbharti 9/6/00 Original (Rev 1.0)
* Nilesh Rajbharti 12/1/00 Fixed bugs.
* (CANRegsToID, CANReceiveMessage,
* CANSetMask + Added
* CAN_CONFIG_DBL_BUFFER_ON/OFF option)
* Nilesh Rajbharti 6/8/01 Renamed CAN_CONFIG_DBL_BUFFERED to
* CAN_RX_DBL_BUFFERED
* Nilesh Rajbharti 10/11/01 Added support for HITECH compiler
* Modified CAN_MESSAGE_ID def to be
* compatible with HITECH Compiler
* Fixed CAN_CONFIG_SAMPLE_BIT enum.
* (Rev 1.1)
*
*********************************************************************/
#ifndef CAN18XX8_H // To avoid duplicate inclusion
#define CAN18XX8_H
#if defined(HI_TECH_C)
#define HITECH_C18
#else
#define MCHP_C18
#endif
#if defined(MCHP_C18) && defined(HITECH_C18)
#error "Invalid Compiler selection."
#endif
#if !defined(MCHP_C18) && !defined(HITECH_C18)
#error "Compiler not supported."
#endif
#if defined(MCHP_C18)
#define COMSTAT_TXB0 COMSTATbits.TXB0
#define COMSTAT_TXBP COMSTATbits.TXBP
#define COMSTAT_RXBP COMSTATbits.RXBP
#define CANCON_ABAT CANCONbits.ABAT
#define RXB0CON_RXFUL RXB0CONbits.RXFUL
#define RXB1CON_RXFUL RXB1CONbits.RXFUL
#define TXB0CON_TXREQ TXB0CONbits.TXREQ
#define TXB1CON_TXREQ TXB1CONbits.TXREQ
#define TXB2CON_TXREQ TXB2CONbits.TXREQ
#endif
#if defined(HITECH_C18)
#define COMSTAT_TXB0 TXB0
#define COMSTAT_TXBP TXBP
#define COMSTAT_RXBP RXBP
#define CANCON_ABAT ABAT
#define RXB0CON_RXFUL RXB0RXFUL
#define TXB0CON_TXREQ TXB0REQ
/*
* Following are special defs to overcome compiler problem
* at the time of this re-write.
* Set following line to "#if 0" after verifiying correct
* compiler behavior.
*/
#if 1
static struct
{
unsigned : 7;
unsigned RXFUL : 1;
} RXB1CONbits @ 0xf50;
#define RXB1CON_RXFUL RXB1CONbits.RXFUL
static struct
{
unsigned TXPRI0:1;
unsigned TXPRI1:1;
unsigned :1;
unsigned TXREQ:1;
unsigned TXERR:1;
unsigned TXLARB:1;
unsigned TXABT:1;
} TXB1CONbits @ 0xf30;
#define TXB1CON_TXREQ TXB1CONbits.TXREQ
static struct
{
unsigned TXPRI0:1;
unsigned TXPRI1:1;
unsigned :1;
unsigned TXREQ:1;
unsigned TXERR:1;
unsigned TXLARB:1;
unsigned TXABT:1;
} TXB2CONbits @ 0xf20;
#define TXB2CON_TXREQ TXB2CONbits.TXREQ
#else
#define RXB1CON_RXFUL RXB1RXFUL
#define TXB1CON_TXREQ TXB1REQ
#define TXB2CON_TXREQ TXB2REQ
#endif
#endif
/*********************************************************************
*
* General purpose typedef's used by PICCAN libray.
*
* Remove these definations if they are already defined in one of your
* application files. Make sure that corresponding header file is
* included before including this header file.
********************************************************************/
typedef enum _BOOL { FALSE = 0, TRUE } BOOL;
typedef unsigned char BYTE;
//////////////////////////////////////////////////////////////////////
/*********************************************************************
*
* union CAN_MESSAGE_ID
*
* This union provides abstract data type for CAN message id.
* It is used for both 11-bit and 29-bit message identifiers.
* There are multiple union members to be able to access individual
* parts of it.
*
********************************************************************/
// Parse-out 29-bit or 11-bit (saved in 32-bit number)
typedef union _CAN_MESSAGE_ID
{
unsigned long ID;
struct
{
struct
{
unsigned SIDL:3; // SIDL<5:7>
unsigned SIDH:5; // SIDH<0:4>
} BYTE1;
struct
{
unsigned SIDHU:3; // SIDH<5:7>
unsigned EIDL_LN:5; // EIDL<0:4>
} BYTE2;
struct
{
unsigned EIDL_UN:3; // EIDL<5:7>
unsigned EIDH_LN:5; // EIDH<0:4>
} BYTE3;
struct
{
unsigned EIDH_UN:3; // EIDH<5:7>
unsigned EIDHU:2; // SIDL<0:1>
unsigned :3;
} BYTE4;
} ID_VALS;
// This is to allow individual byte access within message id.
struct
{
BYTE BYTE_1;
BYTE BYTE_2;
BYTE BYTE_3;
BYTE BYTE_4;
} BYTES;
} CAN_MESSAGE_ID;
//////////////////////////////////////////////////////////////////////
/*********************************************************************
*
* enum CAN_TX_MSG_FLAGS
*
* This enumeration values define flags related to transmission of a
* CAN message. There could be more than one this flag
* ANDed together to form multiple flags.
*
*********************************************************************/
enum CAN_TX_MSG_FLAGS
{
CAN_TX_PRIORITY_BITS= 0b00000011,
CAN_TX_PRIORITY_0 = 0b11111100, // XXXXXX00
CAN_TX_PRIORITY_1 = 0b11111101, // XXXXXX01
CAN_TX_PRIORITY_2 = 0b11111110, // XXXXXX10
CAN_TX_PRIORITY_3 = 0b11111111, // XXXXXX11
CAN_TX_FRAME_BIT = 0b00001000,
CAN_TX_STD_FRAME = 0b11111111, // XXXXX1XX
CAN_TX_XTD_FRAME = 0b11110111, // XXXXX0XX
CAN_TX_RTR_BIT = 0b01000000,
CAN_TX_NO_RTR_FRAME = 0b11111111, // X1XXXXXX
CAN_TX_RTR_FRAME = 0b10111111 // X0XXXXXX
};
//////////////////////////////////////////////////////////////////////
/*********************************************************************
*
* enum CAN_RX_MSG_FLAGS
*
* This enumeration values define flags related to reception of a CAN
* message. There could be more than one this flag
* ANDed together to form multiple flags.
* If a particular bit is set, corresponding meaning is TRUE or else
* it will be FALSE.
*
* e.g.
* if (MsgFlag & CAN_RX_OVERFLOW)
* {
* // Receiver overflow has occured. We have lost previous
* // message.
* ...
* }
*
********************************************************************/
enum CAN_RX_MSG_FLAGS
{
CAN_RX_FILTER_BITS = 0b00000111, // Use this to access filter
// bits
CAN_RX_FILTER_1 = 0b00000000,
CAN_RX_FILTER_2 = 0b00000001,
CAN_RX_FILTER_3 = 0b00000010,
CAN_RX_FILTER_4 = 0b00000011,
CAN_RX_FILTER_5 = 0b00000100,
CAN_RX_FILTER_6 = 0b00000101,
CAN_RX_OVERFLOW = 0b00001000, // Set if Overflowed else
// cleared
CAN_RX_INVALID_MSG = 0b00010000, // Set if invalid else
// cleared
CAN_RX_XTD_FRAME = 0b00100000, // Set if XTD message else
// cleared
CAN_RX_RTR_FRAME = 0b01000000, // Set if RTR message else
// cleared
CAN_RX_DBL_BUFFERED = 0b10000000 // Set if this message was
// hardware double-buffered
};
//////////////////////////////////////////////////////////////////////
/*********************************************************************
*
* enum CAN_MASK
*
* This enumeration values define mask codes. Routine CANSetMask()
* requires this code as one of its arguments. These enumerations
* must be used by itself i.e. it cannot be ANDed to form multiple
* values.
*
********************************************************************/
enum CAN_MASK
{
CAN_MASK_B1,
CAN_MASK_B2
};
//////////////////////////////////////////////////////////////////////
/*********************************************************************
*
* enum CAN_FILTER
*
* This enumeration values define filter codes. Routine CANSetFilter
* requires this code as one of its arguments. These enumerations
* must be used by itself
* i.e. it cannot be ANDed to form multiple values.
*
********************************************************************/
enum CAN_FILTER
{
CAN_FILTER_B1_F1,
CAN_FILTER_B1_F2,
CAN_FILTER_B2_F1,
CAN_FILTER_B2_F2,
CAN_FILTER_B2_F3,
CAN_FILTER_B2_F4
};
//////////////////////////////////////////////////////////////////////
/*********************************************************************
*
* enum CAN_OP_MODE
*
* This enumeration values define codes related to CAN module
* operation mode. CANSetOperationMode() routine requires this code.
* These values must be used by itself
* i.e. it cannot be ANDed to form * multiple values.
*
********************************************************************/
enum CAN_OP_MODE
{
CAN_OP_MODE_BITS = 0b11100000, // Use this to access opmode
// bits
CAN_OP_MODE_NORMAL = 0b00000000,
CAN_OP_MODE_SLEEP = 0b00100000,
CAN_OP_MODE_LOOP = 0b01000000,
CAN_OP_MODE_LISTEN = 0b01100000,
CAN_OP_MODE_CONFIG = 0b10000000
};
//////////////////////////////////////////////////////////////////////
/*********************************************************************
*
* enum CAN_CONFIG_FLAGS
*
* This enumeration values define flags related to configuring CAN
* module. Routines CANInitialize() and CANSetBaudRate() use these
* codes. One or more these values may be ANDed to form multiple
* flags.
*
********************************************************************/
enum CAN_CONFIG_FLAGS
{
CAN_CONFIG_DEFAULT = 0b11111111, // 11111111
CAN_CONFIG_PHSEG2_PRG_BIT = 0b00000001,
CAN_CONFIG_PHSEG2_PRG_ON = 0b11111111, // XXXXXXX1
CAN_CONFIG_PHSEG2_PRG_OFF = 0b11111110, // XXXXXXX0
CAN_CONFIG_LINE_FILTER_BIT = 0b00000010,
CAN_CONFIG_LINE_FILTER_ON = 0b11111111, // XXXXXX1X
CAN_CONFIG_LINE_FILTER_OFF = 0b11111101, // XXXXXX0X
CAN_CONFIG_SAMPLE_BIT = 0b00000100,
CAN_CONFIG_SAMPLE_ONCE = 0b11111111, // XXXXX1XX
CAN_CONFIG_SAMPLE_THRICE = 0b11111011, // XXXXX0XX
CAN_CONFIG_MSG_TYPE_BIT = 0b00001000,
CAN_CONFIG_STD_MSG = 0b11111111, // XXXX1XXX
CAN_CONFIG_XTD_MSG = 0b11110111, // XXXX0XXX
CAN_CONFIG_DBL_BUFFER_BIT = 0b00010000,
CAN_CONFIG_DBL_BUFFER_ON = 0b11111111, // XXX1XXXX
CAN_CONFIG_DBL_BUFFER_OFF = 0b11101111, // XXX0XXXX
CAN_CONFIG_MSG_BITS = 0b01100000,
CAN_CONFIG_ALL_MSG = 0b11111111, // X11XXXXX
CAN_CONFIG_VALID_XTD_MSG = 0b11011111, // X10XXXXX
CAN_CONFIG_VALID_STD_MSG = 0b10111111, // X01XXXXX
CAN_CONFIG_ALL_VALID_MSG = 0b10011111 // X00XXXXX
};
//////////////////////////////////////////////////////////////////////
/*********************************************************************
* Function: void CANInitialize( BYTE SJW,
* BYTE BRP,
* BYTE PHSEG1,
* BYTE PHSEG2,
* BYTE PROPSEG,
* enum CAN_CONFIG_FLAGS flags)
*
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -