@@ -114,15 +114,27 @@ static int32_t
114
114
ARM_CAN0_Initialize (ARM_CAN_SignalUnitEvent_t cb_unit_event ,
115
115
ARM_CAN_SignalObjectEvent_t cb_object_event );
116
116
static int32_t
117
+ ARM_CAN1_Initialize (ARM_CAN_SignalUnitEvent_t cb_unit_event ,
118
+ ARM_CAN_SignalObjectEvent_t cb_object_event );
119
+ static int32_t
117
120
ARM_CAN_Initialize (uint8_t CANIdx ,
118
121
ARM_CAN_SignalUnitEvent_t cb_unit_event ,
119
122
ARM_CAN_SignalObjectEvent_t cb_object_event );
123
+ static int32_t ARM_CAN0_Uninitialize (void );
124
+ static int32_t ARM_CAN1_Uninitialize (void );
125
+ static int32_t ARM_CAN_Uninitialize (volatile CanHandle_t * CAN );
126
+
120
127
uint8_t Can_GetControllerIdx (volatile CanHandle_t * CAN );
121
128
static int32_t
122
129
ARM_CAN0_MessageRead (uint32_t ObjIdx ,
123
130
ARM_CAN_MSG_INFO * MsgInfo ,
124
131
uint8_t * Data ,
125
132
uint8_t Size );
133
+ static int32_t
134
+ ARM_CAN1_MessageRead (uint32_t ObjIdx ,
135
+ ARM_CAN_MSG_INFO * MsgInfo ,
136
+ uint8_t * Data ,
137
+ uint8_t Size );
126
138
127
139
static int32_t
128
140
ARM_CAN_MessageRead (volatile CanHandle_t * CAN ,
@@ -131,10 +143,26 @@ ARM_CAN_MessageRead(volatile CanHandle_t* CAN,
131
143
uint8_t * Data ,
132
144
uint8_t Size );
133
145
static int32_t ARM_CAN0_Control (uint32_t control , uint32_t arg );
146
+ static int32_t ARM_CAN1_Control (uint32_t control , uint32_t arg );
134
147
static int32_t ARM_CAN_Control (volatile CanHandle_t * CAN , uint32_t control , uint32_t arg );
135
148
136
149
static ARM_CAN_STATUS ARM_CAN0_GetStatus (void );
150
+ static ARM_CAN_STATUS ARM_CAN1_GetStatus (void );
137
151
static ARM_CAN_STATUS ARM_CAN_GetStatus (volatile CanHandle_t * CAN );
152
+
153
+ static int32_t
154
+ ARM_CAN0_SetBitrate (ARM_CAN_BITRATE_SELECT select ,
155
+ uint32_t bitrate ,
156
+ uint32_t bit_segments );
157
+ static int32_t
158
+ ARM_CAN1_SetBitrate (ARM_CAN_BITRATE_SELECT select ,
159
+ uint32_t bitrate ,
160
+ uint32_t bit_segments );
161
+ static int32_t
162
+ ARM_CAN_SetBitrate (volatile CanHandle_t * CAN ,
163
+ ARM_CAN_BITRATE_SELECT select ,
164
+ uint32_t bitrate ,
165
+ uint32_t bit_segments );
138
166
// module variable definitons
139
167
140
168
//driver version
@@ -166,8 +194,8 @@ static const ARM_CAN_OBJ_CAPABILITIES can_object_capabilities = {
166
194
0U // Reserved (must be zero)
167
195
};
168
196
169
- static uint8_t can_driver_powered = 0U ;
170
- static uint8_t can_driver_initialized = 0U ;
197
+ static uint8_t can_driver_powered [ MAX_CAN_CONTROLLERS ] ;
198
+ static uint8_t can_driver_initialized [ MAX_CAN_CONTROLLERS ] ;
171
199
static ARM_CAN_SignalUnitEvent_t CAN_SignalUnitEvent [MAX_CAN_CONTROLLERS ];
172
200
static ARM_CAN_SignalObjectEvent_t CAN_SignalObjectEvent [MAX_CAN_CONTROLLERS ];
173
201
static CanFilter_t gFilters [MAX_CAN_CONTROLLERS ][MAX_OBJ_NUM ];
@@ -193,26 +221,45 @@ ARM_CAN0_Initialize(ARM_CAN_SignalUnitEvent_t cb_unit_event,
193
221
ARM_CAN_SignalObjectEvent_t cb_object_event )
194
222
{
195
223
return ARM_CAN_Initialize (0 , cb_unit_event , cb_object_event );
224
+ }
225
+
226
+ static int32_t
227
+ ARM_CAN1_Initialize (ARM_CAN_SignalUnitEvent_t cb_unit_event ,
228
+ ARM_CAN_SignalObjectEvent_t cb_object_event )
229
+ {
230
+ return ARM_CAN_Initialize (1 , cb_unit_event , cb_object_event );
196
231
}
197
232
198
233
static int32_t
199
234
ARM_CAN_Initialize (uint8_t CANIdx ,
200
235
ARM_CAN_SignalUnitEvent_t cb_unit_event ,
201
236
ARM_CAN_SignalObjectEvent_t cb_object_event )
202
237
{
203
-
204
- if (can_driver_initialized != 0U ) return ARM_DRIVER_OK ;
238
+ if (can_driver_initialized [CANIdx ] != 0U ) return ARM_DRIVER_OK ;
205
239
206
240
CAN_SignalUnitEvent [CANIdx ] = cb_unit_event ;
207
241
CAN_SignalObjectEvent [CANIdx ] = cb_object_event ;
208
242
209
- can_driver_initialized = 1U ;
243
+ can_driver_initialized [ CANIdx ] = 1U ;
210
244
211
245
return ARM_DRIVER_OK ;
212
246
}
213
247
214
- static int32_t ARM_CAN_Uninitialize (void ) {
215
- can_driver_initialized = 0U ;
248
+ static int32_t
249
+ ARM_CAN0_Uninitialize (void )
250
+ {
251
+ return ARM_CAN_Uninitialize (CAN0 );
252
+ }
253
+ static int32_t
254
+ ARM_CAN1_Uninitialize (void )
255
+ {
256
+ return ARM_CAN_Uninitialize (CAN1 );
257
+ }
258
+ static int32_t
259
+ ARM_CAN_Uninitialize (volatile CanHandle_t * CAN )
260
+ {
261
+ uint8_t CANIdx = Can_GetControllerIdx (CAN );
262
+ can_driver_initialized [CANIdx ] = 0U ;
216
263
217
264
return ARM_DRIVER_OK ;
218
265
}
@@ -222,6 +269,11 @@ ARM_CAN0_PowerControl (ARM_POWER_STATE state)
222
269
{
223
270
return ARM_CAN_PowerControl (CAN0 , state );
224
271
}
272
+ static int32_t
273
+ ARM_CAN1_PowerControl (ARM_POWER_STATE state )
274
+ {
275
+ return ARM_CAN_PowerControl (CAN1 , state );
276
+ }
225
277
226
278
static int32_t
227
279
ARM_CAN_PowerControl (volatile CanHandle_t * CAN ,
@@ -231,21 +283,21 @@ ARM_CAN_PowerControl (volatile CanHandle_t* CAN,
231
283
232
284
switch (state ) {
233
285
case ARM_POWER_OFF :
234
- can_driver_powered = 0U ;
286
+ can_driver_powered [ CANIdx ] = 0U ;
235
287
// Add code to disable interrupts and put peripheral into reset mode,
236
288
// and if possible disable clock
237
289
// ..
238
- SRCAN |= 1 << SRCAN_CAN0 ; //reset
239
- Can_SetTimeout (& PRCAN , PRCAN_CAN0 , CAN_FLAG_SET , 0xFFFF );
240
- SRCAN &= ~(1 << SRCAN_CAN0 );
290
+ SRCAN |= 1 << CANIdx ; //reset
291
+ Can_SetTimeout (& PRCAN , CANIdx , CAN_FLAG_SET , 0xFFFF );
292
+ SRCAN &= ~(1 << CANIdx );
241
293
242
- RCGCCAN &= ~(1 << RCGCCAN_CAN0 ); //disable clock
243
- Can_SetTimeout (& PRCAN , PRCAN_CAN0 , CAN_FLAG_CLEAR , 0xFFFF );
294
+ RCGCCAN &= ~(1 << CANIdx ); //disable clock
295
+ Can_SetTimeout (& PRCAN , CANIdx , CAN_FLAG_CLEAR , 0xFFFF );
244
296
break ;
245
297
246
298
case ARM_POWER_FULL :
247
- if (can_driver_initialized == 0U ) { return ARM_DRIVER_ERROR ; }
248
- if (can_driver_powered != 0U ) { return ARM_DRIVER_OK ; }
299
+ if (can_driver_initialized [ CANIdx ] == 0U ) { return ARM_DRIVER_ERROR ; }
300
+ if (can_driver_powered [ CANIdx ] != 0U ) { return ARM_DRIVER_OK ; }
249
301
250
302
uint8_t i ;
251
303
// Add code to enable clocks, reset variables enable interrupts
@@ -259,8 +311,8 @@ ARM_CAN_PowerControl (volatile CanHandle_t* CAN,
259
311
//enable interrupt in NVIC
260
312
NVICEN1 |= 1 << (NVICEN1_CAN0 + CANIdx );
261
313
262
- can_driver_powered = 1U ;
263
- can_driver_initialized = 0U ;
314
+ can_driver_powered [ CANIdx ] = 1U ;
315
+ can_driver_initialized [ CANIdx ] = 0U ;
264
316
for (i = 0 ; i < MAX_OBJ_NUM ; i ++ )
265
317
{
266
318
gFilters [CANIdx ][i ].Valid = INVALID_FILTER ;
@@ -281,19 +333,36 @@ static uint32_t ARM_CAN_GetClock (void) {
281
333
return 0 ;
282
334
}
283
335
284
- static int32_t ARM_CAN_SetBitrate (ARM_CAN_BITRATE_SELECT select , uint32_t bitrate , uint32_t bit_segments ) {
285
-
286
- if (can_driver_powered == 0U ) { return ARM_DRIVER_ERROR ; }
336
+ static int32_t
337
+ ARM_CAN0_SetBitrate (ARM_CAN_BITRATE_SELECT select ,
338
+ uint32_t bitrate ,
339
+ uint32_t bit_segments )
340
+ {
341
+ return ARM_CAN_SetBitrate (CAN0 , select , bitrate , bit_segments );
342
+ }
343
+ static int32_t
344
+ ARM_CAN1_SetBitrate (ARM_CAN_BITRATE_SELECT select ,
345
+ uint32_t bitrate ,
346
+ uint32_t bit_segments )
347
+ {
348
+ return ARM_CAN_SetBitrate (CAN1 , select , bitrate , bit_segments );
349
+ }
287
350
288
- // Add code to setup peripheral parameters to generate specified bitrate
289
- // with specified bit segments
290
- // ..
351
+ static int32_t
352
+ ARM_CAN_SetBitrate (volatile CanHandle_t * CAN ,
353
+ ARM_CAN_BITRATE_SELECT select ,
354
+ uint32_t bitrate ,
355
+ uint32_t bit_segments )
356
+ {
291
357
uint32_t BRP ;
292
358
uint32_t Phase1 ;
293
359
uint32_t Phase2 ;
294
360
uint32_t Prop ;
295
361
uint32_t SJW ;
296
362
uint32_t N ;
363
+ uint8_t CANIdx = Can_GetControllerIdx (CAN );
364
+
365
+ if (can_driver_powered [CANIdx ] == 0U ) { return ARM_DRIVER_ERROR ; }
297
366
298
367
if (bitrate == 0 || bitrate > (2000000UL ))
299
368
{
@@ -348,10 +417,16 @@ ARM_CAN0_SetMode(ARM_CAN_MODE mode)
348
417
{
349
418
return ARM_CAN_SetMode (CAN0 , mode );
350
419
}
420
+ static int32_t
421
+ ARM_CAN1_SetMode (ARM_CAN_MODE mode )
422
+ {
423
+ return ARM_CAN_SetMode (CAN1 , mode );
424
+ }
351
425
352
426
static int32_t ARM_CAN_SetMode (volatile CanHandle_t * CAN , ARM_CAN_MODE mode ) {
427
+ uint8_t CANIdx = Can_GetControllerIdx (CAN );
353
428
354
- if (can_driver_powered == 0U ) { return ARM_DRIVER_ERROR ; }
429
+ if (can_driver_powered [ CANIdx ] == 0U ) { return ARM_DRIVER_ERROR ; }
355
430
356
431
switch (mode ) {
357
432
case ARM_CAN_MODE_INITIALIZATION :
@@ -403,6 +478,14 @@ ARM_CAN0_ObjectSetFilter(uint32_t ObjIdx,
403
478
{
404
479
return ARM_CAN_ObjectSetFilter (CAN0 , ObjIdx , operation , id , arg );
405
480
}
481
+ static int32_t
482
+ ARM_CAN1_ObjectSetFilter (uint32_t ObjIdx ,
483
+ ARM_CAN_FILTER_OPERATION operation ,
484
+ uint32_t id ,
485
+ uint32_t arg )
486
+ {
487
+ return ARM_CAN_ObjectSetFilter (CAN1 , ObjIdx , operation , id , arg );
488
+ }
406
489
407
490
static int32_t
408
491
ARM_CAN_ObjectSetFilter (volatile CanHandle_t * CAN ,
@@ -411,7 +494,8 @@ ARM_CAN_ObjectSetFilter(volatile CanHandle_t* CAN,
411
494
uint32_t id ,
412
495
uint32_t arg )
413
496
{
414
- if (can_driver_powered == 0U ) { return ARM_DRIVER_ERROR ; }
497
+ uint8_t CANIdx = Can_GetControllerIdx (CAN );
498
+ if (can_driver_powered [CANIdx ] == 0U ) { return ARM_DRIVER_ERROR ; }
415
499
416
500
switch (operation ) {
417
501
case ARM_CAN_FILTER_ID_EXACT_ADD :
@@ -434,13 +518,20 @@ ARM_CAN0_ObjectConfigure (uint32_t ObjIdx,
434
518
return ARM_CAN_ObjectConfigure (CAN0 , ObjIdx , ObjCfg );
435
519
}
436
520
static int32_t
521
+ ARM_CAN1_ObjectConfigure (uint32_t ObjIdx ,
522
+ ARM_CAN_OBJ_CONFIG ObjCfg )
523
+ {
524
+ return ARM_CAN_ObjectConfigure (CAN1 , ObjIdx , ObjCfg );
525
+ }
526
+ static int32_t
437
527
ARM_CAN_ObjectConfigure (volatile CanHandle_t * CAN ,
438
528
uint32_t ObjIdx ,
439
529
ARM_CAN_OBJ_CONFIG ObjCfg )
440
530
{
441
531
int32_t state ;
442
- uint8_t CANIdx ;
443
- if (can_driver_powered == 0U ) { return ARM_DRIVER_ERROR ; }
532
+ uint8_t CANIdx = Can_GetControllerIdx (CAN );
533
+
534
+ if (can_driver_powered [CANIdx ] == 0U ) { return ARM_DRIVER_ERROR ; }
444
535
445
536
//stop the message by marking it as invalid
446
537
state = Can_WriteReadMsgObj (CAN , MSG_OBJ_R , ObjIdx ,
@@ -502,6 +593,14 @@ ARM_CAN0_MessageSend(uint32_t ObjIdx,
502
593
{
503
594
return ARM_CAN_MessageSend (CAN0 , ObjIdx , MsgInfo , Data , Size );
504
595
}
596
+ static int32_t
597
+ ARM_CAN1_MessageSend (uint32_t ObjIdx ,
598
+ ARM_CAN_MSG_INFO * MsgInfo ,
599
+ const uint8_t * Data ,
600
+ uint8_t Size )
601
+ {
602
+ return ARM_CAN_MessageSend (CAN1 , ObjIdx , MsgInfo , Data , Size );
603
+ }
505
604
506
605
static int32_t
507
606
ARM_CAN_MessageSend (volatile CanHandle_t * CAN ,
@@ -513,7 +612,7 @@ ARM_CAN_MessageSend(volatile CanHandle_t* CAN,
513
612
int32_t state ;
514
613
uint8_t CANIdx = Can_GetControllerIdx (CAN );
515
614
516
- if (can_driver_powered == 0U ) { return ARM_DRIVER_ERROR ; }
615
+ if (can_driver_powered [ CANIdx ] == 0U ) { return ARM_DRIVER_ERROR ; }
517
616
518
617
if (
519
618
(gObjCfgs [CANIdx ][ObjIdx ] != ARM_CAN_OBJ_TX_RTR_RX_DATA &&
@@ -598,6 +697,14 @@ ARM_CAN0_MessageRead(uint32_t ObjIdx,
598
697
{
599
698
return ARM_CAN_MessageRead (CAN0 , ObjIdx , MsgInfo , Data , Size );
600
699
}
700
+ static int32_t
701
+ ARM_CAN1_MessageRead (uint32_t ObjIdx ,
702
+ ARM_CAN_MSG_INFO * MsgInfo ,
703
+ uint8_t * Data ,
704
+ uint8_t Size )
705
+ {
706
+ return ARM_CAN_MessageRead (CAN1 , ObjIdx , MsgInfo , Data , Size );
707
+ }
601
708
602
709
static int32_t
603
710
ARM_CAN_MessageRead (volatile CanHandle_t * CAN ,
@@ -610,7 +717,7 @@ ARM_CAN_MessageRead(volatile CanHandle_t* CAN,
610
717
uint8_t dlc ;
611
718
uint8_t CANIdx = Can_GetControllerIdx (CAN );
612
719
613
- if (can_driver_powered == 0U ) return ARM_DRIVER_ERROR ;
720
+ if (can_driver_powered [ CANIdx ] == 0U ) return ARM_DRIVER_ERROR ;
614
721
615
722
if (
616
723
(gObjCfgs [CANIdx ][ObjIdx ] != ARM_CAN_OBJ_TX_RTR_RX_DATA &&
@@ -647,13 +754,20 @@ ARM_CAN_MessageRead(volatile CanHandle_t* CAN,
647
754
static int32_t
648
755
ARM_CAN0_Control (uint32_t control , uint32_t arg )
649
756
{
650
- ARM_CAN_Control (CAN0 , control , arg );
757
+ return ARM_CAN_Control (CAN0 , control , arg );
758
+ }
759
+ static int32_t
760
+ ARM_CAN1_Control (uint32_t control , uint32_t arg )
761
+ {
762
+ return ARM_CAN_Control (CAN1 , control , arg );
651
763
}
652
764
static int32_t
653
765
ARM_CAN_Control (volatile CanHandle_t * CAN , uint32_t control , uint32_t arg )
654
766
{
655
767
int32_t state ;
656
- if (can_driver_powered == 0U ) { return ARM_DRIVER_ERROR ; }
768
+ uint8_t CANIdx = Can_GetControllerIdx (CAN );
769
+
770
+ if (can_driver_powered [CANIdx ] == 0U ) { return ARM_DRIVER_ERROR ; }
657
771
658
772
switch (control & ARM_CAN_CONTROL_Msk ) {
659
773
case ARM_CAN_ABORT_MESSAGE_SEND :
@@ -686,6 +800,11 @@ ARM_CAN0_GetStatus (void)
686
800
{
687
801
return ARM_CAN_GetStatus (CAN0 );
688
802
}
803
+ static ARM_CAN_STATUS
804
+ ARM_CAN1_GetStatus (void )
805
+ {
806
+ return ARM_CAN_GetStatus (CAN1 );
807
+ }
689
808
690
809
static ARM_CAN_STATUS
691
810
ARM_CAN_GetStatus (volatile CanHandle_t * CAN )
@@ -1074,7 +1193,7 @@ CAN_Handler(volatile CanHandle_t* CAN)
1074
1193
uint32_t UnitSource ;
1075
1194
uint32_t ObjIdx ;
1076
1195
uint8_t CANIdx = Can_GetControllerIdx (CAN );
1077
- if (can_driver_powered == 0U ) return ;
1196
+ if (can_driver_powered [ CANIdx ] == 0U ) return ;
1078
1197
if (CAN_SignalObjectEvent [CANIdx ] == NULL || CAN_SignalUnitEvent [CANIdx ] == NULL ) return ;
1079
1198
1080
1199
IntSource = CAN -> CTL .INT ;
@@ -1139,10 +1258,10 @@ ARM_DRIVER_CAN Driver_CAN0 = {
1139
1258
ARM_CAN_GetVersion ,
1140
1259
ARM_CAN_GetCapabilities ,
1141
1260
ARM_CAN0_Initialize ,
1142
- ARM_CAN_Uninitialize ,
1261
+ ARM_CAN0_Uninitialize ,
1143
1262
ARM_CAN0_PowerControl ,
1144
1263
ARM_CAN_GetClock ,
1145
- ARM_CAN_SetBitrate ,
1264
+ ARM_CAN0_SetBitrate ,
1146
1265
ARM_CAN0_SetMode ,
1147
1266
ARM_CAN_ObjectGetCapabilities ,
1148
1267
ARM_CAN0_ObjectSetFilter ,
@@ -1153,3 +1272,23 @@ ARM_DRIVER_CAN Driver_CAN0 = {
1153
1272
ARM_CAN0_GetStatus
1154
1273
};
1155
1274
1275
+ extern \
1276
+ ARM_DRIVER_CAN Driver_CAN1 ;
1277
+ ARM_DRIVER_CAN Driver_CAN1 = {
1278
+ ARM_CAN_GetVersion ,
1279
+ ARM_CAN_GetCapabilities ,
1280
+ ARM_CAN1_Initialize ,
1281
+ ARM_CAN1_Uninitialize ,
1282
+ ARM_CAN1_PowerControl ,
1283
+ ARM_CAN_GetClock ,
1284
+ ARM_CAN1_SetBitrate ,
1285
+ ARM_CAN1_SetMode ,
1286
+ ARM_CAN_ObjectGetCapabilities ,
1287
+ ARM_CAN1_ObjectSetFilter ,
1288
+ ARM_CAN1_ObjectConfigure ,
1289
+ ARM_CAN1_MessageSend ,
1290
+ ARM_CAN1_MessageRead ,
1291
+ ARM_CAN1_Control ,
1292
+ ARM_CAN1_GetStatus
1293
+ };
1294
+
0 commit comments