运行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);
}
}



