📄 cnfdsp_nohost.c
字号:
/*******************************************************************************
* 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 + -