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

📄 cnfdsp_nohost.c

📁 使用在dsp TI DSK6711中 很多controller 的例子
💻 C
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************************
* FILENAME
*   cnfdsp_nohost.c
*
* DESCRIPTION
*   DSK Confidence test - DSP Code - No Host
*
*  Rev 2.16   17 Jul  2000  Z.Zhang, T.J.Dillon
*
*----------------------------------------------------------------------
*  HISTORY
*  Rev 1.00  Created by Z.Zhang
*  Rev 1.10  Mods a) LEDS and CODEC parameter passing
*                 b) Removed FLASH checksum
*  Rev 1.20  Mods - Reorganized to be consistent with cnfDSP.c
*  Rev 1.30  Mods - Added board revision info
*  Rev 2.00  Mods - Updated for C6711 DSK
*  Rev 2.10  Mods - Updated for Larger SDRAMs
*  Rev 2.16  Mods - Added newer memory test for SDRAM      
*
*******************************************************************************/

#include <stdio.h>
#include <c6x.h>
#include "c6211dsk.h"
#include "cnfDSP_nohost.h"

short sin_table[] = {0, 23170>>2, 32767>>2, 23170>>2,0, -23170>>2, -32767>>2, -23170>>2}; 
int flag;
//static int exp_chksum,cmp_chksum;

/*-------------------------------------------------------------------------*/
/* main()                                                                  */
/*-------------------------------------------------------------------------*/

int main()
{
  int src,dst,size; /* Used for QDMA */
  int error;
  unsigned int io_port_values;
  unsigned int user_dip_settings;
  unsigned int pwb_assy_rev;
  int ext_mem_size;
  /* dsp and peripheral initialization */    
  CSR=0x100;	        	       /* disable all interrupts            */
  IER=1;                           /* disable all interrupts except NMI */
  ICR=0xffff;                      /* clear all pending interrupts      */

/*************************************************************************
* Standard 6211 DSK includes 2 MT48LC1M16A1-7 devices =>4MB SDRAM        *
*   16Mb (16-bit x 2 banks x 512K) parts = 2MB / part                    *
*   EMIF_SDCTRL=0x07227000                                               *
*   EMIF_SDEXT=0x54529                         Board Rev = 1             *
*------------------------------------------------------------------------*
* Standard 6711 DSK includes 2 MT48LC4M16A2-8 devices =>16MB SDRAM       *
*   64Mb (16-bit x 4 banks x 1M)   parts = 8MB / part                    *
*   EMIF_SDCTRL=0x57116000                                               *
*   EMIF_SDEXT=0x54529 (Hitachi 0x54509)       Board Rev = 2             *
*------------------------------------------------------------------------*
* Other 6711 DSK configurations are as follows:                          *
*   128Mb (16-bit x 4 banks x 2M)  parts = 16MB / part (=>32MB SDRAM)    *
*   EMIF_SDCTRL=0x53116000                                               *
*   EMIF_SDEXT=0x54529 (Hitachi 0x54509)       Board Rev = 3             *
*   ---------------------------------------------------------------------*
*   256Mb (16-bit x 4 banks x 4M)  parts = 32MB / part (=>64MB SDRAM)    *
*   EMIF_SDCTRL=0x63116000                                               *
*   EMIF_SDEXT=0x54529                         Board Rev = 4             *
*************************************************************************/

  *(unsigned volatile int *)EMIF_GCR = 0x3300; /* EMIF global control   */
  *(unsigned volatile int *)EMIF_CE0 = 0x30;   /* EMIF CE0control       */
  *(unsigned volatile int *)EMIF_CE1 = 0xffffff03; /* EMIF CE1 control, 8bit async */
  *(unsigned volatile int *)EMIF_SDCTRL = 0x07227000; /* EMIF SDRAM control     */
  *(unsigned volatile int *)EMIF_SDRP = 0x61a;       /* EMIF SDRM refresh period */
  *(unsigned volatile int *)EMIF_SDEXT = 0x54529; /* EMIF SDRAM extension    */

  printf("*TMS320C6211/6711 DSK Confidence Test - NoHost*\n");
 
  /*-----------------------------------------------------------------------*/
  /* Read DIP switches                                                     */
  /*-----------------------------------------------------------------------*/
  *(unsigned volatile int *)EMIF_CE1 = CE1_32;// EMIF CE1 control, 32bit async
  io_port_values=get_ioport();
  user_dip_settings=io_port_values&0x7000000;
  pwb_assy_rev=get_bdrev();   
  *(unsigned volatile int *)EMIF_CE1 = CE1_8;// EMIF CE1 control, 8bit async

  printf("\n USER_SW3=%d ",(user_dip_settings&0x4000000)>>26);
  printf(" USER_SW2=%d ",(user_dip_settings&0x2000000)>>25);
  printf(" USER_SW1=%d ",(user_dip_settings&0x1000000)>>24);
  printf(" Board Rev=%d\n\n",pwb_assy_rev);
 
  /*-----------------------------------------------------------------------*/
  /* Modify SDRAM parameter value(s) according to board revision           */
  /*-----------------------------------------------------------------------*/
  if(pwb_assy_rev ==1)                                 
  {
    *(unsigned volatile int *)EMIF_SDCTRL = 0x07227000;
    ext_mem_size=EXTERNAL_MEM_SIZE;
  }
  else if(pwb_assy_rev ==2)                                 
  {
    *(unsigned volatile int *)EMIF_SDCTRL = 0x57116000;
    ext_mem_size=4*EXTERNAL_MEM_SIZE;
  }
  else if(pwb_assy_rev ==3)                                 
  {
    *(unsigned volatile int *)EMIF_SDCTRL = 0x53116000;
    ext_mem_size=8*EXTERNAL_MEM_SIZE;
  }
  else if(pwb_assy_rev ==4)                                 
  {
    *(unsigned volatile int *)EMIF_SDCTRL = 0x63116000;
    ext_mem_size=16*EXTERNAL_MEM_SIZE;
  }
  else /* if(pwb_assy_rev ==0) */
  {
    *(unsigned volatile int *)EMIF_SDCTRL = 0x07126000;
    ext_mem_size=EXTERNAL_MEM_SIZE;
  }
	 
        printf("ISRAM TEST\n");
 
        /*-----------------------------------------------------------------*/
        /* Attempt to write 0x55555555 to numerous locations and read same */
        /*-----------------------------------------------------------------*/
 
        printf(" Write and Read 5's .....\n");
 
        if((error=mem_test(ALL_5,INTERNAL_MEM_START,INTERNAL_MEM_SIZE)) != 0)
        {
          printf(" Fail.....\n");
          exit(0);
        }
        else  printf(" Success.....\n");
          

        /*-----------------------------------------------------------------*/
        /* Attempt to write 0xAAAAAAAA to numerous locations and read same */
        /*-----------------------------------------------------------------*/
 
        printf(" Write and Read A's .....\n");
 
        if((error=mem_test(ALL_A,INTERNAL_MEM_START,INTERNAL_MEM_SIZE)) != 0)
        {
          printf(" Fail.....\n");
          exit(0);
        }
        else  printf(" Success.....\n");

      /*-------------------------------------------------------------------*/
      /* Run the External SDRAM test and return information if(error)      */
      /*-------------------------------------------------------------------*/
       
        printf("SDRAM TEST\n");
 
        /*-----------------------------------------------------------------*/
        /* Attempt to write 0x5A5A5A5A to all even locations and read same */
        /* Attempt to write 0xA5A5A5A5 to all odd locations and read same  */
        /*-----------------------------------------------------------------*/
 
        printf(" Write and Read 5A's (even) A5's (odd).....\n");
 
        if((error=mem_test_alt(ALT_5A,EXTERNAL_MEM_START,ext_mem_size)) != 0)
        {
          printf(" Fail.....\n");
          exit(0);
        }
        else  printf(" Success.....\n");
           
        /*-----------------------------------------------------------------*/
        /* Attempt to write 0xA5A5A5A5 to all even locations and read same */
        /* Attempt to write 0x5A5A5A5A to all odd locations and read same  */
        /*-----------------------------------------------------------------*/
 
        printf(" Write and Read A5's (even) 5A's (odd)......\n");
 
        if((error=mem_test_alt(ALT_A5,EXTERNAL_MEM_START,ext_mem_size)) != 0)
        {
          printf(" Fail.....\n");
          exit(0);
        }
        else  printf(" Success.....\n");
#if 0
      /*-------------------------------------------------------------------*/
      /* Run the External FLASH test and return information if(error)      */
      /*-------------------------------------------------------------------*/
      
        printf("FLASH TEST\n");
 
 
        /*-----------------------------------------------------------------*/
        /* Attempt to write 0x55555555 to numerous locations and read same */
        /*-----------------------------------------------------------------*/
 
        printf(" Write and Read 5's.....\n");
 
        if((error=flash_test(0x55,POST_END,FLASH_WRITE_SIZE)) != 0)
        {
          printf(" Fail.....\n");
          exit(0);
        }
        else  printf(" Success.....\n");


        /*-----------------------------------------------------------------*/
        /* Attempt to write 0xAAAAAAAA to numerous locations and read same */
        /*-----------------------------------------------------------------*/
 
        printf(" Write and Read A's......\n");
 
        if((error=flash_test(0xAA,POST_END,FLASH_WRITE_SIZE)) != 0)
        {
          printf(" Fail.....\n");
          exit(0);
        }
        else  printf(" Success.....\n");
#endif 
       

      /*-------------------------------------------------------------------*/
      /* Run the MCBSP test and return information if(error)               */
      /*-------------------------------------------------------------------*/
      
        printf("MCBSP TEST\n");
 
        printf(" Digital Loopback Mode.....\n");
 
        if((error=mcbsp0_test()) != 0)
        {
          printf(" Fail.....\n");
          exit(0);
        }
        else  printf(" Success.....\n");

      /*-------------------------------------------------------------------*/
      /* Run the TIMER test and return status                              */
      /*-------------------------------------------------------------------*/
      
        printf("TIMER TEST\n");
 
        ICR = IFR | 0x4000;
        IER |= 0x4002;             // enable int 14 (timer0) 
        CSR |= 1;
        flag = 0;
        timer0_init();
        while (flag == 0);        // wait int change flag to 1
        timer0_init();
        while (flag == 1);        // wait int change flag to 0
        IER = 0;
        printf(" Success.....\n");

        *(unsigned volatile int *)EMIF_CE1 = CE1_32;// EMIF CE1 control, 32bit async
      /*-------------------------------------------------------------------*/
      /* Run the QDMA test and return information if(error)                */
      /*-------------------------------------------------------------------*/
       
        printf("QDMA TEST\n");
 
        ICR = IFR | 0x100;
        IER |= 0x102;             // enable int 8 (qdma)
        CSR |= 1;
        flag = 0;
        src = 0x80000000;
        dst = 0xf000;
        size = 500;
        qdma_start(src,dst,size);
        while (flag == 0);        // wait int change flag to 1
        error = qdma_check(src,dst,size);
        if(error != 0)
        {
          printf(" Fail.....\n");
          exit(0);
        }
        else  printf(" Success.....\n");

      /*-------------------------------------------------------------------*/
      /* Run the LEDS test and return information for debug                */
      /*-------------------------------------------------------------------*/
      
        printf("LED TEST\n");
 
        led_blink(5,1000,0);

        
        // reset CE1 to 8 bit async interface
        *(unsigned volatile int *)EMIF_CE1 = CE1_8;// EMIF CE1 control, 8bit async
       

      /*-------------------------------------------------------------------*/
      /* Run the CODEC test and return status                              */
      /*-------------------------------------------------------------------*/
       
        printf("CODEC TEST\n");
 
        mcbsp0_init();
 
        printf(" Play 1KHz tone......\n");
 
        if((error=play_codec(2000, 1)) != 0)
        {
          printf(" Fail.....\n");
          exit(0);
        }
        else  printf(" Success.....\n");

        mcbsp0_init();
 
        printf(" Play CD/MIC input.....\n");
 
        if((error=play_codec(10000, 0)) != 0)
        {
          printf(" Fail.....\n");
          exit(0);
        }
        else  printf(" Success.....\n");

   
  /*-----------------------------------------------------------------------*/
  /* Wrap it up                                                            */
  /*-----------------------------------------------------------------------*/
 
  printf("\nThat's All Folks!\n");
 

  return(0);
}

/*-------------------------------------------------------------------------*/
/* mem_test() - used to test internal SRAM and external SDRAM              */
/*-------------------------------------------------------------------------*/
int mem_test (int pattern, int start_address, int size_in_word )
{
  int i;
  int temp;
  int error = 0;
  int *mem_ptr = (int *)start_address;
  
  for(i=0;i<size_in_word;i++)    /* write pattern to the memory */
  {
     *mem_ptr++ = pattern;
  }

  mem_ptr = (int *)start_address;
  
  for(i=0;i<size_in_word;i++)    /* read data back from memory  */
  {
    temp = *mem_ptr++;

#if SPECIAL==ENDPNT
    if(i==0)
      printf(" Read=0x%08x at Address=0x%08x\n",temp,(mem_ptr-1));
    else if((i==size_in_word-1))
      printf("*Read=0x%08x at Address=0x%08x\n",temp,(mem_ptr-1));
#endif      

#if SPECIAL==INTERV
    if(!(i%(1024*256)))
      printf(" Read=0x%08x at Address=0x%08x\n",temp,(mem_ptr-1));
#endif      

    if ( temp != pattern )
    {
      error++;
#if SPECIAL==MEMTST
      if(error<25)
        printf(" Read=0x%08x at Address=0x%08x\n",temp,(mem_ptr-1));
#endif
    }                                                                 
  } 
  
  return error;
}

/*-------------------------------------------------------------------------*/
/* mem_test_alt() - used to test internal SRAM and external SDRAM          */
/*-------------------------------------------------------------------------*/
int mem_test_alt (int pattern, int start_address, int size_in_word )
{
  int i;
  int temp_read,temp_expected;
  int error = 0;
  int *mem_ptr = (int *)start_address;
  
  for(i=0;i<size_in_word;i++)    /* write pattern to the memory */
  {
    if(i%2)
     *mem_ptr++ = ~pattern;      /* flip alternating bits       */
    else
     *mem_ptr++ = pattern;
  }

  mem_ptr = (int *)start_address;
  
  for(i=0;i<size_in_word;i++)    /* read data back from memory  */
  {
    temp_read = *mem_ptr++;

#if SPECIAL==ENDPNT
    if(i==0)
      printf(" Read=0x%08x at Address=0x%08x\n",temp_read,(mem_ptr-1));
    else if((i==size_in_word-1))
      printf("*Read=0x%08x at Address=0x%08x\n",temp_read,(mem_ptr-1));
#endif      

#if SPECIAL==INTERV
    if(!(i%(1024*256)))
      printf(" Read=0x%08x at Address=0x%08x\n",temp_read,(mem_ptr-1));
#endif      

    if(i%2)
    {
     temp_expected = ~pattern;   /* flip alternating bits       */
    }
    else
    {
     temp_expected = pattern;
    }
    
    if ( temp_read != temp_expected )
    {
      error++;
#if SPECIAL==MEMTST
      if(error<25)
        printf(" Read=0x%08x at Address=0x%08x\n",temp_read,(mem_ptr-1));
#endif
    }                                                                 
  } 
  
  return error;
}

/*-------------------------------------------------------------------------*/
/* flash_page_prog() - used to program FLASH                               */
/*-------------------------------------------------------------------------*/
int flash_page_prog( char pattern, char *start_address, int page_size)
{
  int i;
  char temp;
  char *flash_ptr = start_address;

  *(char *)FLASH_ADR1 = FLASH_KEY1;
  *(char *)FLASH_ADR2 = FLASH_KEY2;
  *(char *)FLASH_ADR1 = FLASH_KEY3;
  
  for (i=0;i<page_size;i++) 
    *flash_ptr++ = pattern;
  

⌨️ 快捷键说明

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