请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C1294NCPDT 工具/软件:Code Composer Studio
您好!
在使用 EMAC DMA 时、是否有任何方法来设置 EMAC DMA 和 UDMA 的优先级、或避免 UDMA 上的总线错误?
我需要在乒乓模式下使用 uDMA (MEMORY -> SSI1)持续发送数据28ms、然后传输停止约5ms。 然后重复循环。
如果以太网数据包在 UDMA 传输期间到达、则会导致 UDMA 总线错误- 调用 uDMAErrorHandler、 uDMAErrorStatusGet 返回1。 因此、乒乓传输停止(必须避免这种情况、必须保持恒定的数据流)。
在这种情况下、ETH 的优先级可能较低、如果需要、数据复制可能会被推迟。
我不使用 RTOS、使用具有几乎默认配置的 lwIP 堆栈(向 ETH 添加了更多缓冲区)。
有没有关于如何消除 uDMA 总线错误的想法?
太棒了!
我的配置如下:
#define SysTK_INT_PRIORITY 0x80 #define ETHERNET_INT_PRIORITY 0xC0 #define SSI1_INT_PRIORITY 0x00 int main(){ (...) MAP_IntPrioritySet (INT_EMAC0、ETHERNET_INT_PRIORITY); MAP_IntPrioritySet (FAULT_SysTick、SysTK_INT_PRIORITY); MAP_IntPrioritySet (INT_SSI1、 SSI1_INT_PRIORITY); uDMAChannelAttributeDisable (UDMA_CHANGE_SSI1TX、 UDMA_ATTR_ALTSELECT | UDMA_ATTR_HIGH_PRIOR| UDMA_ATTR_REQMASK); uDMAChannelControlSet (UDMA_CHANGE_SSI1TX | UDMA_PRI_SELECT、 UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_4); uDMAChannelControlSet (UDMA_CHANGE_SSI1TX | UDMA_ALT_SELECT、 UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_4); SSIIntEnable (SSI1_BASE、SSI_DMATX); (... 通道传输置位、uDMAChannelEnable...) IntEnable (INT_SSI1); } lwIPInit () { MAP_EMACPHYConfigSet (EMAC0_BASE、EMAC_PHY_CONFIG); // //初始化 MAC 并设置 DMA 模式。 // MAP_EMACInit (EMAC0_BASE、ui32SysClkHz、 EMAC_BCONFIG_DMA_PRIO_权 重_1 | EMAC_BCONFIG_Mixed_BURST | EMAC_BCONFIG_PRIORY_FIXED、 1、1、0);//<<<<<<<<--这是在没有 PRIO_weight 参数和4、4、0的情况下设置的默认值。 结果是相同的。 // //设置 MAC 配置选项。 // MAP_EMACConfigSet (EMAC0_BASE、(EMAC_CONFIG_FUL_DUPLEX | EMAC_CONFIG_CHECKSUM_OFFLOAD | EMAC_CONFIG_7BYTE_PREAMBLE | EMAC_CONFIG_IF_GAP_96BITS | EMAC_CONFIG_USE_MACADDR0 | EMAC_CONFIG_SA_FTER_descriptor | EMAC_CONFIG_BO_LIMIT_1024)、 (EMAC_MODE_RX_STORE_Forward | EMAC_MODE_TX_STORE_Forward | EMAC_MODE_TX_THRESHOLD_64_Bytes | EMAC_MODE_RX_THREST_64_Bytes)、0); }