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 */ |
|