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

📄 cnfdsp_nohost.c

📁 使用在dsp TI DSK6711中 很多controller 的例子
💻 C
📖 第 1 页 / 共 2 页
字号:
  temp = *--flash_ptr;
  
  while ( temp != pattern)
  {
    temp = *flash_ptr;
  }
  
  return 0;
}
    
/*-------------------------------------------------------------------------*/
/* flash_test() - used to test external FLASH                              */
/*-------------------------------------------------------------------------*/
int flash_test( char pattern, int start_address, int size_in_byte)
{
  int i = 0;
  int error = 0;
  char *flash_ptr = (char *)start_address;
  
  i=0;
  
  while(i < size_in_byte)   /* write to flash  */
  {
    flash_page_prog ( pattern, flash_ptr, 128);
    i = i+128;
    flash_ptr = flash_ptr + 128;
  }

  flash_ptr = (char *)start_address;
  
  for(i=0;i<size_in_byte;i++)
  {
    if( *flash_ptr++ != pattern)
    {
      error++;
#if SPECIAL==FLATST
      if(error<25)
        printf(" Read=0x%08x at Address=0x%08x\n",*flash_ptr,(flash_ptr-1));
#endif
    }
  } 
  
  return error;
}

/*-------------------------------------------------------------------------*/
/* flash_checksum() - used to test checksum in POST on external FLASH      */
/*-------------------------------------------------------------------------*/
/*int flash_checksum (int start_address, int size_in_byte)
{
  int i = 0, error = 0;
  int checksum,*checksum_ptr;
  char *flash_ptr = (char *)start_address;
  int temp;
  
  i=0;     
  checksum = 0;
  
  while(i < size_in_byte-4)
  {  
    temp = *flash_ptr++;
    temp &= 0xff;
    checksum = checksum + temp;
    i++;
  }
   
  checksum_ptr = (int *)flash_ptr;

  exp_chksum=*checksum_ptr;
  cmp_chksum=checksum;

  if( exp_chksum != cmp_chksum) error = 1;
//  if( *checksum_ptr != checksum) error = 1;
  
  return error;
}
*/

/*-------------------------------------------------------------------------*/
/* mcbsp0_init() - used to initialize McBSP0                               */
/*-------------------------------------------------------------------------*/
void mcbsp0_init()
{
	volatile unsigned int temp =0;
  /* set up McBSP0                                                         */
  *(unsigned volatile int *)McBSP0_SPCR = 0;			/* reset serial port     */
  *(unsigned volatile int *)McBSP0_PCR = 0;       /* set pin control reg.  */
  *(unsigned volatile int *)McBSP0_RCR = 0x10040; /* set rx control reg.   */
                                                  /* one 16 bit data/frame */
  *(unsigned volatile int *)McBSP0_XCR = 0x10040; /* set tx control reg.   */
                                                  /* one 16 bit data/frame */
  *(unsigned volatile int *)McBSP0_DXR = 0;
  *(unsigned volatile int *)McBSP0_SPCR = 0x12001;/*  setup SP control reg */
}

/*-------------------------------------------------------------------------*/
/* mcbsp0_test() - used to test McBSP0                                     */
/*-------------------------------------------------------------------------*/
int mcbsp0_test()
{
	volatile unsigned int temp =0,temp1;
  /* set up McBSP0 */
  *(unsigned volatile int *)McBSP0_SPCR = 0;         /* reset serial port     */
  *(unsigned volatile int *)McBSP0_SRGR = 0x2014004A;/* set baud rate to 1MHz */
  *(unsigned volatile int *)McBSP0_PCR = 0xA00;      /* set pin control reg.  */
  *(unsigned volatile int *)McBSP0_RCR = 0x10040;    /* set rx control reg.   */
                                                     /* one 16 bit data/frame */
  *(unsigned volatile int *)McBSP0_XCR = 0x10040;    /* set tx control reg.   */
                                                     /* one 16 bit data/frame */
  *(unsigned volatile int *)McBSP0_SPCR = 0xC1A001;  /* setup SP control reg. */
  *(unsigned volatile int *)McBSP0_DXR = 0xAAAA;
    
  temp1 = *(unsigned volatile int *)McBSP0_DRR;
  temp1 = mcbsp0_read(); 
  mcbsp0_write(0x5555);
  temp = mcbsp0_read();
  temp &= 0xffff;

  if (temp != 0x5555)
  {
    temp = 1;
    return temp;
  }
    
  mcbsp0_write(0xaaaa);
  temp = mcbsp0_read();
  temp &= 0xffff;
    
  if (temp != 0xaaaa)
  {
    temp = 1;
    return temp;
  }
    
  return 0;
}

/*-------------------------------------------------------------------------*/
/* mcbsp0_write() - used for write to McBSP0                               */
/*-------------------------------------------------------------------------*/
void mcbsp0_write(int out_data)
{
  int temp;

  temp = *(unsigned volatile int *)McBSP0_SPCR & 0x20000;
  
  while ( temp == 0)
  {
    temp = *(unsigned volatile int *)McBSP0_SPCR & 0x20000;
  }
  
  *(unsigned volatile int *)McBSP0_DXR = out_data;
}

/*-------------------------------------------------------------------------*/
/* mcbsp0_read() - used for read from McBSP0                               */
/*-------------------------------------------------------------------------*/
int mcbsp0_read()
{
  int temp;
  
  temp = *(unsigned volatile int *)McBSP0_SPCR & 0x2;
  
  while ( temp == 0)
  {
    temp = *(unsigned volatile int *)McBSP0_SPCR & 0x2;
  }
  temp = *(unsigned volatile int *)McBSP0_DRR;
  
  return temp;
}

/*-------------------------------------------------------------------------*/
/* qdma_start() - used to start QDMA                                       */
/*-------------------------------------------------------------------------*/
void qdma_start(int src, int dst, int size)
{ 
  *(unsigned volatile int *)CIER = 0x100;
  *(unsigned volatile int *)QDMA_SRC = src;
  *(unsigned volatile int *)QDMA_DST = dst;
  *(unsigned volatile int *)QDMA_IDX = 0x00000000; 
  *(unsigned volatile int *)QDMA_OPT = 0x41380001;
  *(unsigned volatile int *)QDMA_S_CNT = size;
}
  
/*-------------------------------------------------------------------------*/
/* qdma_check() - used to test QDMA operation                              */
/*-------------------------------------------------------------------------*/
int qdma_check( int src, int dst, int size)
{
  int i,error = 0;
  int *src_ptr = (int *)src;
  int *dst_ptr = (int *)dst;

  for (i=0;i<size;i++)
  {
    if (*src_ptr++ != *dst_ptr++) error++;
  }
  
  return error;
}

/*-------------------------------------------------------------------------*/
/* qdma_isr() - interrupt service routine for qdma                         */
/*-------------------------------------------------------------------------*/
interrupt void qdma_isr()
{
	*(unsigned volatile int *)CIPR |= 0x100;
  flag = 1;
}

/*-------------------------------------------------------------------------*/
/* led_blink() - used to blink all the LEDS on the DSK                     */
/*-------------------------------------------------------------------------*/
void led_blink(int count, int ms_period, unsigned int leds_to_light)
{
  int i;
  
  for (i=0;i<count;i++)
  {
    *(unsigned volatile int *)IO_PORT = 0x7000000;/* turn off three leds    */
    delay_msec(ms_period/2);
    *(unsigned volatile int *)IO_PORT = leds_to_light;/* turn on user leds */
    delay_msec(ms_period/2);
  }
  *(unsigned volatile int *)IO_PORT = 0x7000000;  /* turn off three leds    */
}

/*-------------------------------------------------------------------------*/
/* get_ioport() - used to read state of ioport                             */
/*-------------------------------------------------------------------------*/
unsigned int get_ioport(void)
{
  return(*(unsigned volatile int *)IO_PORT);
}

/*-------------------------------------------------------------------------*/
/* get_bdrev() - used to read board revision bits                          */
/*-------------------------------------------------------------------------*/
unsigned int get_bdrev(void)
{
  return(((*(unsigned volatile int *)IO_PORT)>>29)&0x7);
}

/*-------------------------------------------------------------------------*/
/* delay_msec() - used to delay DSP by user specified time in msec         */
/*-------------------------------------------------------------------------*/
void delay_msec(short msec)
{
/* assume 150 MHz CPU timer period = 4/150 MHz */
  int timer_limit = (msec*9375)<<2;
  int time_start;

  timer0_start();
  time_start = timer0_read();
  while ((timer0_read()-time_start) < timer_limit);

}

/*-------------------------------------------------------------------------*/
/* timer0_read() - used to read TIMER0 count                               */
/*-------------------------------------------------------------------------*/
int timer0_read()
{
	int i;
	i = *(unsigned volatile int *)TIMER0_COUNT;
	return i;
}

/*-------------------------------------------------------------------------*/
/* timer0_start() - used to start TIMER0                                   */
/*-------------------------------------------------------------------------*/
void timer0_start()
{
	*(unsigned volatile int *)TIMER0_CTRL &= 0xff3f;    /* hold the timer    */
	*(unsigned volatile int *)TIMER0_CTRL |= 0x200;     /* use CPU CLK/4     */   
	*(unsigned volatile int *)TIMER0_PRD  |= 0xffffffff;/* set for 32 bit cnt*/
	*(unsigned volatile int *)TIMER0_CTRL |= 0xC0;      /* start the timer   */
}

/*-------------------------------------------------------------------------*/
/* timer0_init() - used to initialize TIMER0                               */
/*-------------------------------------------------------------------------*/
void timer0_init()
{
	*(unsigned volatile int *)TIMER0_CTRL &= 0xff3f;/* hold the timer        */
	*(unsigned volatile int *)TIMER0_CTRL |= 0x200; /* use CPU CLK/4         */   
	*(unsigned volatile int *)TIMER0_PRD   = 0x200; /* set for a short period*/
	*(unsigned volatile int *)TIMER0_CTRL |= 0x3C0; /* start the timer       */
                                                  /* enable timer0 int     */
}

/*-------------------------------------------------------------------------*/
/* timer0_isr() - interrupt service routine for TIMER0                     */
/*-------------------------------------------------------------------------*/
interrupt void timer0_isr()
{
	*(unsigned volatile int *)TIMER0_CTRL |= 0;  /* stop timer0     */   
  if(flag == 0) 
    flag = 1;                      /* toggle the flag */
  else 
    flag = 0;
}

/*-------------------------------------------------------------------------*/
/* play_codec() - used to test codec operation                             */
/*-------------------------------------------------------------------------*/
int play_codec(int number, int tone_playbk)
{
  int i,j;
  int temp;

// set up control register 3 for S/W reset
  mcbsp0_read();
  mcbsp0_write(0); 
  mcbsp0_read();
  mcbsp0_write(0);
  mcbsp0_read();
  mcbsp0_write(0);
  mcbsp0_read();
  mcbsp0_write(1);
  mcbsp0_read();
  mcbsp0_write(0x0386);
  mcbsp0_read();
  mcbsp0_write(0);
  mcbsp0_read();
         
// set up control register 3 for mic input
  
  mcbsp0_write(0);
  mcbsp0_read();
  mcbsp0_write(0);
  mcbsp0_read();
  mcbsp0_write(1);
  mcbsp0_read();
  mcbsp0_write(0x0306);
  mcbsp0_read();
  mcbsp0_write(0);
  mcbsp0_read();
         
  mcbsp0_write(0);
  mcbsp0_read();
  mcbsp0_write(1);
  mcbsp0_read();
  mcbsp0_write(0x2330);
  temp = mcbsp0_read();
  mcbsp0_write(0x0);
  mcbsp0_read();
  mcbsp0_write(0x0);
  mcbsp0_read();
  if((temp & 0xff) != 0x06) 
  {
#if PRINT
    printf ("  Error in setting up control register 3.\n");
#endif
    return(3);
  }

//set up control register 4
  mcbsp0_write(0);
  mcbsp0_read();
  mcbsp0_write(0);
  mcbsp0_read();
  mcbsp0_write(1);
  mcbsp0_read();
  mcbsp0_write(0x0400);
  mcbsp0_read();
  mcbsp0_write(0);
  mcbsp0_read();

  mcbsp0_write(0);
  mcbsp0_read();
  mcbsp0_write(1);
  mcbsp0_read();
  mcbsp0_write(0x2430);
  temp = mcbsp0_read();
  mcbsp0_write(0x0);
  mcbsp0_read();
  mcbsp0_write(0x0);
  mcbsp0_read();
  if((temp & 0xff) != 0x00) 
  {
#if PRINT
    printf ("  Error in setting up control register 4.\n");
#endif
    return(4);
  }
   
// set up control register 5
  mcbsp0_write(0);
  mcbsp0_read();
  mcbsp0_write(0);
  mcbsp0_read();
  mcbsp0_write(1);
  mcbsp0_read();
  mcbsp0_write(0x0502);
  mcbsp0_read();
  mcbsp0_write(0);
  mcbsp0_read();

  mcbsp0_write(0);
  mcbsp0_read();
  mcbsp0_write(1);
  mcbsp0_read();
  mcbsp0_write(0x2530);
  temp = mcbsp0_read();
  mcbsp0_write(0x0);
  mcbsp0_read();
  mcbsp0_write(0x0);
  mcbsp0_read();
  if((temp & 0xfe) != 0x2) 
  {
#if PRINT
    printf ("  Error in setting up control register 5.\n");
#endif
    return(5);
  }

  if(tone_playbk)
  {
    for (i=0; i< 8; i++)
    {
      sin_table[i] = sin_table[i] & 0xfffe;
    }

    for (i=0;i<number;i++)
    {
      for (j=0;j<8;j++)
      {
        mcbsp0_write((int)sin_table[j]);
      }
    }
  }
  else
  {
    for (i=0;i<number;i++)
    {
      temp = mcbsp0_read();
      temp = temp & 0xfffe;
      mcbsp0_write(temp);
    }
  }
  return(0);
}


⌨️ 快捷键说明

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