你好,我用SRIO发送接收数据,使用的是下面的代码
void send_CSL(unsigned int lsu, unsigned int SrcAddr, \
unsigned int DstAddr, unsigned int ByteCnt, unsigned int DstID,unsigned int portnum)
{
SRIO_LSU_TRANSFER lsuTransfer;
CSL_SrioHandle hSrio;
Uint8 context;
Uint8 transID;
Uint8 compCode;
Uint8 contextBit;
hSrio = CSL_SRIO_Open (0);
while (1)
{
if (CSL_SRIO_IsLSUFull (hSrio, lsu) == FALSE)
break;
}
// while(CSL_SRIO_IsLSUBusy(hSrio, lsu)==FALSE){}
retry:
// Populate the Transfer Information.
lsuTransfer.rapidIOMSB = 0x0;//0
lsuTransfer.rapidIOLSB = DstAddr;//目的地址
lsuTransfer.dspAddress = SrcAddr;//源地址
lsuTransfer.bytecount = ByteCnt;//数据大小
lsuTransfer.doorbellValid = 0;//0
lsuTransfer.intrRequest = 1;//1
lsuTransfer.supInt = 0;//0
lsuTransfer.xambs = 0;//0
lsuTransfer.priority = 2;//0
lsuTransfer.outPortID = portnum;//输出port号
lsuTransfer.idSize = 0;//目的ID 0-8bit or 1-16bit
lsuTransfer.srcIDMap = 0;//0
lsuTransfer.dstID = DstID;//目的ID
lsuTransfer.ttype = 4;
lsuTransfer.ftype = 5;
lsuTransfer.hopCount = 0x0; //FF
lsuTransfer.doorbellInfo = 0;
CSL_SRIO_GetLSUContextTransaction (hSrio,lsu ,&context, &transID);
// Send the transfer on LSU 0
CSL_SRIO_SetLSUTransfer (hSrio, lsu, &lsuTransfer);
while(CSL_SRIO_IsLSUBusy(hSrio, lsu)==TRUE){} // polling, test BSY bit
CSL_SRIO_GetLSUCompletionCode (hSrio, lsu, transID, &compCode, &contextBit);
if (compCode!=0x0)
{
goto retry;
}
}
对于这段代码有几个问题
1. outPortID是什么:输出端口还是?
2. srcIDMap:值是多少,怎么确定,是发送包里的源id么?
3. hotCount给多少?
4. idSize:怎么确定是8bit还是16bit?我给的dsp的设备id是9,这里应该是什么值?
对于设备ID有几个疑问,相关的额寄存器有base_id,host_base_id_lock,deviceID_reg0, deviceID_reg1。这几个寄存器里的值都是dsp设置的设备id么,这个设备id是不是就是发送包里填充的源id?
谢谢