ch32v208用PHY收發(fā)問題
void?WCHNET_ETHIsr(?void?)
{
????uint8_t?eth_irq_flag,?estat_regval;

????eth_irq_flag?=?R8_ETH_EIR;????
????if(eth_irq_flag&RB_ETH_EIR_RXIF)????????????????????????????????//Receive?complete
????{
????????R8_ETH_EIR?=?RB_ETH_EIR_RXIF;????????/*?Check?if?the?descriptor?is?owned?by?the?ETHERNET?DMA?*/
????????if(?DMARxDescToGet->Status?&?ETH_DMARxDesc_OWN?)
????????{
????????????estat_regval?=?R8_ETH_ESTAT;????????????
????????????if(estat_regval?&?\
????????????????????(RB_ETH_ESTAT_BUFER?|?RB_ETH_ESTAT_RXCRCER?|?RB_ETH_ESTAT_RXNIBBLE?|?RB_ETH_ESTAT_RXMORE))
????????????{????????????????return;
????????????}????????????
????????????if(?((ETH_DMADESCTypeDef*)(DMARxDescToGet->Buffer2NextDescAddr))->Status&?ETH_DMARxDesc_OWN?)
????????????{
????????????????DMARxDescToGet->Status?&=?~ETH_DMARxDesc_OWN;
????????????????DMARxDescToGet->Status?&=?~ETH_DMARxDesc_ES;
????????????????DMARxDescToGet->Status?|=?(ETH_DMARxDesc_FS|ETH_DMARxDesc_LS);
????????????????DMARxDescToGet->Status?&=?~ETH_DMARxDesc_FL;
????????????????DMARxDescToGet->Status?|=?((R16_ETH_ERXLN+4)<Buffer2NextDescAddr);
????????????????R16_ETH_ERXST?=?DMARxDescToGet->Buffer1Addr;
????????????????}
??????????????}

在這個中斷里面接收PHY的數(shù)據(jù),每次接收幾次之后就無法觸發(fā)

if(?DMARxDescToGet->Status?&?ETH_DMARxDesc_OWN?)

接收檢查通過不了,但是接收是完成的,這個是什么原因造成的?

您好,可嘗試使用最新的EVT例程測試,這邊測試EVT例程并沒有出現(xiàn)您所描述的現(xiàn)象。附例程接收中斷部分代碼:

void?WCHNET_ETHIsr(?void?)
{
????uint8_t?eth_irq_flag,?estat_regval;

????eth_irq_flag?=?R8_ETH_EIR;
????if(eth_irq_flag&RB_ETH_EIR_RXIF)????????????????????????????????//Receive?complete
????{
????????R8_ETH_EIR?=?RB_ETH_EIR_RXIF;
????????/*?Check?if?the?descriptor?is?owned?by?the?ETHERNET?DMA?*/
????????if(?DMARxDescToGet->Status?&?ETH_DMARxDesc_OWN?)
????????{
????????????estat_regval?=?R8_ETH_ESTAT;
????????????if(estat_regval?&?\
????????????????????(RB_ETH_ESTAT_BUFER?|?RB_ETH_ESTAT_RXCRCER?|?RB_ETH_ESTAT_RXNIBBLE?|?RB_ETH_ESTAT_RXMORE))
????????????{
????????????????return;
????????????}
????????????if(?((ETH_DMADESCTypeDef*)(DMARxDescToGet->Buffer2NextDescAddr))->Status&?ETH_DMARxDesc_OWN?)
????????????{
????????????????DMARxDescToGet->Status?&=?~ETH_DMARxDesc_OWN;
????????????????DMARxDescToGet->Status?&=?~ETH_DMARxDesc_ES;
????????????????DMARxDescToGet->Status?|=?(ETH_DMARxDesc_FS|ETH_DMARxDesc_LS);
????????????????DMARxDescToGet->Status?&=?~ETH_DMARxDesc_FL;
????????????????DMARxDescToGet->Status?|=?((R16_ETH_ERXLN+4)<Buffer2NextDescAddr);
????????????????R16_ETH_ERXST?=?DMARxDescToGet->Buffer1Addr;
????????????}
????????}
????}

如遇其他問題可通過郵箱與我聯(lián)系(zl@wch.cn


我只初始化了ETH_LibInit這個函數(shù),在接收和發(fā)送的時候沒有調(diào)用其它的庫函數(shù),例如WCHNET_MainTask()和

??if(WCHNET_QueryGlobalInt())
????????{
????????????WCHNET_HandleGlobalInt();
????????}

是否這些影響的?

WCHNET_MainTask()

這個函數(shù)能否放在定時器內(nèi)運行?


接收數(shù)據(jù)是從哪里提取,從

DMARxDescToGet->Buffer1Addr

這個地址提取的話好像不時實


DMARxDescToGet->Buffer1Addr

可以從這里提取,但是要在指向下一個地址之前提取


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频