-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathCAN.h
More file actions
326 lines (269 loc) · 12 KB
/
CAN.h
File metadata and controls
326 lines (269 loc) · 12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
//****************************************************************************
// @Module MultiCAN Controller
// @Filename CAN.h
// @Project DAVE_SG.dav
//----------------------------------------------------------------------------
// @Controller Infineon TC1797
//
// @Compiler Tasking 3.1
//
// @Codegenerator 1.0
//
// @Description This file contains all function prototypes and macros for
// the CAN module.
//
//----------------------------------------------------------------------------
// @Date 2013-11-20 13:40:30
//
//****************************************************************************
// USER CODE BEGIN (CAN_Header,1)
// USER CODE END
#ifndef _CAN_H_
#define _CAN_H_
//****************************************************************************
// @Project Includes
//****************************************************************************
// USER CODE BEGIN (CAN_Header,2)
// USER CODE END
//****************************************************************************
// @Macros
//****************************************************************************
// USER CODE BEGIN (CAN_Header,3)
// USER CODE END
//****************************************************************************
// @Defines
//****************************************************************************
// USER CODE BEGIN (CAN_Header,4)
// USER CODE END
//****************************************************************************
// @Typedefs
//****************************************************************************
/// -------------------------------------------------------------------------
/// @Definition of a structure for the CAN data
/// -------------------------------------------------------------------------
// The following data type serves as a software message object. Each access to
// a hardware message object has to be made by forward a pointer to a software
// message object (CAN_SWObj). The data type has the following fields:
//
// usMOCfg:
// this byte contains the "Data Lenght Code" (DLC), the
// "Extended Identifier" (IDE) and the "Message Direction" (DIR).
//
//
// 7 6 5 4 3 2 1 0
// |------------------------------------------------|
// | DLC | DIR | IDE | | |
// |------------------------------------------------|
//
// uwID:
// this field is four bytes long and contains either the 11-bit identifier
// or the 29-bit identifier
//
// uwMask:
// this field is four bytes long and contains either the 11-bit mask
// or the 29-bit mask
//
// ubData[8]:
// 8 bytes containing the data of a frame
//
// usCounter:
// this field is two bytes long and contains the counter value
//
typedef struct
{
ushort usMOCfg; // message object configuration register
uword uwID; // standard (11-bit)/extended (29-bit) identifier
uword uwMask; // standard (11-bit)/extended (29-bit) mask
ubyte ubData[8]; // 8-bit data bytes
ushort usCounter; // frame counter
}CAN_SWObj;
// USER CODE BEGIN (CAN_Header,5)
// USER CODE END
//****************************************************************************
// @Imported Global Variables
//****************************************************************************
// USER CODE BEGIN (CAN_Header,6)
// USER CODE END
//****************************************************************************
// @Global Variables
//****************************************************************************
// USER CODE BEGIN (CAN_Header,7)
// USER CODE END
//****************************************************************************
// @Prototypes Of Global Functions
//****************************************************************************
void CAN_vInit(void);
void CAN_vGetMsgObj(ubyte ubObjNr, CAN_SWObj *pstObj);
ubyte CAN_ubRequestMsgObj(ubyte ubObjNr);
ubyte CAN_ubNewData(ubyte ubObjNr);
void CAN_vTransmit(ubyte ubObjNr);
void CAN_vConfigMsgObj(ubyte ubObjNr, CAN_SWObj *pstObj);
void CAN_vLoadData(ubyte ubObjNr, ubyte *pubData);
ubyte CAN_ubMsgLost(ubyte ubObjNr);
ubyte CAN_ubDelMsgObj(ubyte ubObjNr);
void CAN_vReleaseObj(ubyte ubObjNr);
void CAN_vSetMSGVAL(ubyte ubObjNr);
ubyte CAN_ubWriteFIFO(ubyte ubObjNr, CAN_SWObj *pstObj);
ubyte CAN_ubReadFIFO(ubyte ubObjNr, CAN_SWObj *pstObj);
// USER CODE BEGIN (CAN_Header,8)
// USER CODE END
//****************************************************************************
// @Macro CAN_ubGetTxErrorCounter(NODE_NAME)
//
//----------------------------------------------------------------------------
// @Description This macro returns the current value of the transmit error
// counter of the selected node.
//
// The following definitions for NODE_NAME are available:
// CAN_NODE0 (node 0)
// CAN_NODE1 (node 1)
// CAN_NODE2 (node 2)
// CAN_NODE3 (node 3)
//
//
//----------------------------------------------------------------------------
// @Returnvalue Value of the transmit error counter
//
//----------------------------------------------------------------------------
// @Parameters NODE_NAME:
// Name of the node
//
//----------------------------------------------------------------------------
// @Date 2013-11-20
//
//****************************************************************************
#define CAN_ubGetTxErrorCounter(NODE_NAME) _GetTxErrorCounter##NODE_NAME()
#define _GetTxErrorCounterCAN_NODE0() CAN_NECNT0.B.TEC
#define _GetTxErrorCounterCAN_NODE1() CAN_NECNT1.B.TEC
#define _GetTxErrorCounterCAN_NODE2() CAN_NECNT2.B.TEC
#define _GetTxErrorCounterCAN_NODE3() CAN_NECNT3.B.TEC
//****************************************************************************
// @Macro CAN_ubGetRxErrorCounter(NODE_NAME)
//
//----------------------------------------------------------------------------
// @Description This macro returns the current value of the receive error
// counter of the selected node.
//
// The following definitions for NODE_NAME are available:
// CAN_NODE0 (node 0)
// CAN_NODE1 (node 1)
// CAN_NODE2 (node 2)
// CAN_NODE3 (node 3)
//
//
//----------------------------------------------------------------------------
// @Returnvalue Value of the receive error counter
//
//----------------------------------------------------------------------------
// @Parameters NODE_NAME:
// Name of the node
//
//----------------------------------------------------------------------------
// @Date 2013-11-20
//
//****************************************************************************
#define CAN_ubGetRxErrorCounter(NODE_NAME) _GetRxErrorCounter##NODE_NAME()
#define _GetRxErrorCounterCAN_NODE0() CAN_NECNT0.B.REC
#define _GetRxErrorCounterCAN_NODE1() CAN_NECNT1.B.REC
#define _GetRxErrorCounterCAN_NODE2() CAN_NECNT2.B.REC
#define _GetRxErrorCounterCAN_NODE3() CAN_NECNT3.B.REC
//****************************************************************************
// @Macro CAN_ubGetErrorTransferDirection(NODE_NAME)
//
//----------------------------------------------------------------------------
// @Description This macro returns the current value of the Last Error
// Transfer Direction flag. 0 indicates that the last error
// occurred while the selected CAN node was receiving a
// message. The receive error counter has been incremented. 1
// indicates that the last error occurred while the selected
// CAN node was transmitting a message. The transmit error
// counter has been incremented.
//
// The following definitions for NODE_NAME are available:
// CAN_NODE0 (node 0)
// CAN_NODE1 (node 1)
// CAN_NODE2 (node 2)
// CAN_NODE3 (node 3)
//
//
//----------------------------------------------------------------------------
// @Returnvalue 0 receive error, else transmit error
//
//----------------------------------------------------------------------------
// @Parameters NODE_NAME:
// Name of the node
//
//----------------------------------------------------------------------------
// @Date 2013-11-20
//
//****************************************************************************
#define CAN_ubGetErrorTransferDirection(NODE_NAME) _GetErrorTransferDirection##NODE_NAME()
#define _GetErrorTransferDirectionCAN_NODE0() CAN_NECNT0.B.LETD
#define _GetErrorTransferDirectionCAN_NODE1() CAN_NECNT1.B.LETD
#define _GetErrorTransferDirectionCAN_NODE2() CAN_NECNT2.B.LETD
#define _GetErrorTransferDirectionCAN_NODE3() CAN_NECNT3.B.LETD
//****************************************************************************
// @Macro CAN_ubGetErrorIncrement(NODE_NAME)
//
//----------------------------------------------------------------------------
// @Description This macro returns the current value of the Last Error
// Increment flag. If the Bit Stream Processor itself detects
// an error while a transmit operation is running, the
// Transmit Error Counter is incremented by 8. An increment of
// 1 is used, when the error condition was reported by an
// external CAN node via an error frame generation.
//
// The following definitions for NODE_NAME are available:
// CAN_NODE0 (node 0)
// CAN_NODE1 (node 1)
// CAN_NODE2 (node 2)
// CAN_NODE3 (node 3)
//
//
//----------------------------------------------------------------------------
// @Returnvalue 0 counter is incrementd by 1, counter is incremented by 8
//
//----------------------------------------------------------------------------
// @Parameters NODE_NAME:
// Name of the node
//
//----------------------------------------------------------------------------
// @Date 2013-11-20
//
//****************************************************************************
#define CAN_ubGetErrorIncrement(NODE_NAME) _GetErrorIncrement##NODE_NAME()
#define _GetErrorIncrementCAN_NODE0() CAN_NECNT0.B.LEINC
#define _GetErrorIncrementCAN_NODE1() CAN_NECNT1.B.LEINC
#define _GetErrorIncrementCAN_NODE2() CAN_NECNT2.B.LEINC
#define _GetErrorIncrementCAN_NODE3() CAN_NECNT3.B.LEINC
//****************************************************************************
// @Interrupt Vectors
//****************************************************************************
#define CAN_SRN0INT 0x03
#define CAN_SRN1INT 0x01
#define CAN_SRN2INT 0x04
#define CAN_SRN3INT 0x05
#define CAN_SRN4INT 0x06
#define CAN_SRN5INT 0x07
#define CAN_SRN6INT 0x08
#define CAN_SRN7INT 0x09
#define CAN_SRN8INT 0x0A
#define CAN_SRN9INT 0x0B
//'------------------------------------------------------------------------------------------------
//' Macros Defined for message Objects
//'------------------------------------------------------------------------------------------------
#define CAN_MOCTRm_CTR_RESRXPND_MASK 0x00000001
#define CAN_MOCTRm_CTR_RESTXPND_MASK 0x00000002
#define CAN_MOCTRm_CTR_RESRXUPD_MASK 0x00000004
#define CAN_MOCTRm_CTR_RESNEWDAT_MASK 0x00000008
#define CAN_MOCTRm_CTR_RESMSGLST_MASK 0x00000010
#define CAN_MOCTRm_CTR_RESMSGVAL_MASK 0x00000020
#define CAN_MOCTRm_CTR_RESRTSEL_MASK 0x00000040
#define CAN_MOCTRm_CTR_RESRXEN_MASK 0x00000080
#define CAN_MOCTRm_CTR_RESTXRQ_MASK 0x00000100
#define CAN_MOCTRm_CTR_RESTXEN0_MASK 0x00000200
#define CAN_MOCTRm_CTR_RESTXEN1_MASK 0x00000400
#define CAN_MOCTRm_CTR_RESDIR_MASK 0x00000800
// USER CODE BEGIN (CAN_Header,9)
// USER CODE END
#endif // ifndef _CAN_H_