72 lines
1.9 KiB
C
72 lines
1.9 KiB
C
/******************************************************************************
|
|
*
|
|
* E t h e r C A T _ s i . h
|
|
*
|
|
* EtherCAT Slave-Interface.
|
|
*
|
|
* $Id$
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#include <asm/byteorder.h>
|
|
|
|
/*****************************************************************************/
|
|
|
|
// Bitwise read/write macros
|
|
|
|
#define EC_READ_BIT(PD, CH) (*((uint8_t *) (PD)) >> (CH)) & 0x01)
|
|
|
|
#define EC_WRITE_BIT(PD, CH, VAL) \
|
|
do { \
|
|
if (VAL) *((uint8_t *) (PD)) |= (1 << (CH)); \
|
|
else *((uint8_t *) (PD)) &= ~(1 << (CH)); \
|
|
} while (0)
|
|
|
|
/*****************************************************************************/
|
|
|
|
// Read macros
|
|
|
|
#define EC_READ_U8(PD) ((uint8_t) *((uint8_t *) (PD)))
|
|
#define EC_READ_S8(PD) ((int8_t) *((uint8_t *) (PD)))
|
|
|
|
#define EC_READ_U16(PD) ((uint16_t) le16_to_cpup((void *) (PD)))
|
|
#define EC_READ_S16(PD) ((int16_t) le16_to_cpup((void *) (PD)))
|
|
|
|
#define EC_READ_U32(PD) ((uint32_t) le32_to_cpup((void *) (PD)))
|
|
#define EC_READ_S32(PD) ((int32_t) le32_to_cpup((void *) (PD)))
|
|
|
|
/*****************************************************************************/
|
|
|
|
// Write macros
|
|
|
|
#define EC_WRITE_U8(PD, VAL) \
|
|
do { \
|
|
*((uint8_t *)(PD)) = ((uint8_t) (VAL)); \
|
|
} while (0)
|
|
|
|
#define EC_WRITE_S8(PD, VAL) EC_WRITE_U8(PD, VAL)
|
|
|
|
#define EC_WRITE_U16(PD, VAL) \
|
|
do { \
|
|
*((uint16_t *) (PD)) = (uint16_t) (VAL); \
|
|
cpu_to_le16s(PD); \
|
|
} while (0)
|
|
|
|
#define EC_WRITE_S16(PD, VAL) EC_WRITE_U16(PD, VAL)
|
|
|
|
#define EC_WRITE_U32(PD, VAL) \
|
|
do { \
|
|
*((uint32_t *) (PD)) = (uint32_t) (VAL); \
|
|
cpu_to_le16s(PD); \
|
|
} while (0)
|
|
|
|
#define EC_WRITE_S32(PD, VAL) EC_WRITE_U32(PD, VAL)
|
|
|
|
/*****************************************************************************/
|
|
|
|
/* Emacs-Konfiguration
|
|
;;; Local Variables: ***
|
|
;;; c-basic-offset:4 ***
|
|
;;; End: ***
|
|
*/
|