📄 canopdefines.h
字号:
/*******************************************************************************
CANopDefines.h - Definitions for CANopen
Copyright (C) 2004 Janez Paternoster, Slovenia
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author: janez.paternoster@siol.net
History:
2004/06/25 [JP] File Created
2004/08/09 [JP] Added 'defines' and some other things
*******************************************************************************/
#ifndef _CO_DEFINES_H
#define _CO_DEFINES_H
/***** Defines for setup sizes in CANopenDriver *******************************/
#define CO_NO_RPDO 4 //(0 to 8), number of recive PDOs
#define CO_NO_TPDO 4 //(0 to 8), number of transmit PDOs
#define CO_NO_ERROR_FIELD 4 //(0 to 8), size of Pre Defined Error Field at index 0x1003
#define CO_NO_CONS_HEARTBEAT 4 //(0 to 8), number of consumer heartbeat entries
#define CO_NO_USR_CAN_BUFF 0 //(0 to 6), number of user CAN buffers for raw CAN messages
#define CO_PDO_MAP_SIZE 2 //(2 or 8), map size of all PDOs, default values are set for 2
#define CO_ALLOW_FLASH_WRITE //if defined, SDO are allowed to write to program flash memory
#define CO_USE_EEPROM //if defined, ODE_EEPROM structure will be read/written in EEPROM automatically
#define PDO_PARAMETERS_IN_OD //if defined, PDO parameters will be in object dictionary
#define PDO_MAPPING_IN_OD //if defined, PDO mapping will be in object dictionary
#if ((CO_NO_RPDO + CO_NO_CONS_HEARTBEAT) <= 3)
#define USE_HARDWARE_FILTERING
#endif
/***** Defines for default values in Object Dictionary ************************/
//Values are retentive and can be changed in run time with
//SDO objects, except those with RO assigned.
#define CO_DEFAULT_NODE_ID 6 //(1 to 127), default node ID
#define CO_OSCILATOR_FREQ 40 //RO (16, 20, 32, 40) Oscilator frequency, mode PLLx4 may be used (40MHz frequency with 10MHz Quartz).
#define CO_DEFAULT_BIT_RATE 4 //(0 to 7), default CAN bit rate
// 0 = 10 kbps 1 = 20 kbps
// 2 = 50 kbps 3 = 125 kbps
// 4 = 250 kbps 5 = 500 kbps
// 6 = 800 kbps 7 = 1000 kbps
#define ODD_DEVICE_TYPE 0x00000000L /*index 0x1000, RO*/ //See standard
// #define ODD_SYNC_PRODUCER /*index 0x1005*/ //if defined, node produces SYNC
#define ODD_COMM_CYCLE_PERIOD 0L /*index 0x1006*/ //in micro seconds
#define ODD_SYNCHR_WINDOW_LEN 0L /*index 0x1007*/ //in micro seconds
#define ODD_MANUF_DEVICE_NAME 'C','o','N','d'/*index 0x1008, RO*/ //4 characters
#define ODD_MANUF_HW_VERSION '0','.','0','0'/*index 0x1009, RO*/ //4 characters
#define ODD_MANUF_SW_VERSION '0','.','9','0'/*index 0x100A, RO*/ //4 characters
#define ODD_INHIBIT_TIME_EMER 0 /*index 0x1015*/ //time in 100 micro seconds
#define ODD_CONS_HEARTBEAT_1 0x00000000L /*index 0x1016,01*/ //00NNTTTT: N=NodeID, T=time in ms
#define ODD_CONS_HEARTBEAT_2 0x00000000L /*index 0x1016,02*/ //00NNTTTT: N=NodeID, T=time in ms
#define ODD_CONS_HEARTBEAT_3 0x00000000L /*index 0x1016,03*/ //00NNTTTT: N=NodeID, T=time in ms
#define ODD_CONS_HEARTBEAT_4 0x00000000L /*index 0x1016,04*/ //00NNTTTT: N=NodeID, T=time in ms
#define ODD_CONS_HEARTBEAT_5 0x00000000L /*index 0x1016,05*/ //00NNTTTT: N=NodeID, T=time in ms
#define ODD_CONS_HEARTBEAT_6 0x00000000L /*index 0x1016,06*/ //00NNTTTT: N=NodeID, T=time in ms
#define ODD_CONS_HEARTBEAT_7 0x00000000L /*index 0x1016,07*/ //00NNTTTT: N=NodeID, T=time in ms
#define ODD_CONS_HEARTBEAT_8 0x00000000L /*index 0x1016,08*/ //00NNTTTT: N=NodeID, T=time in ms
#define ODD_PROD_HEARTBEAT 0 /*index 0x1017*/ //time in ms
#define ODD_IDENT_VENDOR_ID 0x00000000L /*index 0x1018,01, RO*/ //See standard
#define ODD_IDENT_PROD_CODE 0x00000000L /*index 0x1018,02, RO*/ //See standard
#define ODD_IDENT_REVISION_NR 0x00000000L /*index 0x1018,03, RO*/ //See standard
#define ODD_IDENT_SERIAL_NR 0x00000000L /*index 0x1018,04, RO*/ //See standard
// #define ODD_BOOT_OPERATIONAL /*index 0x1F80*/ //if defined, node boot NMT operational
//PDO parameters, COB-ID: if(bit31==1) PDO is not used; bit30=1; bits(10..0)=COB-ID;
//T_TYPE: transmition after every (T_TYPE)-th SYNC object
#define ODD_RPDO_PAR_COB_ID_0 0x40000200L+CO_DEFAULT_NODE_ID /*index 0x1400,01*/
#define ODD_RPDO_PAR_COB_ID_1 0x40000300L+CO_DEFAULT_NODE_ID /*index 0x1401,01*/
#define ODD_RPDO_PAR_COB_ID_2 0x40000400L+CO_DEFAULT_NODE_ID /*index 0x1402,01*/
#define ODD_RPDO_PAR_COB_ID_3 0x40000500L+CO_DEFAULT_NODE_ID /*index 0x1403,01*/
#define ODD_RPDO_PAR_COB_ID_4 0xC0000000L /*index 0x1404,01*/
#define ODD_RPDO_PAR_COB_ID_5 0xC0000000L /*index 0x1405,01*/
#define ODD_RPDO_PAR_COB_ID_6 0xC0000000L /*index 0x1406,01*/
#define ODD_RPDO_PAR_COB_ID_7 0xC0000000L /*index 0x1407,01*/
#define ODD_TPDO_PAR_COB_ID_0 0x40000180L+CO_DEFAULT_NODE_ID /*index 0x1800,01*/
#define ODD_TPDO_PAR_T_TYPE_0 1 /*index 0x1800,02*/
#define ODD_TPDO_PAR_COB_ID_1 0x40000280L+CO_DEFAULT_NODE_ID /*index 0x1801,01*/
#define ODD_TPDO_PAR_T_TYPE_1 1 /*index 0x1801,02*/
#define ODD_TPDO_PAR_COB_ID_2 0x40000380L+CO_DEFAULT_NODE_ID /*index 0x1802,01*/
#define ODD_TPDO_PAR_T_TYPE_2 1 /*index 0x1802,02*/
#define ODD_TPDO_PAR_COB_ID_3 0x40000480L+CO_DEFAULT_NODE_ID /*index 0x1803,01*/
#define ODD_TPDO_PAR_T_TYPE_3 1 /*index 0x1803,02*/
#define ODD_TPDO_PAR_COB_ID_4 0xC0000000L /*index 0x1804,01*/
#define ODD_TPDO_PAR_T_TYPE_4 1 /*index 0x1804,02*/
#define ODD_TPDO_PAR_COB_ID_5 0xC0000000L /*index 0x1805,01*/
#define ODD_TPDO_PAR_T_TYPE_5 1 /*index 0x1805,02*/
#define ODD_TPDO_PAR_COB_ID_6 0xC0000000L /*index 0x1806,01*/
#define ODD_TPDO_PAR_T_TYPE_6 1 /*index 0x1806,02*/
#define ODD_TPDO_PAR_COB_ID_7 0xC0000000L /*index 0x1807,01*/
#define ODD_TPDO_PAR_T_TYPE_7 1 /*index 0x1807,02*/
//PDO mapping, 0xIIIISSDD IIII = index from OD, SS = subindex, DD = data length in bits
#if CO_PDO_MAP_SIZE == 2
#define ODD_RPDO_MAP_0_1 0x21100120L /*index 0x1600,01, RO*/
#define ODD_RPDO_MAP_0_2 0x21100220L /*index 0x1600,02, RO*/
#define ODD_RPDO_MAP_1_1 0x21100320L /*index 0x1601,01, RO*/
#define ODD_RPDO_MAP_1_2 0x21100420L /*index 0x1601,02, RO*/
#define ODD_RPDO_MAP_2_1 0x21100520L /*index 0x1602,01, RO*/
#define ODD_RPDO_MAP_2_2 0x21100620L /*index 0x1602,02, RO*/
#define ODD_RPDO_MAP_3_1 0x21100720L /*index 0x1603,01, RO*/
#define ODD_RPDO_MAP_3_2 0x21100820L /*index 0x1603,02, RO*/
#define ODD_RPDO_MAP_4_1 0x21100920L /*index 0x1604,01, RO*/
#define ODD_RPDO_MAP_4_2 0x21100A20L /*index 0x1604,02, RO*/
#define ODD_RPDO_MAP_5_1 0x21100B20L /*index 0x1605,01, RO*/
#define ODD_RPDO_MAP_5_2 0x21100C20L /*index 0x1605,02, RO*/
#define ODD_RPDO_MAP_6_1 0x21100D20L /*index 0x1606,01, RO*/
#define ODD_RPDO_MAP_6_2 0x21100E20L /*index 0x1606,02, RO*/
#define ODD_RPDO_MAP_7_1 0x21100F20L /*index 0x1607,01, RO*/
#define ODD_RPDO_MAP_7_2 0x21101020L /*index 0x1607,02, RO*/
#define ODD_TPDO_MAP_0_1 0x21110120L /*index 0x1A00,01, RO*/
#define ODD_TPDO_MAP_0_2 0x21110220L /*index 0x1A00,02, RO*/
#define ODD_TPDO_MAP_1_1 0x21110320L /*index 0x1A01,01, RO*/
#define ODD_TPDO_MAP_1_2 0x21110420L /*index 0x1A01,02, RO*/
#define ODD_TPDO_MAP_2_1 0x21110520L /*index 0x1A02,01, RO*/
#define ODD_TPDO_MAP_2_2 0x21110620L /*index 0x1A02,02, RO*/
#define ODD_TPDO_MAP_3_1 0x21110720L /*index 0x1A03,01, RO*/
#define ODD_TPDO_MAP_3_2 0x21110820L /*index 0x1A03,02, RO*/
#define ODD_TPDO_MAP_4_1 0x21110920L /*index 0x1A04,01, RO*/
#define ODD_TPDO_MAP_4_2 0x21110A20L /*index 0x1A04,02, RO*/
#define ODD_TPDO_MAP_5_1 0x21110B20L /*index 0x1A05,01, RO*/
#define ODD_TPDO_MAP_5_2 0x21110C20L /*index 0x1A05,02, RO*/
#define ODD_TPDO_MAP_6_1 0x21110D20L /*index 0x1A06,01, RO*/
#define ODD_TPDO_MAP_6_2 0x21110E20L /*index 0x1A06,02, RO*/
#define ODD_TPDO_MAP_7_1 0x21110F20L /*index 0x1A07,01, RO*/
#define ODD_TPDO_MAP_7_2 0x21111020L /*index 0x1A07,02, RO*/
#endif
/***** Hardware defines for pins for status leds ******************************/
//Bandwidth measurement switches for tests
#define PCB_BANDWIDTH_IsrLow_INIT //TRISBbits.TRISB5 = 0; PORTDbits.RB5 = 0
#define PCB_BANDWIDTH_IsrLow(i) //PORTBbits.RB5 = i
#define PCB_BANDWIDTH_IsrHigh_INIT //TRISBbits.TRISB5 = 0; PORTDbits.RB5 = 0
#define PCB_BANDWIDTH_IsrHigh(i) //PORTBbits.RB5 = i
//green led
#define PCB_RUN_LED_INIT TRISBbits.TRISB0 = 0; PORTBbits.RB0 = 0
#define PCB_RUN_LED(i) PORTBbits.RB0 = i
//red led
#define PCB_ERROR_LED_INIT TRISBbits.TRISB1 = 0; PORTBbits.RB1 = 0
#define PCB_ERROR_LED(i) PORTBbits.RB1 = i
/***** CANopen Data Types *****************************************************/
#define UNSIGNED8 unsigned char
#define UNSIGNED16 unsigned int
#define UNSIGNED32 unsigned long
#define INTEGER8 char
#define INTEGER16 int
#define INTEGER32 long
/***** CANopen constants ******************************************************/
#define ATTR_RW 0 //attribute: read-write
#define ATTR_WO 1 //attribute: write-only
#define ATTR_RO 2 //attribute: read-only
#define ATTR_CO 3 //attribute: read-only, constant
#define NMT_INTIALIZING 0
#define NMT_PRE_OPERATIONAL 127
#define NMT_OPERATIONAL 5
#define NMT_STOPPED 4
#define NMT_ENTER_OPERATIONAL 1
#define NMT_ENTER_STOPPED 2
#define NMT_ENTER_PRE_OPERATIONAL 128
#define NMT_RESET_NODE 129
#define NMT_RESET_COMMUNICATION 130
#define CAN_ID_NMT_SERVICE 0x000
#define CAN_ID_SYNC 0x080
#define CAN_ID_EMERGENCY 0x080 // + NODE ID
#define CAN_ID_TIME_STAMP 0x100
#define CAN_ID_TPDO1 0x180 // + NODE ID
#define CAN_ID_RPDO1 0x200 // + NODE ID
#define CAN_ID_TPDO2 0x280 // + NODE ID
#define CAN_ID_RPDO2 0x300 // + NODE ID
#define CAN_ID_TPDO3 0x380 // + NODE ID
#define CAN_ID_RPDO3 0x400 // + NODE ID
#define CAN_ID_TPDO4 0x480 // + NODE ID
#define CAN_ID_RPDO4 0x500 // + NODE ID
#define CAN_ID_TSDO 0x580 // + NODE ID
#define CAN_ID_RSDO 0x600 // + NODE ID
#define CAN_ID_HEARTBEAT 0x700 // + NODE ID
/***** Structures *************************************************************/
//CAN message structure
typedef struct{
unsigned int COB_ID_LSH5; //COB_ID << 5
unsigned char NoOfBytes;
unsigned char *pData; //pointer to data
}CO_CanMessage;
//Universal structures and defines for data access
typedef struct{
UNSIGNED8 bit0 :1;
UNSIGNED8 bit1 :1;
UNSIGNED8 bit2 :1;
UNSIGNED8 bit3 :1;
UNSIGNED8 bit4 :1;
UNSIGNED8 bit5 :1;
UNSIGNED8 bit6 :1;
UNSIGNED8 bit7 :1;
}tData8bits;
typedef union{
UNSIGNED32 DWORD[2];
UNSIGNED16 WORD[4];
UNSIGNED8 BYTE[8];
tData8bits BYTEbits[8];
}tData8bytes;
//Read one byte from multi-byte variable
#define romBYTE0(var) (((rom tData8bytes *)&(var))->BYTE[0])
#define romBYTE1(var) (((rom tData8bytes *)&(var))->BYTE[1])
#define romBYTE2(var) (((rom tData8bytes *)&(var))->BYTE[2])
#define romBYTE3(var) (((rom tData8bytes *)&(var))->BYTE[3])
#define BYTE0(var) (((tData8bytes *)&(var))->BYTE[0])
#define BYTE1(var) (((tData8bytes *)&(var))->BYTE[1])
#define BYTE2(var) (((tData8bytes *)&(var))->BYTE[2])
#define BYTE3(var) (((tData8bytes *)&(var))->BYTE[3])
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -