include/EtherCAT_si.h
changeset 104 052bc82d5442
parent 103 d2a8adde27c4
child 105 fad6709a526f
equal deleted inserted replaced
103:d2a8adde27c4 104:052bc82d5442
     1 /******************************************************************************
       
     2  *
       
     3  *  E t h e r C A T _ s i . h
       
     4  *
       
     5  *  EtherCAT Slave-Interface.
       
     6  *
       
     7  *  $Id$
       
     8  *
       
     9  *****************************************************************************/
       
    10 
       
    11 #include <asm/byteorder.h>
       
    12 
       
    13 /*****************************************************************************/
       
    14 
       
    15 // Bitwise read/write macros
       
    16 
       
    17 #define EC_READ_BIT(PD, CH) (*((uint8_t *) (PD)) >> (CH)) & 0x01)
       
    18 
       
    19 #define EC_WRITE_BIT(PD, CH, VAL) \
       
    20     do { \
       
    21         if (VAL) *((uint8_t *) (PD)) |=  (1 << (CH)); \
       
    22         else     *((uint8_t *) (PD)) &= ~(1 << (CH)); \
       
    23     } while (0)
       
    24 
       
    25 /*****************************************************************************/
       
    26 
       
    27 // Read macros
       
    28 
       
    29 #define EC_READ_U8(PD) ((uint8_t) *((uint8_t *) (PD)))
       
    30 #define EC_READ_S8(PD) ((int8_t)  *((uint8_t *) (PD)))
       
    31 
       
    32 #define EC_READ_U16(PD) ((uint16_t) le16_to_cpup((void *) (PD)))
       
    33 #define EC_READ_S16(PD) ((int16_t)  le16_to_cpup((void *) (PD)))
       
    34 
       
    35 #define EC_READ_U32(PD) ((uint32_t) le32_to_cpup((void *) (PD)))
       
    36 #define EC_READ_S32(PD) ((int32_t)  le32_to_cpup((void *) (PD)))
       
    37 
       
    38 /*****************************************************************************/
       
    39 
       
    40 // Write macros
       
    41 
       
    42 #define EC_WRITE_U8(PD, VAL) \
       
    43     do { \
       
    44         *((uint8_t *)(PD)) = ((uint8_t) (VAL)); \
       
    45     } while (0)
       
    46 
       
    47 #define EC_WRITE_S8(PD, VAL) EC_WRITE_U8(PD, VAL)
       
    48 
       
    49 #define EC_WRITE_U16(PD, VAL) \
       
    50     do { \
       
    51         *((uint16_t *) (PD)) = (uint16_t) (VAL); \
       
    52         cpu_to_le16s(PD); \
       
    53     } while (0)
       
    54 
       
    55 #define EC_WRITE_S16(PD, VAL) EC_WRITE_U16(PD, VAL)
       
    56 
       
    57 #define EC_WRITE_U32(PD, VAL) \
       
    58     do { \
       
    59         *((uint32_t *) (PD)) = (uint32_t) (VAL); \
       
    60         cpu_to_le16s(PD); \
       
    61     } while (0)
       
    62 
       
    63 #define EC_WRITE_S32(PD, VAL) EC_WRITE_U32(PD, VAL)
       
    64 
       
    65 /*****************************************************************************/
       
    66 
       
    67 /* Emacs-Konfiguration
       
    68 ;;; Local Variables: ***
       
    69 ;;; c-basic-offset:4 ***
       
    70 ;;; End: ***
       
    71 */