TI 的专家好,
想咨询一下,hyperlink的地址映射可以分多个段吗,看STK 例程上分了16段:
for(iSeg= 0; iSeg<8; iSeg++)
for(iPrvId=0; iPrvId<4; iPrvId++)
{
hyperLink_cfg.address_map.rx_addr_segs[(iPrvId<<4)|iSeg].Seg_Base_Addr
= 0x10000000+iSeg*0x01000000;
hyperLink_cfg.address_map.rx_addr_segs[(iPrvId<<4)|iSeg].Seg_Length
= RX_SEG_LEN_0x0_0100_0000;
}
如上映射到多个地址段,
for(i= 0; i< 64; i++)
{
hyperLinkRegs->RX_SEG_IDX= i;
hyperLinkRegs->RX_SEG_VAL= addr_map->rx_addr_segs[i].Seg_Base_Addr | addr_map->rx_addr_segs[i].Seg_Length;
}
赋值时RX_SEG_IDX,RX_SEG_VAL 寄存器只有一个,配置的信息是保存到哪里的
Nancy Wang:
请问具体是什么配置的信息?是指Hyperlink_Test.c->Hyperlink_config的配置吗?
,
user3912087:
我的意思是前面的代码是有多个内存段的地址映射,到时后面的赋值都是赋值到同一个寄存器,这样会生成多个段的地址映射吗
,
Zahir Wang:
HyperLink_Rx_Address_Segment rx_addr_segs[64];//程序中这里定义了大小为64的数组
for(iSeg= 0; iSeg<8; iSeg++) for(iPrvId=0; iPrvId<4; iPrvId++) //iSeg值为0x0F,iPrvid值为4 正好就是64 { hyperLink_cfg.address_map.rx_addr_segs[(iPrvId<<4)|iSeg].Seg_Base_Addr= 0x10000000+iSeg*0x01000000; hyperLink_cfg.address_map.rx_addr_segs[(iPrvId<<4)|iSeg].Seg_Length= RX_SEG_LEN_0x0_0100_0000; }
for(i= 0; i< 64; i++) //然后前面配置的时候也是分别对这64个值分别配置,应该是不会重叠的吧。 { gpHyperLinkRegs->RX_SEG_IDX= i; gpHyperLinkRegs->RX_SEG_VAL= addr_map->rx_addr_segs[i].Seg_Base_Addr |addr_map->rx_addr_segs[i].Seg_Length; }
可以参考 https://www.ti.com.cn/cn/lit/an/zhca565/zhca565.pdf这个手册