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

📄 sport.c

📁 DSP link 测试
💻 C
📖 第 1 页 / 共 2 页
字号:
/*msg pingpong mechanism version
data: 2003/10
*/

#ifndef _SPORT_H_
#include "sport.h"
#endif

#ifdef _PINGPONG_VER

const unsigned char SPORT_EDMA_R_PING[3] = {SPORT0_EDMA_R_PING,
                                            SPORT1_EDMA_R_PING,
                                            SPORT2_EDMA_R_PING};       
const unsigned char SPORT_EDMA_R_PONG[3] = {SPORT0_EDMA_R_PONG,
                                            SPORT1_EDMA_R_PONG,
                                            SPORT2_EDMA_R_PONG};
#endif                                            

const unsigned char McBSPx_EDMA_Ch[3] = {12,14,17};
const unsigned char McBSPr_EDMA_Ch[3] = {13,15,18};

//unsigned int 		McBSPr_pBuf[3];  //reserved the buf address
//const unsigned char McBSPx_EDMA_TCC[3] = {8,8,10};
//const unsigned char McBSPr_EDMA_TCC[3] = {9,9,9};

/*--------------------------------------------------------------------------------*/  
/* Description:McBSP test in loopback mode                                        */
/* Parameter:  ch: The McBSP Num                                                  */
/* Return:     if there is some error , return 1                                  */ 
/*               else return 0                                                    */
/* Note:       NULL                                                               */
/*--------------------------------------------------------------------------------*/      
int mcbsp_test(unsigned int ch)
{
  volatile unsigned int temp =0,temp1;
  volatile McBSP_REG * mcbsp;

  if(ch > 2)  return 1 ;

  mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
  
  mcbsp->SPCR = 0;         /* reset serial port     */

  mcbsp->SRGR = (1<<CLKSM) + (0<<FSGM) +
                                              (20<<FPER) + (74<<CLKGDV);

  mcbsp->PCR = (1<<FSXM) + (1<<CLKXM);

  mcbsp->RCR = (1<<DATDLY) + (5<<WDLEN1);    /* one 32 bit data/frame */

  mcbsp->XCR = (1<<DATDLY) + (5<<WDLEN1);    /* one 32 bit data/frame */                                                      /* one 16 bit data/frame */

  mcbsp->SPCR = (1<<FRST) + (1<<GRST) + (1<<DLB) +
                                              (1<<XRST) + (1<<RRST) + (1<<RJUST);
  
  mcbsp->DXR = 0xAAAAAAAA;      
  temp1 = mcbsp->DRR;
  temp1 = mcbsp_read(ch); 
  mcbsp_write(0x55555555,ch);
  temp = mcbsp_read(ch);
 
  if (temp != 0x55555555)
  {
    temp = 1;
    return temp;
  }
    
  mcbsp_write(0xAAAAAAAA,ch);
  temp = mcbsp_read(ch);

    
  if (temp != 0xAAAAAAAA)
  {
    temp = 1;
    return temp;
  }
    
  return 0;
}  


/*-------------------------------------------------------------------------*/
/* mcbsp_write() - used for write to McBSP                                 */
/*-------------------------------------------------------------------------*/
void mcbsp_write(int out_data,unsigned int ch)
{
  int temp;
  volatile McBSP_REG * mcbsp;
  
  mcbsp = (volatile McBSP_REG *)McBSP_BASE_ADDR(ch);
  
  temp = mcbsp->SPCR & 0x20000;
  
  while ( temp == 0)
  {
    temp = mcbsp->SPCR & 0x20000;
  }
  
  mcbsp->DXR = out_data;
}

/*-------------------------------------------------------------------------*/
/* mcbsp_read() - used for read from McBSP                               */
/*-------------------------------------------------------------------------*/
int mcbsp_read(unsigned int ch)
{
  int temp;
  volatile McBSP_REG * mcbsp;
  
  mcbsp = (volatile McBSP_REG *)McBSP_BASE_ADDR(ch);
  
  temp = mcbsp->SPCR & 0x2;
  
  while ( temp == 0)
  {
    temp = mcbsp->SPCR & 0x2;
  }
  temp = mcbsp->DRR;
  
  return temp;
}

/*-------------------------------------------------------------------------*/
/* mcbsp_init() -                                		*/
/*-------------------------------------------------------------------------*/
void mcbsp_init(unsigned int ch, unsigned int ClkGdv)
{
	int wait;
	volatile McBSP_REG * mcbsp;
	
  	mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
  	
  	mcbsp->SPCR = 0;         /* reset serial port     */

/*********************************************************************************/
/*modefied by shiyan at 11/6/2003*/  	
	mcbsp->SRGR = ((1<<CLKSM) + (0<<FSGM) +
					(320<<FPER) + (ClkGdv<<CLKGDV));

//	mcbsp->SRGR = ((1<<CLKSM) + (0<<FSGM) +
//			((ELEMENT_SIZE*MSG_SIZE-1)<<FPER) + (ClkGdv<<CLKGDV));
/*********************************************************************************/
												
	mcbsp->PCR = ((1<<FSXM) + (1<<CLKXM)
					+(0<<FSRM) + (0<<CLKRM));
	
	mcbsp->XCR = ((1<<FIG) + (5<<WDLEN1) + 
				((MSG_SIZE-1)<<FRLEN1) + (0<<DATDLY)); 

	mcbsp->RCR = ((1<<FIG) + (5<<WDLEN1) + 
  				((MSG_SIZE-1)<<FRLEN1) + (0<<DATDLY));    
	
	mcbsp->MCR = 0;
	mcbsp->SPCR |= (1<<GRST);
	for (wait=0; wait<0x10; wait++);

	mcbsp->SPCR |= ((1<<FREE)+(1<<FRST));
}


/*-------------------------------------------------------------------------*/
/* mcbsp_test_init()                                                       */
/*-------------------------------------------------------------------------*/
void mcbsp_test_init(unsigned int ch) 
{
    volatile McBSP_REG * mcbsp;
	int wait;
    mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
    
    mcbsp->SPCR = 0;         /* reset serial port     */
    mcbsp->SRGR = (1<<CLKSM) + (0<<FSGM) + (128<<FPER) + (5<<CLKGDV);
    mcbsp->PCR = (1<<FSXM) + (1<<CLKXM);
    mcbsp->RCR = (1<<FIG) + (0<<DATDLY) + (5<<WDLEN1);    /* one 32 bit data/frame */
    mcbsp->XCR = (1<<FIG) + (0<<DATDLY) + (5<<WDLEN1);    /* one 32 bit data/frame */                                                      /* one 16 bit data/frame */
    
  	mcbsp->MCR = 0;
	mcbsp->SPCR |= (1<<GRST);
	for (wait=0; wait<0x10; wait++);

    mcbsp->SPCR |= (1<<FRST) + (1<<FREE) + (1<<XRST) + (1<<RRST); 
}    

/*-------------------------------------------------------------------------*/


void SPI_Slave_Init(unsigned int ch)
{
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

    volatile McBSP_REG * mcbsp;
    mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
    
  	mcbsp->SPCR = 0;         /* reset serial port     */

	mcbsp->SPCR |= (2<<CLKSTP);	//10: without delay
															//11: with delay
	mcbsp->SRGR = ((1<<CLKSM) + (0<<FSGM) + (1<<CLKGDV));

  	mcbsp->PCR = ((1<<FSXP) + (1<<CLKXP)+ (0<<CLKRP)) ; 	//CLKXP = 0: transmit data on the rising edge of CLKX
  											//	= 1: transmit data on the falling edge of CLK
    mcbsp->RCR = ((2<<WDLEN1) + (0<<DATDLY)); 

  	mcbsp->XCR = ((2<<WDLEN1) + (0<<DATDLY)); 

	mcbsp->SPCR |= (1<<GRST);// + (0<<DXENA));
  	asm("  nop 9 ");  //等待2个周期	          

}


void McBSP_Start(unsigned int ch)
{
   volatile McBSP_REG * mcbsp;
    mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
    mcbsp->SPCR |= (1 << XRST) +  (1 <<RRST); 
	asm("  nop 9 ");  //等待2个周期

}

void McBSP_Reset(unsigned int ch)
{
    volatile McBSP_REG * mcbsp;
    mcbsp = (volatile McBSP_REG *)(McBSP_BASE_ADDR(ch));
    
	mcbsp->SPCR &= ( 0xFFFFFFFF^((1<<XRST) + (1<<RRST)));

}
    
void evt_edmax_init(int src, int dst, int size, int ch)
{ 

	//Config the EDMA Channel 	EDMA Transfer Parameters
//	*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + OPT)= 0x41180002;
		//PRI ESIZE 2DS SUM 2DD DUM TCINT TCC  Reserved        LINK FS
		//010  00    0  01   0   00  1    1001 00000000000000  1    0

	*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + OPT)= ((0<<PRI) + (0<<ESIZE)+
									(1<<SUM) + (0<<DUM) + (0<<TCINT) + (ch<<TCC)+
									(1<<LINK) + (0<<FS));
	
	*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + SRC)= src;
	*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + CNT)= size;
	*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + DST)= dst;
	*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + IDX)= 0x00000000;
	*(unsigned volatile int *)(EVENT_PARAMS_ADDR(ch) + LNK)= ((0xffff& SPI_TRANS_PARAMS_RELOAD));
	
	
	*(unsigned volatile int *)(SPI_TRANS_PARAMS_RELOAD + OPT)= ((0<<PRI) + (0<<ESIZE)+
									(1<<SUM) + (0<<DUM) + (0<<TCINT) + (ch<<TCC)+
									(1<<LINK) + (0<<FS));
	
	*(unsigned volatile int *)(SPI_TRANS_PARAMS_RELOAD + SRC)= src;
	*(unsigned volatile int *)(SPI_TRANS_PARAMS_RELOAD + CNT)= size;
	*(unsigned volatile int *)(SPI_TRANS_PARAMS_RELOAD + DST)= dst;
	*(unsigned volatile int *)(SPI_TRANS_PARAMS_RELOAD + IDX)= 0x00000000;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -