include/ecrt.h
changeset 894 440c43d56b33
parent 893 d921fff3d6e2
child 900 f8b5c6d21705
equal deleted inserted replaced
893:d921fff3d6e2 894:440c43d56b33
   790 /******************************************************************************
   790 /******************************************************************************
   791  * Bitwise read/write macros
   791  * Bitwise read/write macros
   792  *****************************************************************************/
   792  *****************************************************************************/
   793 
   793 
   794 /** Read a certain bit of an EtherCAT data byte.
   794 /** Read a certain bit of an EtherCAT data byte.
       
   795  *
   795  * \param DATA EtherCAT data pointer
   796  * \param DATA EtherCAT data pointer
   796  * \param POS bit position
   797  * \param POS bit position
   797  */
   798  */
   798 #define EC_READ_BIT(DATA, POS) ((*((uint8_t *) (DATA)) >> (POS)) & 0x01)
   799 #define EC_READ_BIT(DATA, POS) ((*((uint8_t *) (DATA)) >> (POS)) & 0x01)
   799 
   800 
   800 /** Write a certain bit of an EtherCAT data byte.
   801 /** Write a certain bit of an EtherCAT data byte.
       
   802  *
   801  * \param DATA EtherCAT data pointer
   803  * \param DATA EtherCAT data pointer
   802  * \param POS bit position
   804  * \param POS bit position
   803  * \param VAL new bit value
   805  * \param VAL new bit value
   804  */
   806  */
   805 #define EC_WRITE_BIT(DATA, POS, VAL) \
   807 #define EC_WRITE_BIT(DATA, POS, VAL) \
   811 /******************************************************************************
   813 /******************************************************************************
   812  * Read macros
   814  * Read macros
   813  *****************************************************************************/
   815  *****************************************************************************/
   814 
   816 
   815 /** Read an 8-bit unsigned value from EtherCAT data.
   817 /** Read an 8-bit unsigned value from EtherCAT data.
       
   818  *
   816  * \return EtherCAT data value
   819  * \return EtherCAT data value
   817  */
   820  */
   818 #define EC_READ_U8(DATA) \
   821 #define EC_READ_U8(DATA) \
   819     ((uint8_t) *((uint8_t *) (DATA)))
   822     ((uint8_t) *((uint8_t *) (DATA)))
   820 
   823 
   821 /** Read an 8-bit signed value from EtherCAT data.
   824 /** Read an 8-bit signed value from EtherCAT data.
       
   825  *
   822  * \param DATA EtherCAT data pointer
   826  * \param DATA EtherCAT data pointer
   823  * \return EtherCAT data value
   827  * \return EtherCAT data value
   824  */
   828  */
   825 #define EC_READ_S8(DATA) \
   829 #define EC_READ_S8(DATA) \
   826      ((int8_t) *((uint8_t *) (DATA)))
   830      ((int8_t) *((uint8_t *) (DATA)))
   827 
   831 
   828 /** Read a 16-bit unsigned value from EtherCAT data.
   832 /** Read a 16-bit unsigned value from EtherCAT data.
       
   833  *
   829  * \param DATA EtherCAT data pointer
   834  * \param DATA EtherCAT data pointer
   830  * \return EtherCAT data value
   835  * \return EtherCAT data value
   831  */
   836  */
   832 #define EC_READ_U16(DATA) \
   837 #define EC_READ_U16(DATA) \
   833      ((uint16_t) le16_to_cpup((void *) (DATA)))
   838      ((uint16_t) le16_to_cpup((void *) (DATA)))
   834 
   839 
   835 /** Read a 16-bit signed value from EtherCAT data.
   840 /** Read a 16-bit signed value from EtherCAT data.
       
   841  *
   836  * \param DATA EtherCAT data pointer
   842  * \param DATA EtherCAT data pointer
   837  * \return EtherCAT data value
   843  * \return EtherCAT data value
   838  */
   844  */
   839 #define EC_READ_S16(DATA) \
   845 #define EC_READ_S16(DATA) \
   840      ((int16_t) le16_to_cpup((void *) (DATA)))
   846      ((int16_t) le16_to_cpup((void *) (DATA)))
   841 
   847 
   842 /** Read a 32-bit unsigned value from EtherCAT data.
   848 /** Read a 32-bit unsigned value from EtherCAT data.
       
   849  *
   843  * \param DATA EtherCAT data pointer
   850  * \param DATA EtherCAT data pointer
   844  * \return EtherCAT data value
   851  * \return EtherCAT data value
   845  */
   852  */
   846 #define EC_READ_U32(DATA) \
   853 #define EC_READ_U32(DATA) \
   847      ((uint32_t) le32_to_cpup((void *) (DATA)))
   854      ((uint32_t) le32_to_cpup((void *) (DATA)))
   848 
   855 
   849 /** Read a 32-bit signed value from EtherCAT data.
   856 /** Read a 32-bit signed value from EtherCAT data.
       
   857  *
   850  * \param DATA EtherCAT data pointer
   858  * \param DATA EtherCAT data pointer
   851  * \return EtherCAT data value
   859  * \return EtherCAT data value
   852  */
   860  */
   853 #define EC_READ_S32(DATA) \
   861 #define EC_READ_S32(DATA) \
   854      ((int32_t) le32_to_cpup((void *) (DATA)))
   862      ((int32_t) le32_to_cpup((void *) (DATA)))
   856 /******************************************************************************
   864 /******************************************************************************
   857  * Write macros
   865  * Write macros
   858  *****************************************************************************/
   866  *****************************************************************************/
   859 
   867 
   860 /** Write an 8-bit unsigned value to EtherCAT data.
   868 /** Write an 8-bit unsigned value to EtherCAT data.
       
   869  *
   861  * \param DATA EtherCAT data pointer
   870  * \param DATA EtherCAT data pointer
   862  * \param VAL new value
   871  * \param VAL new value
   863  */
   872  */
   864 #define EC_WRITE_U8(DATA, VAL) \
   873 #define EC_WRITE_U8(DATA, VAL) \
   865     do { \
   874     do { \
   866         *((uint8_t *)(DATA)) = ((uint8_t) (VAL)); \
   875         *((uint8_t *)(DATA)) = ((uint8_t) (VAL)); \
   867     } while (0)
   876     } while (0)
   868 
   877 
   869 /** Write an 8-bit signed value to EtherCAT data.
   878 /** Write an 8-bit signed value to EtherCAT data.
       
   879  *
   870  * \param DATA EtherCAT data pointer
   880  * \param DATA EtherCAT data pointer
   871  * \param VAL new value
   881  * \param VAL new value
   872  */
   882  */
   873 #define EC_WRITE_S8(DATA, VAL) EC_WRITE_U8(DATA, VAL)
   883 #define EC_WRITE_S8(DATA, VAL) EC_WRITE_U8(DATA, VAL)
   874 
   884 
   875 /** Write a 16-bit unsigned value to EtherCAT data.
   885 /** Write a 16-bit unsigned value to EtherCAT data.
       
   886  *
   876  * \param DATA EtherCAT data pointer
   887  * \param DATA EtherCAT data pointer
   877  * \param VAL new value
   888  * \param VAL new value
   878  */
   889  */
   879 #define EC_WRITE_U16(DATA, VAL) \
   890 #define EC_WRITE_U16(DATA, VAL) \
   880     do { \
   891     do { \
   881         *((uint16_t *) (DATA)) = (uint16_t) (VAL); \
   892         *((uint16_t *) (DATA)) = cpu_to_le16((uint16_t) (VAL)); \
   882         cpu_to_le16s((uint16_t *) (DATA)); \
       
   883     } while (0)
   893     } while (0)
   884 
   894 
   885 /** Write a 16-bit signed value to EtherCAT data.
   895 /** Write a 16-bit signed value to EtherCAT data.
       
   896  *
   886  * \param DATA EtherCAT data pointer
   897  * \param DATA EtherCAT data pointer
   887  * \param VAL new value
   898  * \param VAL new value
   888  */
   899  */
   889 #define EC_WRITE_S16(DATA, VAL) EC_WRITE_U16(DATA, VAL)
   900 #define EC_WRITE_S16(DATA, VAL) EC_WRITE_U16(DATA, VAL)
   890 
   901 
   891 /** Write a 32-bit unsigned value to EtherCAT data.
   902 /** Write a 32-bit unsigned value to EtherCAT data.
       
   903  *
   892  * \param DATA EtherCAT data pointer
   904  * \param DATA EtherCAT data pointer
   893  * \param VAL new value
   905  * \param VAL new value
   894  */
   906  */
   895 #define EC_WRITE_U32(DATA, VAL) \
   907 #define EC_WRITE_U32(DATA, VAL) \
   896     do { \
   908     do { \
   897         *((uint32_t *) (DATA)) = (uint32_t) (VAL); \
   909         *((uint32_t *) (DATA)) = cpu_to_le32((uint32_t) (VAL)); \
   898         cpu_to_le32s((uint32_t *) (DATA)); \
       
   899     } while (0)
   910     } while (0)
   900 
   911 
   901 /** Write a 32-bit signed value to EtherCAT data.
   912 /** Write a 32-bit signed value to EtherCAT data.
       
   913  *
   902  * \param DATA EtherCAT data pointer
   914  * \param DATA EtherCAT data pointer
   903  * \param VAL new value
   915  * \param VAL new value
   904  */
   916  */
   905 #define EC_WRITE_S32(DATA, VAL) EC_WRITE_U32(DATA, VAL)
   917 #define EC_WRITE_S32(DATA, VAL) EC_WRITE_U32(DATA, VAL)
   906 
   918