include/EtherCAT_si.h
changeset 77 677967864795
parent 74 9bf603942791
equal deleted inserted replaced
76:9dc136e3801c 77:677967864795
     5  *  EtherCAT Slave-Interface.
     5  *  EtherCAT Slave-Interface.
     6  *
     6  *
     7  *  $Id$
     7  *  $Id$
     8  *
     8  *
     9  *****************************************************************************/
     9  *****************************************************************************/
       
    10 
       
    11 #include <asm/byteorder.h>
    10 
    12 
    11 /*****************************************************************************/
    13 /*****************************************************************************/
    12 
    14 
    13 // Bitwise read/write macros
    15 // Bitwise read/write macros
    14 
    16 
    22 
    24 
    23 /*****************************************************************************/
    25 /*****************************************************************************/
    24 
    26 
    25 // Read macros
    27 // Read macros
    26 
    28 
    27 #define EC_READ_U8(PD) \
    29 #define EC_READ_U8(PD) ((uint8_t) *((uint8_t *) (PD)))
    28     (*((uint8_t *) (PD)))
    30 #define EC_READ_S8(PD) ((int8_t)  *((uint8_t *) (PD)))
    29 
    31 
    30 #define EC_READ_S8(PD) \
    32 #define EC_READ_U16(PD) ((uint16_t) le16_to_cpup((void *) (PD)))
    31     ((int8_t) *((uint8_t *) (PD)))
    33 #define EC_READ_S16(PD) ((int16_t)  le16_to_cpup((void *) (PD)))
    32 
    34 
    33 #define EC_READ_U16(PD) \
    35 #define EC_READ_U32(PD) ((uint32_t) le32_to_cpup((void *) (PD)))
    34     ((uint16_t) (*((uint8_t *) (PD) + 0) << 0 | \
    36 #define EC_READ_S32(PD) ((int32_t)  le32_to_cpup((void *) (PD)))
    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))
       
    52 
    37 
    53 /*****************************************************************************/
    38 /*****************************************************************************/
    54 
    39 
    55 // Write macros
    40 // Write macros
    56 
    41 
    61 
    46 
    62 #define EC_WRITE_S8(PD, VAL) EC_WRITE_U8(PD, VAL)
    47 #define EC_WRITE_S8(PD, VAL) EC_WRITE_U8(PD, VAL)
    63 
    48 
    64 #define EC_WRITE_U16(PD, VAL) \
    49 #define EC_WRITE_U16(PD, VAL) \
    65     do { \
    50     do { \
    66         *((uint8_t *) (PD) + 0) = ((uint16_t) (VAL) >> 0) & 0xFF; \
    51         *((uint16_t *) (PD)) = (uint16_t) (VAL); \
    67         *((uint8_t *) (PD) + 1) = ((uint16_t) (VAL) >> 8) & 0xFF; \
    52         cpu_to_le16s(PD); \
    68     } while (0)
    53     } while (0)
    69 
    54 
    70 #define EC_WRITE_S16(PD, VAL) EC_WRITE_U16(PD, VAL)
    55 #define EC_WRITE_S16(PD, VAL) EC_WRITE_U16(PD, VAL)
    71 
    56 
    72 #define EC_WRITE_U32(PD, VAL) \
    57 #define EC_WRITE_U32(PD, VAL) \
    73     do { \
    58     do { \
    74         *((uint8_t *) (PD) + 0) = ((uint32_t) (VAL) >>  0) & 0xFF; \
    59         *((uint32_t *) (PD)) = (uint32_t) (VAL); \
    75         *((uint8_t *) (PD) + 1) = ((uint32_t) (VAL) >>  8) & 0xFF; \
    60         cpu_to_le16s(PD); \
    76         *((uint8_t *) (PD) + 2) = ((uint32_t) (VAL) >> 16) & 0xFF; \
       
    77         *((uint8_t *) (PD) + 3) = ((uint32_t) (VAL) >> 24) & 0xFF; \
       
    78     } while (0)
    61     } while (0)
    79 
    62 
    80 #define EC_WRITE_S32(PD, VAL) EC_WRITE_U32(PD, VAL)
    63 #define EC_WRITE_S32(PD, VAL) EC_WRITE_U32(PD, VAL)
    81 
    64 
    82 /*****************************************************************************/
    65 /*****************************************************************************/