32 #include "netx_drv_user_conf.h" 33 #ifdef DRV_CANCTRL_MODULE_ENABLED 48 #ifdef DRV_DEVICE_NETX_90_MPW 49 #error "The MPW chip is no longer supported!" 51 #ifdef DRV_DEVICE_NETX_90 52 #include "regdef/netx90_app/regdef_netx90_arm_app.h" 54 #error "No chip Selected!" 59 #define HW_PTR_CANCTRL(var) static NX90_CANCTRL_AREA_T* const var[] = \ 61 (NX90_CANCTRL_AREA_T*) Addr_NX90_can_ctrl0_app,\ 62 (NX90_CANCTRL_AREA_T*) Addr_NX90_can_ctrl1_app\ 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) 76 #define HAL_CANCTRL_CNT 2 79 #define HALDEF(name) HALDEC(name) 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);
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);
154 uint32_t ulPrescaler = 0;
155 uint32_t ulTseg1 = 0;
156 uint32_t ulTseg2 = 0;
161 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
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));
203 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
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) 217 s_aptCanCtrl[uiInst]->aulCanctrl_data[6] = ptFilter->ulAcceptanceMask & 0xff;
218 s_aptCanCtrl[uiInst]->aulCanctrl_data[5] = (ptFilter->ulAcceptanceMask >> 8) & 0xff;
220 s_aptCanCtrl[uiInst]->aulCanctrl_data[4] = (ptFilter->ulAcceptanceMask >> 24) & 0xff;
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;
227 s_aptCanCtrl[uiInst]->ulCanctrl_mode |=
HW_MSK(canctrl_mode_acceptance_mode);
251 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)))
254 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_acceptance_mode)))
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);
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);
289 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
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) 303 s_aptCanCtrl[uiInst]->aulCanctrl_data[4] = (uint32_t)ptFilter->usAcceptanceMask0 & 0xff;
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;
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;
313 s_aptCanCtrl[uiInst]->ulCanctrl_mode &= ~
HW_MSK(canctrl_mode_acceptance_mode);
337 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
340 if( 0 != (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_acceptance_mode)) )
343 ptFilter->usAcceptanceCode0 = (uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[1] << 0)
344 |(uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[0] << 8);
346 ptFilter->usAcceptanceCode1 = (uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[3] << 0)
347 |(uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[2] << 8);
349 ptFilter->usAcceptanceMask0 = (uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[5] << 0)
350 |(uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[4] << 8);
352 ptFilter->usAcceptanceMask1 = (uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[7] << 0)
353 |(uint16_t)(s_aptCanCtrl[uiInst]->aulCanctrl_data[6] << 8);
376 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
379 s_aptCanCtrl[uiInst]->ulCanctrl_mode |=
HW_MSK(canctrl_mode_listen_mode);
402 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
405 s_aptCanCtrl[uiInst]->ulCanctrl_mode &= ~
HW_MSK(canctrl_mode_listen_mode);
428 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
431 s_aptCanCtrl[uiInst]->ulCanctrl_mode |=
HW_MSK(canctrl_mode_selftest);
455 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
458 s_aptCanCtrl[uiInst]->ulCanctrl_mode &= ~
HW_MSK(canctrl_mode_selftest);
483 unsigned int uLength, uIdx, uDataPtr;
488 if( 0 != (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
491 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_status &
HW_MSK(canctrl_status_tx_buf_status)) )
495 s_aptCanCtrl[uiInst]->aulCanctrl_data[0] = ((uint32_t)ptMessage->uFrameFormat << 7)
496 |((uint32_t)ptMessage->uRtr << 6)
497 |(uint32_t)ptMessage->uDlc;
499 if( 0 == ptMessage->uFrameFormat )
502 s_aptCanCtrl[uiInst]->aulCanctrl_data[1] = (ptMessage->ulIdentifier >> 3) & 0xff;
503 s_aptCanCtrl[uiInst]->aulCanctrl_data[2] = (ptMessage->ulIdentifier << 5) & 0xff;
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;
516 if( 0 == ptMessage->uRtr )
519 uLength = ptMessage->uDlc;
520 if( uLength > 8 ) uLength = 8;
523 for( uIdx = 0; uIdx < uLength; ++uIdx ) {
524 s_aptCanCtrl[uiInst]->aulCanctrl_data[uDataPtr + uIdx] = ptMessage->abData[uIdx];
531 ulCmd =
HW_MSK(canctrl_command_tx_request);
535 ulCmd |=
HW_MSK(canctrl_command_abort_tx);
539 ulCmd =
HW_MSK(canctrl_command_self_rx_request);
542 s_aptCanCtrl[uiInst]->ulCanctrl_command = ulCmd;
565 if( 0 != (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
568 s_aptCanCtrl[uiInst]->ulCanctrl_command =
HW_MSK(canctrl_command_abort_tx);
591 unsigned int uDataPtr, uLength, uIdx;
597 if( 0 != (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
601 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_status &
HW_MSK(canctrl_status_rx_buf_status)) )
605 if( 0 != (s_aptCanCtrl[uiInst]->ulCanctrl_status &
HW_MSK(canctrl_status_overrun)) ) {
607 s_aptCanCtrl[uiInst]->ulCanctrl_command =
HW_MSK(canctrl_command_clr_overrun)
608 |
HW_MSK(canctrl_command_release_rx_buf);
613 ptMessage->uFrameFormat = (s_aptCanCtrl[uiInst]->aulCanctrl_data[0] >> 7) & 0x1;
616 ptMessage->uRtr = (s_aptCanCtrl[uiInst]->aulCanctrl_data[0] >> 6) & 0x1;
617 if( 0 == ptMessage->uFrameFormat ) {
619 ptMessage->ulIdentifier = ( (s_aptCanCtrl[uiInst]->aulCanctrl_data[1] << 24)
620 | ((s_aptCanCtrl[uiInst]->aulCanctrl_data[2] & 0xef) << 16)
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)
635 ptMessage->uDlc = (
unsigned int)(s_aptCanCtrl[uiInst]->aulCanctrl_data[0] & 0xf);
637 if( 0 == ptMessage->uRtr )
640 uLength = ptMessage->uDlc;
641 if( uLength > 8 ) uLength = 8;
644 for( uIdx = 0; uIdx < uLength; ++uIdx )
645 ptMessage->abData[uIdx] = (uint8_t)s_aptCanCtrl[uiInst]->aulCanctrl_data[uDataPtr + uIdx];
649 s_aptCanCtrl[uiInst]->ulCanctrl_command =
HW_MSK(canctrl_command_release_rx_buf);
670 return s_aptCanCtrl[uiInst]->ulCanctrl_rx_message_cnt;
689 return s_aptCanCtrl[uiInst]->ulCanctrl_mode;
708 return s_aptCanCtrl[uiInst]->ulCanctrl_status;
728 return s_aptCanCtrl[uiInst]->ulCanctrl_irq;
749 s_aptCanCtrl[uiInst]->ulCanctrl_irq_en = ulIrqMask;
770 return s_aptCanCtrl[uiInst]->ulCanctrl_irq_en;
790 return s_aptCanCtrl[uiInst]->ulCanctrl_arb_lost_capture;
809 return s_aptCanCtrl[uiInst]->ulCanctrl_err_code_capture;
831 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
834 s_aptCanCtrl[uiInst]->ulCanctrl_err_warning_limit = ulLimit;
855 return s_aptCanCtrl[uiInst]->ulCanctrl_err_warning_limit;
877 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
880 s_aptCanCtrl[uiInst]->ulCanctrl_rx_error_cnt = ulCnt;
901 return s_aptCanCtrl[uiInst]->ulCanctrl_rx_error_cnt;
923 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
926 s_aptCanCtrl[uiInst]->ulCanctrl_tx_error_cnt = ulCnt;
947 return s_aptCanCtrl[uiInst]->ulCanctrl_tx_error_cnt;
970 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
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;
1017 if( 0 == (s_aptCanCtrl[uiInst]->ulCanctrl_mode &
HW_MSK(canctrl_mode_reset_mode)) )
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;
#define DRV_CANCTRL_BAUDRATE_50K
DRV_CANCTRL_RESULT HALDEC() CanCtrl_SetBaudrate(unsigned int uiInst, uint32_t ulBaudrate, unsigned int uOversampling)
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)
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 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)
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)
DRV_CANCTRL_RESULT HALDEC() CanCtrl_GetPrm(unsigned int uiInst, DRV_CANCTRL_PRM_E ePrmID, uint32_t *pulPrmVal)