19 #include "netx_drv_user_conf.h" 20 #ifdef DRV_BISS_MODULE_ENABLED 35 #ifdef DRV_DEVICE_NETX_90_MPW 36 #error "The MPW chip is no longer supported!" 38 #ifdef DRV_DEVICE_NETX_90 39 #include "regdef/netx90_app/regdef_netx90_arm_app.h" 41 #error "No chip Selected!" 50 #ifndef DRV_BISSM_INST 51 #define DRV_BISSM_INST 0 54 #define DRV_BISSM_CTRL_CHN_CNT 8 55 #define DRV_BISSM_CTRL_REG_CNT 64 57 #define DRV_BISSM_INSTR_CDM1 0x1UL 58 #define DRV_BISSM_INSTR_CDM0 0x2UL 59 #define DRV_BISSM_INSTR_REGCOM 0x4UL 60 #define DRV_BISSM_INSTR_REGCOM_REDUCE 0x7UL 62 #define DRV_BISSM_CC_SL_CFG_BISS_B 0x0 63 #define DRV_BISSM_CC_SL_CFG_BISS_C 0x1 64 #define DRV_BISSM_CC_SL_CFG_SSI 0x2 79 #define _HW_CONCAT(a,b) a ## b 80 #define HW_MSK(bf) _HW_CONCAT(MSK_NX90_, bf) 81 #define HW_SRT(bf) _HW_CONCAT(SRT_NX90_, bf) 82 #define HW_DFLT_BF_VAL(bf) _HW_CONCAT(DFLT_BF_VAL_NX90_, bf) 83 #define HW_DFLT_VAL(reg) _HW_CONCAT(DFLT_VAL_NX90_, reg) 84 #define HW_REGADR(reg) _HW_CONCAT(Adr_NX90_, reg) 85 #define HW_AREAADR(area) _HW_CONCAT(Addr_NX90_, area) 86 #define HW_TYPE(area) _HW_CONCAT(NX90_, area) 90 #define HW_WR32(var,val) (var) = (val) 94 #define HW_RD32(var) (var) 98 #define HW_WR16(var,val) (var) = (val) 102 #define HW_RD16(var) (var) 106 #define HW_WR8(var,val) (var) = (val) 110 #define HW_RD8(var) (var) 138 |
HW_MSK(biss_ccc1_mc0_REGVERS)
146 HW_WR32(((uint32_t*)pulSCD)[0], 0);
148 HW_WR32(((uint32_t*)pulSCD)[0], 0);
188 s_aptBissCtrl[
DRV_BISSM_INST]->ulBiss_ctrl_trigger_cfg = (uint32_t)eTriggerCfg;
190 ulVal &= ~(
HW_MSK(biss_mc1_FREQAGS));
191 ulVal |= 0x7F <<
HW_SRT(biss_mc1_FREQAGS);
217 ulVal &= ~(
HW_MSK(biss_mc1_FREQAGS));
218 ulVal |= 0x7C <<
HW_SRT(biss_mc1_FREQAGS);
240 if(ulCycleTimeUs > 4000)
244 else if(ulCycleTimeUs > 123)
247 ulCycleTimeUs += 624;
248 ulCycleTimeUs /= 625;
249 if(ulCycleTimeUs > 0x80)
253 ulCycleTimeUs += 0x7F;
261 ulVal &= ~(
HW_MSK(biss_mc1_FREQAGS));
262 ulVal |= ulCycleTimeUs <<
HW_SRT(biss_mc1_FREQAGS);
338 ulPrmVal = (ulPrmVal + 9) / 10 - 1;
343 ulVal |= (ulPrmVal <<
HW_SRT(biss_ccc1_mc0_FREQS));
368 ulVal |= 0x7F <<
HW_SRT(biss_mc1_FREQAGS);
386 static uint8_t DRV_BissM_CalcCrcMagic(uint32_t ulCrcPoly)
390 unsigned int uCrcLen;
405 while (bMask > ulCrcPoly) {
406 bMask = (bMask >> 1);
410 ulCrcPoly = (ulCrcPoly << 1) + 1;
417 if( (bCrc & bMask) != 0 )
419 bCrc = (uint8_t)(bCrc << 1);
423 bCrc = (uint8_t)((bCrc << 1) ^ ulCrcPoly);
427 bMask = (1 << uCrcLen) - 1;
459 ulVal |=
HW_MSK(biss_sc0_ENSCD0);
463 ulVal &= ~
HW_MSK(biss_sc0_ENSCD0);
473 ulVal |=
HW_MSK(biss_ccc1_mc0_EN_MO);
478 ulVal |= 1UL << (uChNo+
HW_SRT(biss_cc_sl_ACTnSENS));
485 ulVal &= ~(1UL << (uChNo+
HW_SRT(biss_cc_sl_ACTnSENS)));
489 if( 0 == (ulVal &
HW_MSK(biss_cc_sl_ACTnSENS)) )
493 ulVal &= ~
HW_MSK(biss_ccc1_mc0_EN_MO);
502 ulVal |= (ulPrmVal - 1) <<
HW_SRT(biss_sc0_SCDLEN0);
516 case 0x0000b: ulVal |= (0x03 <<
HW_SRT(biss_sc0_SCRCPOLY0));
break;
517 case 0x00013: ulVal |= (0x04 <<
HW_SRT(biss_sc0_SCRCPOLY0));
break;
518 case 0x00025: ulVal |= (0x05 <<
HW_SRT(biss_sc0_SCRCPOLY0));
break;
519 case 0x00043: ulVal |= (0x06 <<
HW_SRT(biss_sc0_SCRCPOLY0));
break;
520 case 0x00089: ulVal |= (0x07 <<
HW_SRT(biss_sc0_SCRCPOLY0));
break;
521 case 0x0012f: ulVal |= (0x08 <<
HW_SRT(biss_sc0_SCRCPOLY0));
break;
522 case 0x190d9: ulVal |= (0x10 <<
HW_SRT(biss_sc0_SCRCPOLY0));
break;
524 if(0 != (ulPrmVal & 0xffffff00UL))
528 ulVal |=
HW_MSK(biss_sc0_SELCRCS0);
529 ulVal |= (ulPrmVal >> 1) <<
HW_SRT(biss_sc0_SCRCPOLY0);
538 ulVal |= ulPrmVal <<
HW_SRT(biss_sc0_SCRCSTART0);
575 ptState->
fBusy = ( 0 == (ulStatus0 &
HW_MSK(biss_status0_EOT)));
600 const uint8_t *pbData )
603 volatile uint32_t* pulSCD;
608 + ((uint32_t)pbData[1] << 8)
609 + ((uint32_t)pbData[2] << 16)
610 + ((uint32_t)pbData[3] << 24);
613 + ((uint32_t)pbData[5] << 8)
614 + ((uint32_t)pbData[6] << 16)
615 + ((uint32_t)pbData[7] << 24);
639 uint16_t *pusCycleCnt,
644 volatile uint32_t* pulSCD;
656 if( pusCycleCnt != NULL )
661 data.aul[0] =
HW_RD32(pulSCD[0]);
662 data.aul[1] =
HW_RD32(pulSCD[1]);
664 for( uIdx = 0; uIdx < 8; ++uIdx)
666 pbData[uIdx] = data.ab[uIdx];
672 if( 0 == (ulState &
HW_MSK(biss_status0_nSCDERR)) )
678 if( 0 == (ulState & (
HW_MSK(biss_status0_SVALID0) << (2 * uChNo))) )
709 uint16_t *pusCycleCnt,
713 uint8_t* pbFrameData;
716 #ifndef __DRV_BISSM_DISABLE_CHECKS__ 717 if( uChNo > DRV_BISSM_CHANNEL_CNT )
723 pbFrameData = (uint8_t*)&
s_ptXpicShm->atXPIC_SHM_FRAME_DATA[uChNo];
725 pbData[0] =
NX_READ8(pbFrameData[DRV_BISSM_OFS_FRAME_DATA_EXT]);
728 bBissState = pbFrameData[DRV_BISSM_OFS_FRAME_DATA_STATE];
731 if( pusCycleCnt != NULL )
733 *pusCycleCnt =
NX_READ8(pbFrameData[DRV_BISSM_OFS_FRAME_DATA_CYCLE])
734 | (
NX_READ8(pbFrameData[DRV_BISSM_OFS_FRAME_DATA_CYCLE + 1]) << 8);
737 if( bBissState != 0 )
744 if( s_abExtCrcMagic[uChNo] !=
NX_READ8(pbFrameData[DRV_BISSM_OFS_FRAME_DATA_EXT_CRC]) )
774 unsigned int uOpcode )
779 if( 0 == (ulStatus0 &
HW_MSK(biss_status0_CDMTIMEOUT)))
786 ulVal &= ~(
HW_MSK(biss_ccc1_mc0_CTS)
787 |
HW_MSK(biss_ccc1_mc0_CMD)
788 |
HW_MSK(biss_ccc1_mc0_IDA_TEST)
791 ulVal |= uOpcode <<
HW_SRT(biss_ccc1_mc0_CMD);
792 ulVal |=
HW_MSK(biss_ccc1_mc0_REGVERS);
797 ulVal |=
HW_MSK(biss_ccc1_mc0_IDA_TEST);
822 unsigned int uRegAdr,
829 if( 0 == (ulStatus0 &
HW_MSK(biss_status0_CDMTIMEOUT)))
840 ulVal &= ~(
HW_MSK(biss_ccc1_mc0_CMD)
841 |
HW_MSK(biss_ccc1_mc0_IDA_TEST));
842 ulVal |=
HW_MSK(biss_ccc1_mc0_CTS);
843 ulVal |=
HW_MSK(biss_ccc1_mc0_REGVERS);
844 ulVal |= uSlaveId <<
HW_SRT(biss_ccc1_mc0_IDA_TEST);
848 |((uRegNr - 1) <<
HW_SRT(biss_ccc0_REGNUM))
849 |(uWnR <<
HW_SRT(biss_ccc0_WNR)));
883 const uint8_t *pbData )
887 #ifndef __DRV_BISSM_DISABLE_CHECKS__ 894 for(uiCnt = 0; uiCnt < uRegCnt; ++uiCnt)
896 unsigned int uiByte = uiCnt & 0x3;
897 ulData = ulData | ((uint32_t)pbData[uiCnt] << (8 * uiByte));
898 if( (uiCnt & 0x3) == 3)
907 if(0 != (uRegCnt & 0x3))
934 #ifndef __DRV_BISSM_DISABLE_CHECKS__ 941 for(uiIdx = 0; uiIdx < uRegCnt; ++uiIdx)
943 if( (uiIdx & 0x3) == 0 )
948 pbData[uiIdx] = ulData & 0xff;
976 ptCtrlState->
fBusy = ( 0 == (ulStatus0 &
HW_MSK(biss_status0_CDMTIMEOUT)) );
DRV_BISSM_RESULT_E DRV_BissM_StartAgsMin(void)
uint32_t DRV_BissM_GetIrq(void)
DRV_BISSM_RESULT_E DRV_BissM_GetState(DRV_BISSM_STATE_T *ptState)
static ETH_XPIC_SHM_AREA_T * s_ptXpicShm
#define HW_PTR_BISS_CTRL(var)
uint32_t DRV_BissM_Status0(void)
DRV_BISSM_RESULT_E DRV_BissM_GetCtrlState(DRV_BISSM_CTRL_STATE_T *ptCtrlState)
DRV_BISSM_RESULT_E DRV_BissM_CtrlRst(void)
DRV_BISSM_RESULT_E DRV_BissM_CtrlStart(void)
DRV_BISSM_RESULT_E DRV_BissM_SetParam(DRV_BISSM_PARAM_E ePrmID, uint32_t ulPrmVal)
void DRV_BissM_ConfirmIrq(uint32_t ulIrqMsk)
DRV_BISSM_RESULT_E DRV_BissM_GetSsiExtData(unsigned int uChNr, DRV_BISSM_DATA_STATE_E *peStatus, uint16_t *pusCycleCnt, uint8_t *pbData)
DRV_BISSM_RESULT_E DRV_BissM_Init(DRV_BISSM_CFG_T *ptConfig, void *pvUser)
#define DRV_BISSM_CC_SL_CFG_BISS_C
DRV_BISSM_CHANNEL_PARAM_E
#define DRV_BISSM_CTRL_REG_CNT
DRV_BISSM_RESULT_E DRV_BissM_StartCycle(uint32_t ulCycleTimeUs)
DRV_BISSM_RESULT_E DRV_BissM_SetProcessData(unsigned int uChNr, const uint8_t *pbData)
void DRV_BissM_ConfirmAllIrq(void)
uint32_t DRV_BissM_GetIrqRaw(void)
DRV_BISSM_RESULT_E DRV_BissM_StartCtrlReg(unsigned int uSlaveId, unsigned int uRegAdr, unsigned int uRegNr, unsigned int uWnR)
DRV_BISSM_RESULT_E DRV_BissM_SetCtrlData(unsigned int uRegNr, const uint8_t *pbData)
DRV_BISSM_CTRL_RESULT_E eError
void DRV_BissM_Break(void)
#define HW_WR32(var, val)
Header file of BISS controller module.
DRV_BISSM_RESULT_E DRV_BissM_StartCtrlCmd(unsigned int uSlaveId, unsigned int uOpcode)
DRV_BISSM_RESULT_E DRV_BissM_StartTrigger(DRV_BISSM_TRIGGER_TYPE_E eTriggerCfg)
DRV_BISSM_RESULT_E DRV_BissM_Stop()
#define DRV_BISSM_CTRL_CHN_CNT
#define DRV_BISSM_INSTR_REGCOM
DRV_BISSM_RESULT_E DRV_BissM_SetChannelParam(unsigned int uChNr, DRV_BISSM_CHANNEL_PARAM_E ePrmID, uint32_t ulPrmVal)
uint32_t DRV_BissM_GetConfirmIrq(void)
void DRV_BissM_IrqDisable(uint32_t ulIrqMsk)
DRV_BISSM_FRM_ERR_E eError
DRV_BISSM_RESULT_E DRV_BissM_GetProcessData(unsigned int uChNr, DRV_BISSM_DATA_STATE_E *peStatus, uint16_t *pusCycleCnt, uint8_t *pbData)
DRV_BISSM_RESULT_E DRV_BissM_GetCtrlData(unsigned int uRegNr, uint8_t *pbData)
void DRV_BissM_IrqEnable(uint32_t ulIrqMsk)