📄 tsip_elb_example.c
字号:
{
tsipSetup.gbl = &gblsetup;
tsipSetup.xframe = &xframesetup;
tsipSetup.rframe = &rframesetup;
tsipSetup.xclk = &xclk;
tsipSetup.rclk = &rclk;
tsipSetup.xint = &xint;
tsipSetup.rint = &rint;
xframesetup.fcount = (CSL_TsipFramecount)3;
xframesetup.fsize = (CSL_TsipFramesize)127;
rframesetup.fcount = (CSL_TsipFramecount)3;
rframesetup.fsize = (CSL_TsipFramesize)127;
gblsetup.clkd = (CSL_TsipClkd)Tsip0.ClockDiv;
gblsetup.endian = (CSL_TsipEndian)Tsip0.Endian;
gblsetup.pri = (CSL_TsipPri)Tsip0.priority;
gblsetup.maxpri = (CSL_TsipPri)Tsip0.max_priority;
xclk.clksrc = (CSL_TsipClkSrc)Tsip0.xclk_clksrc;
xclk.datd = Tsip0.xclk_datadelay;
xclk.outdis = (CSL_TsipXmtDis)Tsip0.xclk_outdis;
xclk.fsyncp = (CSL_TsipFsyncp)Tsip0.xclk_fsyncp;
xclk.fclkp = (CSL_TsipClkp)Tsip0.xclk_fclkp;
xclk.dclkp = (CSL_TsipClkp)Tsip0.xclk_dclkp;
xclk.drate = (CSL_TsipDataRate)Tsip0.xclk_drate;
xclk.clkmode = (CSL_TsipClkm)Tsip0.xclk_clkmode;
rclk.clksrc = (CSL_TsipClkSrc)Tsip0.rclk_clksrc;
rclk.datd = Tsip0.rclk_datadelay;
rclk.fsyncp = (CSL_TsipFsyncp)Tsip0.rclk_fsyncp;
rclk.fclkp = (CSL_TsipClkp)Tsip0.rclk_fclkp;
rclk.dclkp = (CSL_TsipClkp)Tsip0.rclk_dclkp;
rclk.drate = (CSL_TsipDataRate)Tsip0.rclk_drate;
rclk.clkmode = (CSL_TsipClkm)Tsip0.rclk_clkmode;
xint.sfint = (CSL_TsipInt)0;
xint.frint = (CSL_TsipInt)0;
xint.fdelay = (CSL_TsipInt)0;
rint.sfint = (CSL_TsipInt)0;
rint.frint = (CSL_TsipInt)0;
rint.fdelay = (CSL_TsipInt)0;
}
/*
* =============================================================================
* @func tsip_Channel_setup
*
* @desc
* @n This function sets up the TSIP to transmit and receive the data.
* loopback.
*
* @arg
* ChannelNumber - channel number to configure particular TSIP channel.
*
* @return
* None
* =============================================================================
*/
void tsip_Channel_setup (
Uint32 ChannelNumber
)
{
Uint32 randomnumber;
Uint32 bitmap;
Uint32 bitmapcount;
Uint32 FrameSize;
Uint32 j;
channel = ChannelNumber;
tsipSetup.ChannelNumber = &channel;
switch (channel) {
case 0 :
{
xchannela.baseaddr = (Uint32) (((Uint8 *)Xmt0aSrcAddr) +
GEM_ID * 0x1000000 + 0x10000000);
rchannela.baseaddr = (Uint32) (((Uint8 *)Rcv0aDestAddr) +
GEM_ID * 0x1000000 + 0x10000000);
SrcDataIncPtr = Xmt0aSrcAddr;
break;
}
case 1 :
{
xchannela.baseaddr = (Uint32) (((Uint8 *)Xmt1aSrcAddr) +
GEM_ID * 0x1000000 + 0x10000000);
rchannela.baseaddr = (Uint32) (((Uint8 *)Rcv1aDestAddr) +
GEM_ID * 0x1000000 + 0x10000000);
SrcDataIncPtr = Xmt1aSrcAddr;
break;
}
case 2 :
{
xchannela.baseaddr = (Uint32) (((Uint8 *)Xmt2aSrcAddr) +
GEM_ID * 0x1000000 + 0x10000000);
rchannela.baseaddr = (Uint32) (((Uint8 *)Rcv2aDestAddr) +
GEM_ID * 0x1000000 + 0x10000000);
SrcDataIncPtr = Xmt2aSrcAddr;
break;
}
case 3 :
{
xchannela.baseaddr = (Uint32) (((Uint8 *)Xmt3aSrcAddr) +
GEM_ID * 0x1000000 + 0x10000000);
rchannela.baseaddr = (Uint32) (((Uint8 *)Rcv3aDestAddr) +
GEM_ID * 0x1000000 + 0x10000000);
SrcDataIncPtr = Xmt3aSrcAddr;
break;
}
case 4 :
{
xchannela.baseaddr = (Uint32) (((Uint8 *)Xmt4aSrcAddr) +
GEM_ID * 0x1000000 + 0x10000000);
rchannela.baseaddr = (Uint32) (((Uint8 *)Rcv4aDestAddr) +
GEM_ID * 0x1000000 + 0x10000000);
SrcDataIncPtr = Xmt4aSrcAddr;
break;
}
case 5 :
{
xchannela.baseaddr = (Uint32) (((Uint8 *)Xmt5aSrcAddr) +
GEM_ID * 0x1000000 + 0x10000000);
rchannela.baseaddr = (Uint32) (((Uint8 *)Rcv5aDestAddr) +
GEM_ID * 0x1000000 + 0x10000000);
SrcDataIncPtr = Xmt5aSrcAddr;
break;
}
default :
break;
}
/* CID + FC at the header and footer */
xchannela.falloc = (Test_List[channel].xmt_frame_size + 9) ;
xchannela.fsize = (Test_List[channel].xmt_frame_size + 9) ;
rchannela.falloc = (Test_List[channel].xmt_frame_size + 9) ;
rchannela.fsize = (Test_List[channel].xmt_frame_size + 9) ;
/* considering first dummy frame */
xchannela.fcount = Test_List[channel].xmt_frame_count + 2;
rchannela.fcount = Test_List[channel].xmt_frame_count + 2;
/* Generate random bitmaps for the corresponding frame size */
bitmapcount = 0;
FrameSize = Test_List[channel].xmt_frame_size + 1;
bitmap = 0;
for (j = 0; ((j < CSL_TSIP_BITMAP_SIZE * 16)); j++) {
if ((bitmapcount < FrameSize) && (j >= bitmappos)) {
randomnumber = 0x01;
if ((randomnumber != 0)) {
bitmapcount++;
}
bitmap |= (randomnumber << ((j%16)*2));
}
if ((j % 16) == 15) {
*(Uint32 *) (xbitmapa0 + j/16 + GEM_ID * 0x1000000/4 +
0x10000000/4) = bitmap;
*(Uint32 *) (rbitmapa0 + j/16 + GEM_ID * 0x1000000/4 +
0x10000000/4) = bitmap;
bitmap = 0;
}
}
bitmappos += bitmapcount;
xchannela.bitmap = ((xbitmapa0 + GEM_ID * 0x1000000/4 + 0x10000000/4));
rchannela.bitmap = (rbitmapa0 + GEM_ID * 0x1000000/4 + 0x10000000/4);
xchannelb.baseaddr = (Uint32) ((Uint8 *)Xmt0bSrcAddr +
GEM_ID * 0x1000000 + 0x10000000);
xchannelb.falloc = 0x10;
xchannelb.fsize = 0x10;
xchannelb.fcount = 0x4;
for (j = 0; j < CSL_TSIP_BITMAP_SIZE; j++) {
*(Uint32 *)(xbitmapb0 + j + GEM_ID * 0x1000000/4 + 0x10000000/4)=0x0;
}
xchannelb.bitmap = ((xbitmapb0 + GEM_ID * 0x1000000/4 + 0x10000000/4));
rchannelb.baseaddr = (Uint32) ((Uint8 *)Rcv1bDestAddr +
GEM_ID * 0x1000000 + 0x10000000);
rchannelb.falloc = 0x10;
rchannelb.fsize = 0x10;
rchannelb.fcount = 0x1;
for (j = 0; j < CSL_TSIP_BITMAP_SIZE; j++) {
*(Uint32 *)(rbitmapb0 + j + GEM_ID * 0x1000000/4 + 0x10000000/4)=0x0;
}
rchannelb.bitmap = (rbitmapb0 + GEM_ID * 0x1000000/4 + 0x10000000/4);
tsipSetup.xchana = (CSL_TsipChanSetup*) &(xchannela);
tsipSetup.xchanb = (CSL_TsipChanSetup*) &(xchannelb);
tsipSetup.rchana = (CSL_TsipChanSetup*) &(rchannela);
tsipSetup.rchanb = (CSL_TsipChanSetup*) &(rchannelb);
}
/*
* =============================================================================
* @func CID_Init
*
* @desc
* @n This function initalizes the TSIP data for different channels.
*
* @arg
* None
*
* @return
* None
* =============================================================================
*/
void CID_Init (
)
{
Uint32 i;
for (i = 0; i <= Test_List[0].xmt_frame_count + 1 ; i++) {
*(Uint32*)(Xmt0aSrcAddr + i * (Test_List[0].xmt_frame_size + 9)/4 +
GEM_ID * 0x1000000/4 + 0x10000000/4) =
(((TSIP_ID + GEM_ID << 24)) | (i+1));
}
for (i = 0; i <= Test_List[1].xmt_frame_count + 1 ; i++) {
*(Uint32*)(Xmt1aSrcAddr + i * (Test_List[1].xmt_frame_size + 9)/4 +
GEM_ID * 0x1000000/4+ 0x10000000/4 ) =
(((TSIP_ID + GEM_ID << 24)) | (i+1));
}
for (i = 0; i <= Test_List[2].xmt_frame_count + 1 ; i++) {
*(Uint32*)(Xmt2aSrcAddr + i * (Test_List[2].xmt_frame_size + 9)/4 +
GEM_ID * 0x1000000/4 + 0x10000000/4) =
(((TSIP_ID + GEM_ID << 24)) | (i+1));
}
for(i = 0; i <= Test_List[3].xmt_frame_count + 1 ; i++) {
*(Uint32*)(Xmt3aSrcAddr + i * (Test_List[3].xmt_frame_size + 9)/4 +
GEM_ID * 0x1000000/4 + 0x10000000/4) =
(((TSIP_ID + GEM_ID << 24)) | (i+1));
}
for(i = 0; i <= Test_List[4].xmt_frame_count + 1 ; i++) {
*(Uint32*)(Xmt4aSrcAddr + i * (Test_List[4].xmt_frame_size + 9)/4 +
GEM_ID * 0x1000000/4 + 0x10000000/4) =
(((TSIP_ID + GEM_ID << 24)) | (i+1));
}
for(i = 0; i <= Test_List[5].xmt_frame_count + 1 ; i++) {
*(Uint32*)(Xmt5aSrcAddr + i * (Test_List[5].xmt_frame_size + 9)/4 +
GEM_ID * 0x1000000/4 + 0x10000000/4) =
(((TSIP_ID + GEM_ID << 24)) | (i+1));
}
CSL_FINST(hTsip0->regs->XCHEN[0].XCHEN, TSIP_XCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->XCHEN[0].XCHEN, TSIP_XCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
CSL_FINST(hTsip0->regs->XCHEN[1].XCHEN, TSIP_XCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->XCHEN[1].XCHEN, TSIP_XCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
CSL_FINST(hTsip0->regs->XCHEN[2].XCHEN, TSIP_XCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->XCHEN[2].XCHEN, TSIP_XCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
CSL_FINST(hTsip0->regs->XCHEN[3].XCHEN, TSIP_XCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->XCHEN[3].XCHEN, TSIP_XCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
CSL_FINST(hTsip0->regs->XCHEN[4].XCHEN, TSIP_XCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->XCHEN[4].XCHEN, TSIP_XCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
CSL_FINST(hTsip0->regs->XCHEN[5].XCHEN, TSIP_XCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->XCHEN[5].XCHEN, TSIP_XCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
CSL_FINST(hTsip0->regs->RCHEN[0].RCHEN, TSIP_RCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->RCHEN[0].RCHEN, TSIP_RCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
CSL_FINST(hTsip0->regs->RCHEN[1].RCHEN, TSIP_RCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->RCHEN[1].RCHEN, TSIP_RCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
CSL_FINST(hTsip0->regs->RCHEN[2].RCHEN, TSIP_RCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->RCHEN[2].RCHEN, TSIP_RCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
CSL_FINST(hTsip0->regs->RCHEN[3].RCHEN, TSIP_RCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->RCHEN[3].RCHEN, TSIP_RCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
CSL_FINST(hTsip0->regs->RCHEN[4].RCHEN, TSIP_RCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->RCHEN[4].RCHEN, TSIP_RCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
CSL_FINST(hTsip0->regs->RCHEN[5].RCHEN, TSIP_RCHEN_CHENB, ENB);
CSL_FINS(hTsip0->regs->RCHEN[5].RCHEN, TSIP_RCHEN_CID,
((TSIP_ID + GEM_ID << 24)));
}
/*
* =============================================================================
* @func main
*
* @desc
* This is the main routine, which invokes TSIP external loopback example.
* =============================================================================
*/
void main (
void
)
{
Uint32 result = FAIL;
printf("TSIP External Loopback Example \n");
result = tsip_txRx();
if (result == 0) {
printf("TSIP loopback example Passed\n");
}
else {
printf("TSIP loopback example Failed\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -