Rev 250 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 250 | Rev 253 | ||
|---|---|---|---|
| 1 | #ifndef CAN_H_ |
1 | #ifndef CAN_H_ |
| 2 | #define CAN_H_ |
2 | #define CAN_H_ |
| 3 | 3 | ||
| 4 | /*----------------------------------------------------------------------------- |
4 | /*----------------------------------------------------------------------------- |
| 5 | * Includes |
5 | * Includes |
| 6 | *---------------------------------------------------------------------------*/ |
6 | *---------------------------------------------------------------------------*/ |
| 7 | #include <inttypes.h> |
7 | #include <inttypes.h> |
| 8 | 8 | ||
| 9 | 9 | ||
| 10 | /*----------------------------------------------------------------------------- |
10 | /*----------------------------------------------------------------------------- |
| 11 | * Type Definitions |
11 | * Type Definitions |
| 12 | *---------------------------------------------------------------------------*/ |
12 | *---------------------------------------------------------------------------*/ |
| 13 | 13 | ||
| 14 | 14 | ||
| 15 | /** |
15 | /** |
| 16 | * CAN Return Type. Most CAN functions return one of these. |
16 | * CAN Return Type. Most CAN functions return one of these. |
| 17 | */ |
17 | */ |
| 18 | typedef enum { |
18 | typedef enum { |
| 19 | CAN_FAIL = -1, /* The function failed */ |
19 | CAN_FAIL = -1, /* The function failed */ |
| 20 | CAN_OK = 1, /* The function succeeded */ |
20 | CAN_OK = 1, /* The function succeeded */ |
| 21 | 21 | ||
| 22 | CAN_MSG_AVAILABLE = 2, /* Messsages are available */ |
22 | CAN_MSG_AVAILABLE = 2, /* Messsages are available */ |
| 23 | CAN_NO_MSG_AVAILABLE = -2, /* Messages are NOT available */ |
23 | CAN_NO_MSG_AVAILABLE = -2, /* Messages are NOT available */ |
| 24 | 24 | ||
| 25 | //CAN_CTRLERROR = -4 |
25 | //CAN_CTRLERROR = -4 |
| 26 | } Can_Return_t; |
26 | } Can_Return_t; |
| 27 | 27 | ||
| 28 | 28 | ||
| 29 | /** |
29 | /** |
| 30 | * CAN Message Type. Stores a complete CAN frame. |
30 | * CAN Message Type. Stores a complete CAN frame. |
| 31 | */ |
31 | */ |
| 32 | typedef struct { |
32 | typedef struct { |
| 33 | /* |
33 | /* |
| 34 | * ID section. Contains either 29bit ID or 11bit ID (depending on ExtendedFlag). |
34 | * ID section. Contains either 29bit ID or 11bit ID (depending on ExtendedFlag). |
| 35 | */ |
35 | */ |
| 36 | uint32_t Id; |
36 | uint32_t Id; |
| 37 | 37 | ||
| 38 | /* |
38 | /* |
| 39 | * DLC section. Contains the data length expressed in number of bytes. Range [0,8]. |
39 | * DLC section. Contains the data length expressed in number of bytes. Range [0,8]. |
| 40 | */ |
40 | */ |
| 41 | uint8_t DataLength; |
41 | uint8_t DataLength; |
| 42 | 42 | ||
| 43 | /** |
43 | /** |
| 44 | * Extended frame flag. Set to 1 if the ID is 29bit, or 0 if it is 11bit. |
44 | * Extended frame flag. Set to 1 if the ID is 29bit, or 0 if it is 11bit. |
| 45 | */ |
45 | */ |
| 46 | uint8_t ExtendedFlag; |
46 | uint8_t ExtendedFlag; |
| 47 | 47 | ||
| 48 | /** |
48 | /** |
| 49 | * Remote frame flag. Set to 1 if the frame is a remote frame. 0 otherwise. |
49 | * Remote frame flag. Set to 1 if the frame is a remote frame. 0 otherwise. |
| 50 | */ |
50 | */ |
| 51 | uint8_t RemoteFlag; |
51 | uint8_t RemoteFlag; |
| 52 | 52 | ||
| 53 | /* |
53 | /* |
| 54 | * DATA section. Contains the 8 data bytes. |
54 | * DATA section. Contains the 8 data bytes. |
| 55 | */ |
55 | */ |
| 56 | union { |
56 | union { |
| 57 | /* read as 8bit unsigned data */ |
57 | /* read as 8bit unsigned data */ |
| 58 | uint8_t bytes[8]; |
58 | uint8_t bytes[8]; |
| 59 | 59 | ||
| 60 | /* read as 16bit unsigned data */ |
60 | /* read as 16bit unsigned data */ |
| 61 | uint16_t words[4]; |
61 | uint16_t words[4]; |
| 62 | 62 | ||
| 63 | /* read as 32bit unsigned data */ |
63 | /* read as 32bit unsigned data */ |
| 64 | uint32_t dwords[2]; |
64 | uint32_t dwords[2]; |
| 65 | } Data; |
65 | } Data; |
| 66 | } Can_Message_t; |
66 | } Can_Message_t; |
| 67 | 67 | ||
| - | 68 | //--------------------------------------------------------------------------- |
|
| - | 69 | // CAN ID definitions |
|
| 68 | 70 | ||
| - | 71 | #define CAN_MASK_CLASS 0x1E000000 |
|
| - | 72 | #define CAN_SHIFT_CLASS 25 |
|
| 69 |
|
73 | //------------------------------------ |
| - | 74 | #define CAN_NMT 0x00UL |
|
| - | 75 | #define CAN_MASK_NMT_TYPE 0x01F00000 |
|
| - | 76 | #define CAN_SHIFT_NMT_TYPE 20 |
|
| - | 77 | #define CAN_MASK_NMT_NID 0x000F0000 |
|
| - | 78 | #define CAN_SHIFT_NMT_NID 16 |
|
| - | 79 | #define CAN_MASK_NMT_SID 0x0000FF00 |
|
| - | 80 | #define CAN_SHIFT_NMT_SID 8 |
|
| - | 81 | #define CAN_MASK_NMT_RID 0x000000FF |
|
| 70 |
|
82 | #define CAN_SHIFT_NMT_RID 0 |
| - | 83 | #define CAN_NMT_RESET 0x00UL |
|
| - | 84 | #define CAN_NMT_BIOS_START 0x01UL //D0: VER7:0, D1:VER15:8, D2: 0 if no app, >0 if app |
|
| - | 85 | #define CAN_NMT_PGM_START 0x02UL //D0: ADR7:0, D1:ADR15:8, D2:ADR23:16, D3:ADR31:24 |
|
| - | 86 | #define CAN_NMT_PGM_DATA 0x03UL //D0: OFS7:0, D1: OFS15:8, D(n+2): DATAn7:0 [n=0..x] [x=0..5] |
|
| - | 87 | #define CAN_NMT_PGM_END 0x04UL //D0: CRC7:0, D1: CRC15:8 |
|
| - | 88 | #define CAN_NMT_PGM_ACK 0x05UL //D0: OFS7:0, D1: OFS15:8 |
|
| - | 89 | #define CAN_NMT_PGM_NACK 0x06UL //D0: OFS7:0, D1: OFS15:8 |
|
| - | 90 | #define CAN_NMT_START_APP 0x07UL |
|
| - | 91 | #define CAN_NMT_APP_START 0x08UL //D0: ID7:0, D1:ID15:8, D2: VER7:0, D3:VER15:8 |
|
| - | 92 | #define CAN_NMT_HEARTBEAT 0x09UL |
|
| 71 |
|
93 | //------------------------------------ |
| 72 | - | ||
| - | 94 | #define CAN_SNS 0x02UL |
|
| - | 95 | #define CAN_MASK_SNS_FUNCC 0x01FF8000 |
|
| 73 |
|
96 | #define CAN_SHIFT_SNS_FUNCC 15 |
| 74 |
|
97 | #define CAN_MASK_SNS_NID 0x00007E00 |
| 75 |
|
98 | #define CAN_SHIFT_SNS_NID 9 |
| 76 |
|
99 | #define CAN_MASK_SNS_SID 0x000001FF |
| - | 100 | #define CAN_SHIFT_SNS_SID 0 |
|
| - | 101 | //------------------------------------ |
|
| - | 102 | #define CAN_PKT 0x0c000000 |
|
| - | 103 | //------------------------------------ |
|
| - | 104 | #define CAN_CON 0x10000000 |
|
| - | 105 | //------------------------------------ |
|
| - | 106 | #define CAN_TST 0x1E000000 |
|
| - | 107 | //------------------------------------ |
|
| 77 | 108 | ||
| 78 | #endif |
109 | #endif |
| 79 | 110 | ||