include/EtherCAT_si.h
changeset 74 9bf603942791
parent 71 79d7b9cfdeb9
child 77 677967864795
equal deleted inserted replaced
73:9f4ea66d89a3 74:9bf603942791
     6  *
     6  *
     7  *  $Id$
     7  *  $Id$
     8  *
     8  *
     9  *****************************************************************************/
     9  *****************************************************************************/
    10 
    10 
    11 #define EC_PROC_DATA(SLAVE) ((unsigned char *) ((SLAVE)->process_data))
       
    12 
       
    13 /*****************************************************************************/
    11 /*****************************************************************************/
    14 
    12 
    15 #define EC_READ_EL10XX(SLAVE, CHANNEL) \
    13 // Bitwise read/write macros
    16     ((EC_PROC_DATA(SLAVE)[0] >> (CHANNEL)) & 0x01)
       
    17 
    14 
    18 /*****************************************************************************/
    15 #define EC_READ_BIT(PD, CH) (*((uint8_t *) (PD)) >> (CH)) & 0x01)
    19 
    16 
    20 #define EC_WRITE_EL200X(SLAVE, CHANNEL, VALUE) \
    17 #define EC_WRITE_BIT(PD, CH, VAL) \
    21     do { \
    18     do { \
    22         if (VALUE) EC_PROC_DATA(SLAVE)[0] |=  (1 << (CHANNEL)); \
    19         if (VAL) *((uint8_t *) (PD)) |=  (1 << (CH)); \
    23         else       EC_PROC_DATA(SLAVE)[0] &= ~(1 << (CHANNEL)); \
    20         else     *((uint8_t *) (PD)) &= ~(1 << (CH)); \
    24     } while (0)
    21     } while (0)
    25 
    22 
    26 /*****************************************************************************/
    23 /*****************************************************************************/
    27 
    24 
    28 #define EC_READ_EL310X(SLAVE, CHANNEL) \
    25 // Read macros
    29     ((signed short int) ((EC_PROC_DATA(SLAVE)[(CHANNEL) * 3 + 2] << 8) | \
       
    30                           EC_PROC_DATA(SLAVE)[(CHANNEL) * 3 + 1]))
       
    31 
    26 
    32 #define EC_READ_EL316X(SLAVE, CHANNEL) \
    27 #define EC_READ_U8(PD) \
    33     ((unsigned short int) ((EC_PROC_DATA(SLAVE)[(CHANNEL) * 3 + 2] << 8) | \
    28     (*((uint8_t *) (PD)))
    34                             EC_PROC_DATA(SLAVE)[(CHANNEL) * 3 + 1]))
    29 
       
    30 #define EC_READ_S8(PD) \
       
    31     ((int8_t) *((uint8_t *) (PD)))
       
    32 
       
    33 #define EC_READ_U16(PD) \
       
    34     ((uint16_t) (*((uint8_t *) (PD) + 0) << 0 | \
       
    35                  *((uint8_t *) (PD) + 1) << 8))
       
    36 
       
    37 #define EC_READ_S16(PD) \
       
    38     ((int16_t) (*((uint8_t *) (PD) + 0) << 0 | \
       
    39                 *((uint8_t *) (PD) + 1) << 8))
       
    40 
       
    41 #define EC_READ_U32(PD) \
       
    42     ((uint32_t) (*((uint8_t *) (PD) + 0) <<  0 | \
       
    43                  *((uint8_t *) (PD) + 1) <<  8 | \
       
    44                  *((uint8_t *) (PD) + 2) << 16 | \
       
    45                  *((uint8_t *) (PD) + 3) << 24))
       
    46 
       
    47 #define EC_READ_S32(PD) \
       
    48     ((int32_t) (*((uint8_t *) (PD) + 0) <<  0 | \
       
    49                 *((uint8_t *) (PD) + 1) <<  8 | \
       
    50                 *((uint8_t *) (PD) + 2) << 16 | \
       
    51                 *((uint8_t *) (PD) + 3) << 24))
    35 
    52 
    36 /*****************************************************************************/
    53 /*****************************************************************************/
    37 
    54 
    38 #define EC_WRITE_EL410X(SLAVE, CHANNEL, VALUE) \
    55 // Write macros
       
    56 
       
    57 #define EC_WRITE_U8(PD, VAL) \
    39     do { \
    58     do { \
    40         EC_PROC_DATA(SLAVE)[(CHANNEL) * 3 + 1] = ((VALUE) & 0xFF00) >> 8; \
    59         *((uint8_t *)(PD)) = ((uint8_t) (VAL)); \
    41         EC_PROC_DATA(SLAVE)[(CHANNEL) * 3 + 2] =  (VALUE) & 0xFF; \
       
    42     } while (0)
    60     } while (0)
    43 
    61 
    44 /*****************************************************************************/
    62 #define EC_WRITE_S8(PD, VAL) EC_WRITE_U8(PD, VAL)
    45 
    63 
    46 #define EC_CONF_EL5001_BAUD (0x4067)
    64 #define EC_WRITE_U16(PD, VAL) \
       
    65     do { \
       
    66         *((uint8_t *) (PD) + 0) = ((uint16_t) (VAL) >> 0) & 0xFF; \
       
    67         *((uint8_t *) (PD) + 1) = ((uint16_t) (VAL) >> 8) & 0xFF; \
       
    68     } while (0)
    47 
    69 
    48 #define EC_READ_EL5001_STATE(SLAVE) \
    70 #define EC_WRITE_S16(PD, VAL) EC_WRITE_U16(PD, VAL)
    49     ((unsigned char) EC_PROC_DATA(SLAVE)[0])
       
    50 
    71 
    51 #define EC_READ_EL5001_VALUE(SLAVE) \
    72 #define EC_WRITE_U32(PD, VAL) \
    52     ((unsigned int) (EC_PROC_DATA(SLAVE)[1] | \
    73     do { \
    53                      (EC_PROC_DATA(SLAVE)[2] << 8) | \
    74         *((uint8_t *) (PD) + 0) = ((uint32_t) (VAL) >>  0) & 0xFF; \
    54                      (EC_PROC_DATA(SLAVE)[3] << 16) | \
    75         *((uint8_t *) (PD) + 1) = ((uint32_t) (VAL) >>  8) & 0xFF; \
    55                      (EC_PROC_DATA(SLAVE)[4] << 24)))
    76         *((uint8_t *) (PD) + 2) = ((uint32_t) (VAL) >> 16) & 0xFF; \
       
    77         *((uint8_t *) (PD) + 3) = ((uint32_t) (VAL) >> 24) & 0xFF; \
       
    78     } while (0)
    56 
    79 
    57 /*****************************************************************************/
    80 #define EC_WRITE_S32(PD, VAL) EC_WRITE_U32(PD, VAL)
    58 
       
    59 #define EC_READ_EL5101_STATE(SLAVE) \
       
    60     ((unsigned char) EC_PROC_DATA(SLAVE)[0])
       
    61 
       
    62 #define EC_READ_EL5101_VALUE(SLAVE) \
       
    63     ((unsigned int) (EC_PROC_DATA(SLAVE)[1] | \
       
    64                      (EC_PROC_DATA(SLAVE)[2] << 8)))
       
    65 
       
    66 #define EC_READ_EL5101_LATCH(SLAVE) \
       
    67     ((unsigned int) (EC_PROC_DATA(SLAVE)[3] | \
       
    68                      (EC_PROC_DATA(SLAVE)[4] << 8)))
       
    69 
    81 
    70 /*****************************************************************************/
    82 /*****************************************************************************/
    71 
    83 
    72 /* Emacs-Konfiguration
    84 /* Emacs-Konfiguration
    73 ;;; Local Variables: ***
    85 ;;; Local Variables: ***