⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsip_elb_example.c

📁 dsp tms320c6486的csl例程
💻 C
📖 第 1 页 / 共 2 页
字号:
{

    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 + -