⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 canopdefines.h

📁 CanOpen节点的源代码
💻 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 + -