我正在尝试对 TMS570LS31x 的安全功能 ETH2A 执行 I/O 回送测试。
要检查的环境是 。
传输正常完成、但接收未完成。
我的源代码如下所示。
如果出现错误、请告诉我。
代码中调用的函数是由 HALCoGen04.05.01生成的函数。
我会问您、以防万一。
是否使用 MACCONTROL 寄存器内部环回?
***** 代码
void TestEthLpbk (void){
hdkif_t *hdkif;
hdkif =&hdkif_data[0U];
布尔 retValue;
uint8 TX_DATA[60U]={/*测试传输数据*
0x00、0x80、0x2F、0x25、0x56、 0xBA、0x98、0x90、0x96、0xD8};
uint8 rx_data[60U]={0U};//接收缓冲区
uint16 dataLen = 60U;
pbuf_t pbuf ={NULL、TX_DATA、dataLen、dataLen};
uint16 rcvLen = 0U;
uint16 cnt;
/*初始化用于发送和接收的 EMAC */
EMACHWInit( selectmacAdd );
EMACRMIISpeedSet (EMAC_BASE、EMAC_RMIISPEED_100Mbps);
/*启用环回*/
Dp83640EnableLoopback (hdkif->mdio_BASE、hdkif->phy_addr);
EMACEnableLoopback ( hdkif->EMAC_BASE );
/*数据传输*/
retValue = EMACTransmit( hdkif,&pbuf );
if (retValue == true){
/*接收数据*/
EMACReceive( hdkif );
rcvLen = hdkif->rxchptr.active_head->bufoff_len;
for (cnt = 0U;cnt < rcvLen;cnt++){
RX_DATA[cnT]= HWREGB ((hdkif->rxchptr.active_head->bufptr)+cnt);
}
/*数据验证*/
for (cnt = 0U;cnt < rcvLen;cnt++){
if (tx_data[cnt]!= rx_data[cnt]){
/*环回故障*/
}
}
}
否则{
/*发送数据失败*/
}
/*禁用环回*/
EMACDisableLoopback ( hdkif->EMAC_BASE );
dp83640DisableLoopback (hdkif->mdio_BASE、hdkif->phy_addr);
返回;
}