运行ethercat_slave_simple_demo_am64x-evm_r5fss0-0_freertos_ti-arm-clang例程,参考ti的那个倍福的例程,添加发送数据的程序,但是电脑作为主站接收到的数据却是断断续续而且有规律的,下面是接收到的数据图,从站一直发送发送100,间隔2s,2s这个时间段有数据,然后4s这个时间段就为0,之前测试过发送一个变量,变量一直累加,打印出变量的数据,变量会一直递增,但是主站那里看的时候数据也是一样大约两个数变0,比如主站是1-0-0-3-0-0-5-0-0-7这样子收到数据,现在不清楚是不是自己配置的 PRUICSS_Handle 有问题
下面是PRU实例对象的初始化
void tiesc_socEvmInit() { const PRUICSS_HwAttrs *pruicssHwAttrs; uint32_t inEventLatch0, inEventLatch1, outEventLatch0, outEventLatch1; pruIcss1Handle = PRUICSS_open(CONFIG_PRU_ICSS1); pruicssHwAttrs = PRUICSS_getAttrs(CONFIG_PRU_ICSS1); /* Selecting MII-RT mode in GPCFG mux */ // PRUICSS_setGpMuxSelect(pruIcss1Handle, PRUICSS_PRU0, PRUICSS_GP_MUX_SEL_MODE_MII); PRUICSS_setGpMuxSelect(pruIcss1Handle, PRUICSS_PRU1, PRUICSS_GP_MUX_SEL_MODE_MII); // PRUICSS_setGpiMode(pruIcss1Handle, PRUICSS_PRU0, PRUICSS_GPI_MODE_MII_RT); PRUICSS_setGpiMode(pruIcss1Handle, PRUICSS_PRU1, PRUICSS_GPI_MODE_MII_RT); // PRUICSS_setIcssCfgMiiMode(pruIcss1Handle, 0, PRUICSS_ICSS_CFG_MII_MODE_MII); PRUICSS_setIcssCfgMiiMode(pruIcss1Handle, 1, PRUICSS_ICSS_CFG_MII_MODE_MII); // PRUICSS_setIcssCfgTxFifo(pruIcss1Handle, PRUICSS_TX_L1_FIFO, 1); PRUICSS_setIcssCfgTxFifo(pruIcss1Handle, PRUICSS_TX_L2_FIFO, 0); /* Making the clock for ICSSG core and IEP same */ PRUICSS_setIepClkSrc(pruIcss1Handle, 1U); /* Disable PRUs. This is to ensure PRUs are not running when application is not initialized */ // PRUICSS_disableCore(pruIcss1Handle, PRUICSS_PRU0); PRUICSS_disableCore(pruIcss1Handle, PRUICSS_PRU1); /* TimeSync Router configuration for latch pins */ if(pruicssHwAttrs->instance == 0) { inEventLatch0 = CSLR_TIMESYNC_EVENT_INTROUTER0_IN_PINFUNCTION_PRG0_IEP0_EDC_LATCH_IN0IN_PRG0_IEP0_EDC_LATCH_IN0_0; inEventLatch1 = CSLR_TIMESYNC_EVENT_INTROUTER0_IN_PINFUNCTION_PRG0_IEP0_EDC_LATCH_IN1IN_PRG0_IEP0_EDC_LATCH_IN1_0; outEventLatch0 = TIMESYNC_EVENT_INTROUTER0_MUXCNTL_8; outEventLatch1 = TIMESYNC_EVENT_INTROUTER0_MUXCNTL_9; } else { inEventLatch0 = CSLR_TIMESYNC_EVENT_INTROUTER0_IN_PINFUNCTION_PRG1_IEP0_EDC_LATCH_IN0IN_PRG1_IEP0_EDC_LATCH_IN0_0; inEventLatch1 = CSLR_TIMESYNC_EVENT_INTROUTER0_IN_PINFUNCTION_PRG1_IEP0_EDC_LATCH_IN1IN_PRG1_IEP0_EDC_LATCH_IN1_0; outEventLatch0 = TIMESYNC_EVENT_INTROUTER0_MUXCNTL_12; outEventLatch1 = TIMESYNC_EVENT_INTROUTER0_MUXCNTL_13; } HW_WR_REG32((CSL_TIMESYNC_EVENT_INTROUTER0_CFG_BASE + outEventLatch0), (inEventLatch0 | 0x10000)); HW_WR_REG32((CSL_TIMESYNC_EVENT_INTROUTER0_CFG_BASE + outEventLatch1), (inEventLatch1 | 0x10000)); PRUICSS_enableCore(pruIcss1Handle, PRUICSS_PRU1); }
下面是连接上主站,状态为OP的时候,间隔2s发送数据100
for(;;) { EC_API_SLV_mainLoopCyclic(); if (EC_API_SLV_eESM_op == EC_API_SLV_getState()) { bsp_write_byte(pruIcss1Handle,100,0x1e00); OSAL_SCHED_sleep(2000); } else { /* for carve up give some air */ OSAL_SCHED_sleep(100); } }