工具/软件:
您好:
在基于 SYSBIOS 的应用中、我们正在配置从 CPPI RAM 到外部 DDR 存储器的 EMAC 缓冲区描述符。 虽然当缓冲区描述符在 CPPI RAM (0x48486000 - 0x48487FFF)中分配时、数据包传输和接收功能正常、但在切换到外部 DDR 存储器(0x90000000)时、它们无法正常工作。 我已经通过在地址0x90000000处成功地对外部 DDR 存储器进行读取和写入来确认存储器访问。
此外、我还尝试使用转换后的地址、如 以下文章中所述:
将 EMAC CPPI RAM 用于缓冲区描述符-处理器论坛-处理器- TI E2E 支持论坛
我还在下面包含了工程配置文件和 EMAC 接收 API 详细信息。
项目配置文件
var attrs0 =新的 MMU.DescriptorAttrs();
Mmu.initDescAttrsMeta(attrs0);
attrs0.type = MMU.DescriptorType_block;//块描述符
attrs0.可共享=2;//可共享
attrs.0attrIndx = 2;
Mmu.setSecondLevelDescMeta(0x90000000、0x90000000、attrs0);
EMAC 接收 API 如下所示
int32_t receive_packet (uint8_t* dataPacket)
{
//将零写入 RX DMA 状态头描述符指针
*(uint32_t *)(0x48484A20)= 0;
uint32_t bdAddress=0x90000000;//不起作用
//uint32_t bdAddress=0x48487000;//工作
EMAC_DESC *pDESC;
pDESC =(EMAC_DESC *)(bdAddress);
pDESC->pNext =0;
pDESC->pBuffer=&dataPacket[0];
pDESC->BufOffLen=1518;
pDESC->pktFlgLen = EMAC_BUF_DESC_OWNER;
//开始转移
*(uint32_t *)(0x48484A20)= bdAddress;
while ((pDESC->pktFlgLen & EMAC_BUF_DESC_Owner)== EMAC_BUF_DESC_Owner)
{
//等待完成
睡眠(1);
}
emac_osalCacheInv (void *)&dataPacket[0]、1518);
返回 pDESC->BufOffLen;
}
建议会有所帮助
谢谢、
Sandeep