Hilscher netX microcontroller driver  V0.0.5.0
Documentation of the netX driver package
netx_drv_canctrl.c
Go to the documentation of this file.
1 /**************************************************************************/
32 #include "netx_drv_user_conf.h"
33 #ifdef DRV_CANCTRL_MODULE_ENABLED
34 
45 /*****************************************************************************/
46 /* Includes */
47 /*****************************************************************************/
48 #ifdef DRV_DEVICE_NETX_90_MPW
49 #error "The MPW chip is no longer supported!"
50 #else
51 #ifdef DRV_DEVICE_NETX_90
52 #include "regdef/netx90_app/regdef_netx90_arm_app.h"
53 #else
54 #error "No chip Selected!"
55 #endif
56 #endif
57 #include "netx_drv_canctrl.h"
58 
59 #define HW_PTR_CANCTRL(var) static NX90_CANCTRL_AREA_T* const var[] = \
60  {\
61  (NX90_CANCTRL_AREA_T*) Addr_NX90_can_ctrl0_app,\
62  (NX90_CANCTRL_AREA_T*) Addr_NX90_can_ctrl1_app\
63  };
64 
65 #ifndef _HW_CONCAT
66 #define _HW_CONCAT(a,b) a ## b
67 #define HW_MSK(bf) _HW_CONCAT(MSK_NX90_, bf)
68 #define HW_SRT(bf) _HW_CONCAT(SRT_NX90_, bf)
69 #define HW_DFLT_BF_VAL(bf) _HW_CONCAT(DFLT_BF_VAL_NX90_, bf)
70 #define HW_DFLT_VAL(reg) _HW_CONCAT(DFLT_VAL_NX90_, reg)
71 #define HW_REGADR(reg) _HW_CONCAT(Adr_NX90_, reg)
72 #define HW_AREAADR(area) _HW_CONCAT(Addr_NX90_, area)
73 #define HW_TYPE(area) _HW_CONCAT(NX90_, area)
74 #endif
75 
76 #define HAL_CANCTRL_CNT 2
77 
78 #ifndef HALDEF
79 #define HALDEF(name) HALDEC(name)
80 #endif
81 
82 /*****************************************************************************/
83 /* Variables */
84 /*****************************************************************************/
85 HW_PTR_CANCTRL(s_aptCanCtrl)
86 
87 /*****************************************************************************/
88 /* Functions */
89 /*****************************************************************************/
90 
91 /*****************************************************************************/
102 /*****************************************************************************/
104 {
105  if( uiInst >= HAL_CANCTRL_CNT )
107 
108  s_aptCanCtrl[uiInst]->ulCanctrl_mode |= HW_MSK(canctrl_mode_reset_mode);
109  s_aptCanCtrl[uiInst]->ulCanctrl_mode_control = HW_MSK(canctrl_mode_control_mode);
110 
112 }
113 
114 /*****************************************************************************/
125 /*****************************************************************************/
127 {
128  if( uiInst >= HAL_CANCTRL_CNT )
130 
131  s_aptCanCtrl[uiInst]->ulCanctrl_mode_control = HW_MSK(canctrl_mode_control_mode);
132  s_aptCanCtrl[uiInst]->ulCanctrl_mode &= ~HW_MSK(canctrl_mode_reset_mode);
133 
135 }
136 
137 /*****************************************************************************/
151 /*****************************************************************************/
152 DRV_CANCTRL_RESULT HALDEF(CanCtrl_SetBaudrate)( unsigned int uiInst, uint32_t ulBaudrate, unsigned int uOversampling )
153 {
154  uint32_t ulPrescaler = 0;
155  uint32_t ulTseg1 = 0;
156  uint32_t ulTseg2 = 0;
157 
158  if( uiInst >= HAL_CANCTRL_CNT )
160 
161  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
163 
164  switch(ulBaudrate)
165  {
166  case DRV_CANCTRL_BAUDRATE_1000K: ulPrescaler = 10; ulTseg1 = 7; break;
167  case DRV_CANCTRL_BAUDRATE_800K: ulPrescaler = 25; ulTseg1 = 2; break;
168  case DRV_CANCTRL_BAUDRATE_500K: ulPrescaler = 20; ulTseg1 = 7; break;
169  case DRV_CANCTRL_BAUDRATE_250K: ulPrescaler = 40; ulTseg1 = 7; break;
170  case DRV_CANCTRL_BAUDRATE_125K: ulPrescaler = 80; ulTseg1 = 7; break;
171  case DRV_CANCTRL_BAUDRATE_50K: ulPrescaler = 200; ulTseg1 = 7; break;
172  case DRV_CANCTRL_BAUDRATE_20K: ulPrescaler = 500; ulTseg1 = 7; break;
173  case DRV_CANCTRL_BAUDRATE_10K: ulPrescaler = 500; ulTseg1 = 16; ulTseg2 = 1; break;
174  default: return DRV_CANCTRL_RESULT_INVAL_PARAM;
175  }
176 
177  s_aptCanCtrl[uiInst]->aulCanctrl_bus_timing[0] = ulPrescaler << HW_SRT(canctrl_bus_timing0_prescaler);
178  s_aptCanCtrl[uiInst]->aulCanctrl_bus_timing[1] = (ulTseg1 << HW_SRT(canctrl_bus_timing1_tseg1))
179  |(ulTseg2 << HW_SRT(canctrl_bus_timing1_tseg2))
180  |((uint32_t)uOversampling << HW_SRT(canctrl_bus_timing1_oversampling));
182 }
183 
184 /*****************************************************************************/
197 /*****************************************************************************/
199 {
200  if( uiInst >= HAL_CANCTRL_CNT )
202 
203  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
205 
206  s_aptCanCtrl[uiInst]->aulCanctrl_data[3] = ptFilter->ulAcceptanceCode & 0xff;
207  s_aptCanCtrl[uiInst]->aulCanctrl_data[2] = (ptFilter->ulAcceptanceCode >> 8) & 0xff;
208  s_aptCanCtrl[uiInst]->aulCanctrl_data[1] = (ptFilter->ulAcceptanceCode >> 16) & 0xff;
209  s_aptCanCtrl[uiInst]->aulCanctrl_data[0] = (ptFilter->ulAcceptanceCode >> 24) & 0xff;
210 #if defined(__NETX51)
211  /* Note: In netX51/52 there is a failure when writing to Acceptance Mask 0 and 1.
212  The write content of Acceptance Mask 0 goes correctly into register Acceptance Mask 0 and additionally abnormal into register Acceptance Mask 1.
213  Acceptance Mask 1 is not writable individually.
214  Because of this bug the content of Acceptance Mask 0 and Acceptance Mask 1 must be the same and that leads to restricted filter possibilities.
215  Furthermore the locations of Acceptance Mask 2/3 changed to Registers Data 5 and Data 6.
216  */
217  s_aptCanCtrl[uiInst]->aulCanctrl_data[6] = ptFilter->ulAcceptanceMask & 0xff;
218  s_aptCanCtrl[uiInst]->aulCanctrl_data[5] = (ptFilter->ulAcceptanceMask >> 8) & 0xff;
219  /*s_aptCanCtrl[uiInst]->aulCanctrl_data[4] = (ptFilter->ulAcceptanceMask >> 16) & 0xff; */ /* disabled: bug!!! */
220  s_aptCanCtrl[uiInst]->aulCanctrl_data[4] = (ptFilter->ulAcceptanceMask >> 24) & 0xff;
221 #else
222  s_aptCanCtrl[uiInst]->aulCanctrl_data[7] = ptFilter->ulAcceptanceMask & 0xff;
223  s_aptCanCtrl[uiInst]->aulCanctrl_data[6] = (ptFilter->ulAcceptanceMask >> 8) & 0xff;
224  s_aptCanCtrl[uiInst]->aulCanctrl_data[5] = (ptFilter->ulAcceptanceMask >> 16) & 0xff;
225  s_aptCanCtrl[uiInst]->aulCanctrl_data[4] = (ptFilter->ulAcceptanceMask >> 24) & 0xff;
226 #endif
227  s_aptCanCtrl[uiInst]->ulCanctrl_mode |= HW_MSK(canctrl_mode_acceptance_mode);
228 
230 }
231 
232 /*****************************************************************************/
245 /*****************************************************************************/
247 {
248  if( uiInst >= HAL_CANCTRL_CNT )
250 
251  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)))
253 
254  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_acceptance_mode)))
256 
257  ptFilter->ulAcceptanceCode = (s_aptCanCtrl[uiInst]->aulCanctrl_data[3] << 0)
258  |(s_aptCanCtrl[uiInst]->aulCanctrl_data[2] << 8)
259  |(s_aptCanCtrl[uiInst]->aulCanctrl_data[1] << 16)
260  |(s_aptCanCtrl[uiInst]->aulCanctrl_data[0] << 24);
261 
262  ptFilter->ulAcceptanceMask = (s_aptCanCtrl[uiInst]->aulCanctrl_data[7] << 0)
263  |(s_aptCanCtrl[uiInst]->aulCanctrl_data[6] << 8)
264  |(s_aptCanCtrl[uiInst]->aulCanctrl_data[5] << 16)
265  |(s_aptCanCtrl[uiInst]->aulCanctrl_data[4] << 24);
266 
268 }
269 
270 /*****************************************************************************/
283 /*****************************************************************************/
285 {
286  if( uiInst >= HAL_CANCTRL_CNT )
288 
289  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
291 
292  s_aptCanCtrl[uiInst]->aulCanctrl_data[1] = (uint32_t)ptFilter->usAcceptanceCode0 & 0xff;
293  s_aptCanCtrl[uiInst]->aulCanctrl_data[0] = ((uint32_t)ptFilter->usAcceptanceCode0 >> 8) & 0xff;
294  s_aptCanCtrl[uiInst]->aulCanctrl_data[3] = (uint32_t)ptFilter->usAcceptanceCode1 & 0xff;
295  s_aptCanCtrl[uiInst]->aulCanctrl_data[2] = ((uint32_t)ptFilter->usAcceptanceCode1 >> 8) & 0xff;
296 #if defined(__NETX51)
297  /* Note: In netX51/52 there is a failure when writing to Acceptance Mask 0 and 1.
298  The write content of Acceptance Mask 0 goes correctly into register Acceptance Mask 0 and additionally abnormal into register Acceptance Mask 1.
299  Acceptance Mask 1 is not writable individually.
300  Because of this bug the content of Acceptance Mask 0 and Acceptance Mask 1 must be the same and that leads to restricted filter possibilities.
301  Furthermore the locations of Acceptance Mask 2/3 changed to Registers Data 5 and Data 6.
302  */
303  s_aptCanCtrl[uiInst]->aulCanctrl_data[4] = (uint32_t)ptFilter->usAcceptanceMask0 & 0xff;
304  /*s_aptCanCtrl[uiInst]->aulCanctrl_data[4] = ((uint32_t)ptFilter->usAcceptanceMask0 >> 8) & 0xff; */ /* disabled: bug!!! */
305  s_aptCanCtrl[uiInst]->aulCanctrl_data[6] = (uint32_t)ptFilter->usAcceptanceMask1 & 0xff;
306  s_aptCanCtrl[uiInst]->aulCanctrl_data[5] = ((uint32_t)ptFilter->usAcceptanceMask1 >> 8) & 0xff;
307 #else
308  s_aptCanCtrl[uiInst]->aulCanctrl_data[5] = (uint32_t)ptFilter->usAcceptanceMask0 & 0xff;
309  s_aptCanCtrl[uiInst]->aulCanctrl_data[4] = ((uint32_t)ptFilter->usAcceptanceMask0 >> 8) & 0xff;
310  s_aptCanCtrl[uiInst]->aulCanctrl_data[7] = (uint32_t)ptFilter->usAcceptanceMask1 & 0xff;
311  s_aptCanCtrl[uiInst]->aulCanctrl_data[6] = ((uint32_t)ptFilter->usAcceptanceMask1 >> 8) & 0xff;
312 #endif
313  s_aptCanCtrl[uiInst]->ulCanctrl_mode &= ~HW_MSK(canctrl_mode_acceptance_mode);
314 
316 }
317 
318 /*****************************************************************************/
331 /*****************************************************************************/
333 {
334  if( uiInst >= HAL_CANCTRL_CNT )
336 
337  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
339 
340  if( 0 != (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_acceptance_mode)) )
342 
343  ptFilter->usAcceptanceCode0 = (uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[1] << 0)
344  |(uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[0] << 8);
345 
346  ptFilter->usAcceptanceCode1 = (uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[3] << 0)
347  |(uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[2] << 8);
348 
349  ptFilter->usAcceptanceMask0 = (uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[5] << 0)
350  |(uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[4] << 8);
351 
352  ptFilter->usAcceptanceMask1 = (uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[7] << 0)
353  |(uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[6] << 8);
354 
356 }
357 
358 /*****************************************************************************/
370 /*****************************************************************************/
372 {
373  if( uiInst >= HAL_CANCTRL_CNT )
375 
376  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
378 
379  s_aptCanCtrl[uiInst]->ulCanctrl_mode |= HW_MSK(canctrl_mode_listen_mode);
380 
382 }
383 
384 /*****************************************************************************/
396 /*****************************************************************************/
398 {
399  if( uiInst >= HAL_CANCTRL_CNT )
401 
402  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
404 
405  s_aptCanCtrl[uiInst]->ulCanctrl_mode &= ~HW_MSK(canctrl_mode_listen_mode);
406 
408 }
409 
410 /*****************************************************************************/
422 /*****************************************************************************/
424 {
425  if( uiInst >= HAL_CANCTRL_CNT )
427 
428  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
430 
431  s_aptCanCtrl[uiInst]->ulCanctrl_mode |= HW_MSK(canctrl_mode_selftest);
432 
434 }
435 
436 
437 /*****************************************************************************/
449 /*****************************************************************************/
451 {
452  if( uiInst >= HAL_CANCTRL_CNT )
454 
455  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
457 
458  s_aptCanCtrl[uiInst]->ulCanctrl_mode &= ~HW_MSK(canctrl_mode_selftest);
459 
461 }
462 
463 /*****************************************************************************/
479 /*****************************************************************************/
480 DRV_CANCTRL_RESULT HALDEF(CanCtrl_SendMessage)( unsigned int uiInst, DRV_CANCTRL_MESSAGE_T* ptMessage, bool fSingleShot, bool fSelfRx )
481 {
482  uint32_t ulCmd;
483  unsigned int uLength, uIdx, uDataPtr;
484 
485  if( uiInst >= HAL_CANCTRL_CNT )
487 
488  if( 0 != (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
490 
491  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_status & HW_MSK(canctrl_status_tx_buf_status)) )
493 
494  /* build message */
495  s_aptCanCtrl[uiInst]->aulCanctrl_data[0] = ((uint32_t)ptMessage->uFrameFormat << 7)
496  |((uint32_t)ptMessage->uRtr << 6)
497  |(uint32_t)ptMessage->uDlc;
498 
499  if( 0 == ptMessage->uFrameFormat )
500  {
501  /* Standard ID */
502  s_aptCanCtrl[uiInst]->aulCanctrl_data[1] = (ptMessage->ulIdentifier >> 3) & 0xff;
503  s_aptCanCtrl[uiInst]->aulCanctrl_data[2] = (ptMessage->ulIdentifier << 5) & 0xff;
504  uDataPtr = 3;
505  }
506  else
507  {
508  /* Extended ID */
509  s_aptCanCtrl[uiInst]->aulCanctrl_data[1] = (ptMessage->ulIdentifier >> 21) & 0xff;
510  s_aptCanCtrl[uiInst]->aulCanctrl_data[2] = (ptMessage->ulIdentifier >> 13) & 0xff;
511  s_aptCanCtrl[uiInst]->aulCanctrl_data[3] = (ptMessage->ulIdentifier >> 5) & 0xff;
512  s_aptCanCtrl[uiInst]->aulCanctrl_data[4] = (ptMessage->ulIdentifier << 3) & 0xff;
513  uDataPtr = 5;
514  }
515 
516  if( 0 == ptMessage->uRtr )
517  {
518  /* Data frame */
519  uLength = ptMessage->uDlc;
520  if( uLength > 8 ) uLength = 8;
521 
522  /* put transmit data to CAN controller */
523  for( uIdx = 0; uIdx < uLength; ++uIdx ) {
524  s_aptCanCtrl[uiInst]->aulCanctrl_data[uDataPtr + uIdx] = ptMessage->abData[uIdx];
525  }
526  }
527 
528  /* send message */
529  if( !fSelfRx )
530  {
531  ulCmd = HW_MSK(canctrl_command_tx_request);
532 
533  /* Setting the command bits tx_request and abort_tx simultaneously results in sending the transmit message once */
534  if( fSingleShot ) {
535  ulCmd |= HW_MSK(canctrl_command_abort_tx);
536  }
537  }
538  else {
539  ulCmd = HW_MSK(canctrl_command_self_rx_request);
540  }
541 
542  s_aptCanCtrl[uiInst]->ulCanctrl_command = ulCmd;
543 
545 }
546 
547 /*****************************************************************************/
559 /*****************************************************************************/
561 {
562  if( uiInst >= HAL_CANCTRL_CNT )
564 
565  if( 0 != (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
567 
568  s_aptCanCtrl[uiInst]->ulCanctrl_command = HW_MSK(canctrl_command_abort_tx);
569 
571 }
572 
573 /*****************************************************************************/
588 /*****************************************************************************/
590 {
591  unsigned int uDataPtr, uLength, uIdx;
592 
593  if( uiInst >= HAL_CANCTRL_CNT )
595 
596  /* check that we are operational */
597  if( 0 != (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
599 
600  /* check that message available */
601  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_status & HW_MSK(canctrl_status_rx_buf_status)) )
603 
604  /* check for overrun */
605  if( 0 != (s_aptCanCtrl[uiInst]->ulCanctrl_status & HW_MSK(canctrl_status_overrun)) ) {
606  /* clear overrun condition */
607  s_aptCanCtrl[uiInst]->ulCanctrl_command = HW_MSK(canctrl_command_clr_overrun)
608  |HW_MSK(canctrl_command_release_rx_buf);
610  }
611 
612  /* get message type */
613  ptMessage->uFrameFormat = (s_aptCanCtrl[uiInst]->aulCanctrl_data[0] >> 7) & 0x1;
614 
615  /* get RTR bit */
616  ptMessage->uRtr = (s_aptCanCtrl[uiInst]->aulCanctrl_data[0] >> 6) & 0x1;
617  if( 0 == ptMessage->uFrameFormat ) {
618  /* Standard ID */
619  ptMessage->ulIdentifier = ( (s_aptCanCtrl[uiInst]->aulCanctrl_data[1] << 24)
620  | ((s_aptCanCtrl[uiInst]->aulCanctrl_data[2] & 0xef) << 16)
621  ) >> 21;
622  uDataPtr = 3;
623  }
624  else {
625  /* Extended ID */
626  ptMessage->ulIdentifier = ( (s_aptCanCtrl[uiInst]->aulCanctrl_data[1] << 24)
627  |(s_aptCanCtrl[uiInst]->aulCanctrl_data[2] << 16)
628  |(s_aptCanCtrl[uiInst]->aulCanctrl_data[3] << 8)
629  |(s_aptCanCtrl[uiInst]->aulCanctrl_data[4] << 0)
630  ) >> 3;
631  uDataPtr = 5;
632  }
633 
634  /* get DLC */
635  ptMessage->uDlc = (unsigned int)(s_aptCanCtrl[uiInst]->aulCanctrl_data[0] & 0xf);
636 
637  if( 0 == ptMessage->uRtr )
638  {
639  /* Data frame */
640  uLength = ptMessage->uDlc;
641  if( uLength > 8 ) uLength = 8;
642 
643  /* get data bytes */
644  for( uIdx = 0; uIdx < uLength; ++uIdx )
645  ptMessage->abData[uIdx] = (uint8_t)s_aptCanCtrl[uiInst]->aulCanctrl_data[uDataPtr + uIdx];
646  }
647 
648  /* release buffer */
649  s_aptCanCtrl[uiInst]->ulCanctrl_command = HW_MSK(canctrl_command_release_rx_buf);
650 
652 }
653 
654 /*****************************************************************************/
664 /*****************************************************************************/
665 uint32_t HALDEF(CanCtrl_GetRxMessageCnt)( unsigned int uiInst )
666 {
667  if( uiInst >= HAL_CANCTRL_CNT )
668  return 0;
669 
670  return s_aptCanCtrl[uiInst]->ulCanctrl_rx_message_cnt;
671 }
672 
673 /*****************************************************************************/
683 /*****************************************************************************/
684 uint32_t HALDEF(CanCtrl_GetMode)( unsigned int uiInst )
685 {
686  if( uiInst >= HAL_CANCTRL_CNT )
687  return 0;
688 
689  return s_aptCanCtrl[uiInst]->ulCanctrl_mode;
690 }
691 
692 /*****************************************************************************/
702 /*****************************************************************************/
703 uint32_t HALDEF(CanCtrl_GetStatus)( unsigned int uiInst )
704 {
705  if( uiInst >= HAL_CANCTRL_CNT )
706  return 0;
707 
708  return s_aptCanCtrl[uiInst]->ulCanctrl_status;
709 }
710 
711 /*****************************************************************************/
722 /*****************************************************************************/
723 uint32_t HALDEF(CanCtrl_GetAndClearIrqStatus)( unsigned int uiInst )
724 {
725  if( uiInst >= HAL_CANCTRL_CNT )
726  return 0;
727 
728  return s_aptCanCtrl[uiInst]->ulCanctrl_irq;
729 }
730 
731 /*****************************************************************************/
743 /*****************************************************************************/
744 DRV_CANCTRL_RESULT HALDEF(CanCtrl_SetIrqMask)( unsigned int uiInst, uint32_t ulIrqMask )
745 {
746  if( uiInst >= HAL_CANCTRL_CNT )
748 
749  s_aptCanCtrl[uiInst]->ulCanctrl_irq_en = ulIrqMask;
750 
752 }
753 
754 /*****************************************************************************/
764 /*****************************************************************************/
765 uint32_t HALDEF(CanCtrl_GetIrqMask)( unsigned int uiInst )
766 {
767  if( uiInst >= HAL_CANCTRL_CNT )
768  return 0;
769 
770  return s_aptCanCtrl[uiInst]->ulCanctrl_irq_en;
771 }
772 
773 /*****************************************************************************/
784 /*****************************************************************************/
785 uint32_t HALDEF(CanCtrl_GetAndClearArblostStatus)( unsigned int uiInst )
786 {
787  if( uiInst >= HAL_CANCTRL_CNT )
788  return 0;
789 
790  return s_aptCanCtrl[uiInst]->ulCanctrl_arb_lost_capture;
791 }
792 
793 /*****************************************************************************/
803 /*****************************************************************************/
804 uint32_t HALDEF(CanCtrl_GetAndClearErrorCode)( unsigned int uiInst )
805 {
806  if( uiInst >= HAL_CANCTRL_CNT )
807  return 0;
808 
809  return s_aptCanCtrl[uiInst]->ulCanctrl_err_code_capture;
810 }
811 
812 /*****************************************************************************/
825 /*****************************************************************************/
826 DRV_CANCTRL_RESULT HALDEF(CanCtrl_SetWarningLimit)( unsigned int uiInst, uint32_t ulLimit )
827 {
828  if( uiInst >= HAL_CANCTRL_CNT )
830 
831  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
833 
834  s_aptCanCtrl[uiInst]->ulCanctrl_err_warning_limit = ulLimit;
835 
837 }
838 
839 /*****************************************************************************/
849 /*****************************************************************************/
850 uint32_t HALDEF(CanCtrl_GetWarningLimit)( unsigned int uiInst )
851 {
852  if( uiInst >= HAL_CANCTRL_CNT )
853  return 0;
854 
855  return s_aptCanCtrl[uiInst]->ulCanctrl_err_warning_limit;
856 }
857 
858 /*****************************************************************************/
871 /*****************************************************************************/
872 DRV_CANCTRL_RESULT HALDEF(CanCtrl_SetRxErrorCnt)( unsigned int uiInst, uint32_t ulCnt )
873 {
874  if( uiInst >= HAL_CANCTRL_CNT )
876 
877  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
879 
880  s_aptCanCtrl[uiInst]->ulCanctrl_rx_error_cnt = ulCnt;
881 
883 }
884 
885 /*****************************************************************************/
895 /*****************************************************************************/
896 uint32_t HALDEF(CanCtrl_GetRxErrorCnt)( unsigned int uiInst )
897 {
898  if( uiInst >= HAL_CANCTRL_CNT )
899  return 0;
900 
901  return s_aptCanCtrl[uiInst]->ulCanctrl_rx_error_cnt;
902 }
903 
904 /*****************************************************************************/
917 /*****************************************************************************/
918 DRV_CANCTRL_RESULT HALDEF(CanCtrl_SetTxErrorCnt)( unsigned int uiInst, uint32_t ulCnt )
919 {
920  if( uiInst >= HAL_CANCTRL_CNT )
922 
923  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
925 
926  s_aptCanCtrl[uiInst]->ulCanctrl_tx_error_cnt = ulCnt;
927 
929 }
930 
931 /*****************************************************************************/
941 /*****************************************************************************/
942 uint32_t HALDEF(CanCtrl_GetTxErrorCnt)( unsigned int uiInst )
943 {
944  if( uiInst >= HAL_CANCTRL_CNT )
945  return 0;
946 
947  return s_aptCanCtrl[uiInst]->ulCanctrl_tx_error_cnt;
948 }
949 
950 /*****************************************************************************/
964 /*****************************************************************************/
965 DRV_CANCTRL_RESULT HALDEF(CanCtrl_SetPrm)( unsigned int uiInst, DRV_CANCTRL_PRM_E ePrmID, uint32_t ulPrmVal )
966 {
967  if( uiInst >= HAL_CANCTRL_CNT )
969 
970  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
972 
973  switch( ePrmID )
974  {
975  case DRV_CANCTRL_PRM_IRQEN: s_aptCanCtrl[uiInst]->ulCanctrl_irq_en = ulPrmVal; break;
976  case DRV_CANCTRL_PRM_BT0: s_aptCanCtrl[uiInst]->aulCanctrl_bus_timing[0] = ulPrmVal; break;
977  case DRV_CANCTRL_PRM_BT1: s_aptCanCtrl[uiInst]->aulCanctrl_bus_timing[1] = ulPrmVal; break;
978  case DRV_CANCTRL_PRM_ERR_WARNING_LIMIT: s_aptCanCtrl[uiInst]->ulCanctrl_err_warning_limit = ulPrmVal; break;
979  case DRV_CANCTRL_PRM_RXERR_CNT: s_aptCanCtrl[uiInst]->ulCanctrl_rx_error_cnt = ulPrmVal; break;
980  case DRV_CANCTRL_PRM_TXERR_CNT: s_aptCanCtrl[uiInst]->ulCanctrl_tx_error_cnt = ulPrmVal; break;
981  case DRV_CANCTRL_PRM_ACCEPTANCE_CODE0: s_aptCanCtrl[uiInst]->aulCanctrl_data[0] = ulPrmVal; break;
982  case DRV_CANCTRL_PRM_ACCEPTANCE_CODE1: s_aptCanCtrl[uiInst]->aulCanctrl_data[1] = ulPrmVal; break;
983  case DRV_CANCTRL_PRM_ACCEPTANCE_CODE2: s_aptCanCtrl[uiInst]->aulCanctrl_data[2] = ulPrmVal; break;
984  case DRV_CANCTRL_PRM_ACCEPTANCE_CODE3: s_aptCanCtrl[uiInst]->aulCanctrl_data[3] = ulPrmVal; break;
985  case DRV_CANCTRL_PRM_ACCEPTANCE_MASK0: s_aptCanCtrl[uiInst]->aulCanctrl_data[4] = ulPrmVal; break;
986  case DRV_CANCTRL_PRM_ACCEPTANCE_MASK1: s_aptCanCtrl[uiInst]->aulCanctrl_data[5] = ulPrmVal; break;
987  case DRV_CANCTRL_PRM_ACCEPTANCE_MASK2: s_aptCanCtrl[uiInst]->aulCanctrl_data[6] = ulPrmVal; break;
988  case DRV_CANCTRL_PRM_ACCEPTANCE_MASK3: s_aptCanCtrl[uiInst]->aulCanctrl_data[7] = ulPrmVal; break;
989  /* Default */
990  default:
992  } /* end switch */
993 
995 }
996 
997 /*****************************************************************************/
1011 /*****************************************************************************/
1012 DRV_CANCTRL_RESULT HALDEF(CanCtrl_GetPrm)( unsigned int uiInst, DRV_CANCTRL_PRM_E ePrmID, uint32_t* pulPrmVal )
1013 {
1014  if( uiInst >= HAL_CANCTRL_CNT )
1016 
1017  if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode & HW_MSK(canctrl_mode_reset_mode)) )
1019 
1020  switch( ePrmID )
1021  {
1022  case DRV_CANCTRL_PRM_IRQEN: *pulPrmVal = s_aptCanCtrl[uiInst]->ulCanctrl_irq_en; break;
1023  case DRV_CANCTRL_PRM_BT0: *pulPrmVal = s_aptCanCtrl[uiInst]->aulCanctrl_bus_timing[0]; break;
1024  case DRV_CANCTRL_PRM_BT1: *pulPrmVal = s_aptCanCtrl[uiInst]->aulCanctrl_bus_timing[1]; break;
1025  case DRV_CANCTRL_PRM_ERR_WARNING_LIMIT: *pulPrmVal = s_aptCanCtrl[uiInst]->ulCanctrl_err_warning_limit; break;
1026  case DRV_CANCTRL_PRM_RXERR_CNT: *pulPrmVal = s_aptCanCtrl[uiInst]->ulCanctrl_rx_error_cnt; break;
1027  case DRV_CANCTRL_PRM_TXERR_CNT: *pulPrmVal = s_aptCanCtrl[uiInst]->ulCanctrl_tx_error_cnt; break;
1028  case DRV_CANCTRL_PRM_ACCEPTANCE_CODE0: *pulPrmVal = s_aptCanCtrl[uiInst]->aulCanctrl_data[0]; break;
1029  case DRV_CANCTRL_PRM_ACCEPTANCE_CODE1: *pulPrmVal = s_aptCanCtrl[uiInst]->aulCanctrl_data[1]; break;
1030  case DRV_CANCTRL_PRM_ACCEPTANCE_CODE2: *pulPrmVal = s_aptCanCtrl[uiInst]->aulCanctrl_data[2]; break;
1031  case DRV_CANCTRL_PRM_ACCEPTANCE_CODE3: *pulPrmVal = s_aptCanCtrl[uiInst]->aulCanctrl_data[3]; break;
1032  case DRV_CANCTRL_PRM_ACCEPTANCE_MASK0: *pulPrmVal = s_aptCanCtrl[uiInst]->aulCanctrl_data[4]; break;
1033  case DRV_CANCTRL_PRM_ACCEPTANCE_MASK1: *pulPrmVal = s_aptCanCtrl[uiInst]->aulCanctrl_data[5]; break;
1034  case DRV_CANCTRL_PRM_ACCEPTANCE_MASK2: *pulPrmVal = s_aptCanCtrl[uiInst]->aulCanctrl_data[6]; break;
1035  case DRV_CANCTRL_PRM_ACCEPTANCE_MASK3: *pulPrmVal = s_aptCanCtrl[uiInst]->aulCanctrl_data[7]; break;
1036 
1037  /* Default */
1038  default:
1040  } /* end switch */
1041 
1042  return DRV_CANCTRL_RESULT_OKAY;
1043 }
1044 /* End of group CANCTRL */
1046 
1047 
1048 #endif /* DRV_CANCTRL_MODULE_DISABLED */
#define DRV_CANCTRL_BAUDRATE_50K
DRV_CANCTRL_RESULT HALDEC() CanCtrl_SetBaudrate(unsigned int uiInst, uint32_t ulBaudrate, unsigned int uOversampling)
DRV_CANCTRL_RESULT
DRV_CANCTRL_RESULT HALDEC() CanCtrl_EnterSelftestMode(unsigned int uiInst)
#define DRV_CANCTRL_BAUDRATE_250K
DRV_CANCTRL_RESULT HALDEC() CanCtrl_LeaveResetMode(unsigned int uiInst)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_LeaveListenMode(unsigned int uiInst)
uint32_t HALDEC() CanCtrl_GetTxErrorCnt(unsigned int uiInst)
uint32_t HALDEC() CanCtrl_GetAndClearErrorCode(unsigned int uiInst)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_LeaveSelftestMode(unsigned int uiInst)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_AbortMessage(unsigned int uiInst)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_SetIrqMask(unsigned int uiInst, uint32_t ulIrqMask)
uint32_t HALDEC() CanCtrl_GetIrqMask(unsigned int uiInst)
#define HW_SRT(bf)
DRV_CANCTRL_PRM_E
DRV_CANCTRL_RESULT HALDEC() CanCtrl_GetSingleAcceptanceFilter(unsigned int uiInst, DRV_CANCTRL_SINGLEFILTER_T *ptFilter)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_SetTxErrorCnt(unsigned int uiInst, uint32_t ulCnt)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_SetSingleAcceptanceFilter(unsigned int uiInst, DRV_CANCTRL_SINGLEFILTER_T *ptFilter)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_EnterResetMode(unsigned int uiInst)
#define DRV_CANCTRL_BAUDRATE_500K
DRV_CANCTRL_RESULT HALDEC() CanCtrl_ReceiveMessage(unsigned int uiInst, DRV_CANCTRL_MESSAGE_T *ptMessage)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_EnterListenMode(unsigned int uiInst)
#define HAL_CANCTRL_CNT
#define DRV_CANCTRL_BAUDRATE_20K
uint32_t HALDEC() CanCtrl_GetStatus(unsigned int uiInst)
uint32_t HALDEC() CanCtrl_GetAndClearArblostStatus(unsigned int uiInst)
#define HW_PTR_CANCTRL(var)
uint32_t HALDEC() CanCtrl_GetRxMessageCnt(unsigned int uiInst)
#define DRV_CANCTRL_BAUDRATE_1000K
uint32_t HALDEC() CanCtrl_GetAndClearIrqStatus(unsigned int uiInst)
#define HW_MSK(bf)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_SetWarningLimit(unsigned int uiInst, uint32_t ulLimit)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_SetPrm(unsigned int uiInst, DRV_CANCTRL_PRM_E ePrmID, uint32_t ulPrmVal)
#define DRV_CANCTRL_BAUDRATE_800K
DRV_CANCTRL_RESULT HALDEC() CanCtrl_SendMessage(unsigned int uiInst, DRV_CANCTRL_MESSAGE_T *ptMessage, bool fSingleShot, bool fSelfRx)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_GetDualAcceptanceFilter(unsigned int uiInst, DRV_CANCTRL_DUALFILTER_T *ptFilter)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_SetRxErrorCnt(unsigned int uiInst, uint32_t ulCnt)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_SetDualAcceptanceFilter(unsigned int uiInst, DRV_CANCTRL_DUALFILTER_T *ptFilter)
uint32_t HALDEC() CanCtrl_GetMode(unsigned int uiInst)
#define DRV_CANCTRL_BAUDRATE_125K
#define DRV_CANCTRL_BAUDRATE_10K
uint32_t HALDEC() CanCtrl_GetRxErrorCnt(unsigned int uiInst)
Header file of CAN controller module.
uint32_t HALDEC() CanCtrl_GetWarningLimit(unsigned int uiInst)
#define HALDEF(name)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_GetPrm(unsigned int uiInst, DRV_CANCTRL_PRM_E ePrmID, uint32_t *pulPrmVal)