/*  (revision 2.15.05) + C6711 changes
 * 
 * This GEL file (ConfTest.gel) is loaded on the command line 
 * of Code Composer. It loads the CnfDSP.out file and sets up 
 * hotmenu items to run the DSP code without the Host program.
 * Also, it provides example code on how to reset the C6x DSP 
 * and initialize the External Memory Interface.
 * 
 */

/*
 * The StartUp() function is called every time you start
 * Code Composer.  You can customize this function to
 * initialize wait states in the EMIF or to perform 
 * other initialization.
 */
StartUp()
{
    setup_memory_map();
    init_emif();
    GEL_Load("c:\\ti\\c6000\\dsk\\conftest\\CnfDSP.out");
}

/*
 * Menuitem creates a selection available beneath the GEL
 * menu selection in Code Composer Studio.
 */
menuitem "Resets";

hotmenu Reset_BreakPts_and_EMIF()
{
  GEL_BreakPtReset();
  GEL_Reset();
  init_emif();
}

hotmenu Halt_Proc()
{
    GEL_Halt();
}

menuitem "Memory Map";

hotmenu SetMemoryMap()
{
    setup_memory_map();
}

hotmenu ClearMemoryMap()
{
    clear_memory_map();
}

menuitem "Confidence Test";

hotmenu Handshake()
{
    do_HandShake();
    GEL_OpenWindow("CnfTst Errors",0,10);
}

hotmenu ISRAM()
{
    CheckResults();
    do_ISRAM();
}

hotmenu SDRAM()
{
    CheckResults();
    do_SDRAM();
}

hotmenu FLASH()
{
    CheckResults();
    do_FLASH();
}

hotmenu MCBSP()
{
    CheckResults();
    do_MCBSP();
}

hotmenu TIMER()
{
    CheckResults();
    do_TIMER();
}

hotmenu QDMA()
{
    CheckResults();
    do_QDMA();
}

hotmenu LEDS()
{
    CheckResults();
    do_LEDS();
}

hotmenu CODEC()
{
    CheckResults();
    do_CODEC();
}

hotmenu PGMEM()
{
    CheckResults();
    do_PGMEM();
}

hotmenu Quit()
{
    CheckResults();
    do_QUIT();
}

menuitem "User Interface"

slider Blinks(0, 10 ,1, 1, numblinks)
{
	handShakingBuffer[0] = numblinks;
}

slider Period(100, 1000, 1, 1, tperiod)
{
	handShakingBuffer[1] = tperiod;
}

dialog Program_SDRAM(Value "Value to Write",Offset "Address Offset",NumTimes "Number of Words")
{
	handShakingBuffer[0] = Value;
	handShakingBuffer[1] = Offset;
	handShakingBuffer[2] = NumTimes;
}

menuitem "HandShakingBuffer Check";

hotmenu Command_Word()
{
    ReadCommand();
}

hotmenu Return_Word()
{
    CheckResults();
}

hotmenu Status_Word()
{
    ReadStatus();
}

hotmenu Memory_View_HSB()
{
    GEL_OpenWindow("HandShakingBuffer",0,10);
	ShowHSB();
}

dialog HandShakingBuffer(Word0 "handShakingBuffer[0] = IDPARM1 Word",
                         Word1 "handShakingBuffer[1] = IDPARM2 Word",
                         Word2 "handShakingBuffer[2] = IDPARM3 Word",
                         Word3 "handShakingBuffer[3] = COMMAND Word",
                         Word4 "handShakingBuffer[4] = STATUS Word",
                         Word5 "handShakingBuffer[5] = RETURN Word")
{
	handShakingBuffer[0] = Word0;
	handShakingBuffer[1] = Word1;
	handShakingBuffer[2] = Word2;       
	handShakingBuffer[3] = Word3;
	handShakingBuffer[4] = Word4;
	handShakingBuffer[5] = Word5;
}

/*
 * Initialize the EMIF
 */
init_emif()
{
  #define EMIF_GCTL         0x01800000
  #define EMIF_CE1          0x01800004
  #define EMIF_CE0          0x01800008
  #define EMIF_CE2          0x01800010
  #define EMIF_CE3          0x01800014
  #define EMIF_SDRAMCTL     0x01800018
  #define EMIF_SDRAMTIMING  0x0180001C
  #define EMIF_SDRAMEXT     0x01800020
  
/*************************************************************************
* 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             *
*************************************************************************/

  *(int *)EMIF_GCTL = 0x00003040;/* EMIF global control register         */
  *(int *)EMIF_CE1 = 0xFFFFFF23; /* CE1 - 32-bit asynch access after boot*/
  *(int *)EMIF_CE0 = 0xFFFFFF30; /* CE0 - SDRAM                          */
  *(int *)EMIF_CE2 = 0xFFFFFF23; /* CE2 - 32-bit asynch on daughterboard */
  *(int *)EMIF_CE3 = 0xFFFFFF23; /* CE3 - 32-bit asynch on daughterboard */
  *(int *)EMIF_SDRAMCTL = 0x07227000; /* SDRAM control register (100 MHz)*/
  *(int *)EMIF_SDRAMTIMING = 0x0000061A; /* SDRAM Timing register        */
  *(int *)EMIF_SDRAMEXT = 0x00054529; /* SDRAM Extension register        */
}

/*
 * Clear the memory map settings
 */
clear_memory_map()
{
    GEL_MapOff();
}

/*
 * Setup the memory map for the c6211 DSK
 */
setup_memory_map()
{
    /* enable the memory map feature in Code Composer Studio */
    GEL_MapOn();            

    /* start out by resetting all memory to unreadable and unwritable */
    GEL_MapReset();         

    /* the syntax for GEL_MapAdd(address, page, length, readable, writeable)
     *            page:      Program Memory = 0, Data Memory = 1, I/O Space = 2
     *            readable:  Not Readable = 0,  Readable = 1
     *            writeable: Not Writeable = 0, Writeable = 1
    */

    /* C6211 DSK-specific memory mapping                                        */
    /*--------------------------------------------------------------------------*/
    GEL_MapAdd(0x00000000,0,0x00010000,1,1); /* Internal L2 memory              */
    GEL_MapAdd(0x01800000,0,0x00000024,1,1); /* EMIF control registers          */
    GEL_MapAdd(0x01840000,0,0x00000004,1,1); /* L2 cache configuration register */
    GEL_MapAdd(0x01844000,0,0x00000038,1,1); /* L2 control registers            */
    GEL_MapAdd(0x01845000,0,0x00000008,1,1); /* L2 flush/clean registers        */
    GEL_MapAdd(0x01848200,0,0x00000010,1,1); /* CE0 memory attribute registers  */
    GEL_MapAdd(0x01848240,0,0x00000010,1,1); /* CE1 memory attribute registers  */
    GEL_MapAdd(0x01848280,0,0x00000010,1,1); /* CE2 memory attribute registers  */
    GEL_MapAdd(0x018482c0,0,0x00000010,1,1); /* CE3 memory attribute registers  */
    GEL_MapAdd(0x01880000,0,0x00000004,1,1); /* HPI registers                   */
    GEL_MapAdd(0x018c0000,0,0x00000028,1,1); /* McBSP0 registers                */
    GEL_MapAdd(0x01900000,0,0x00000028,1,1); /* McBSP1 registers                */
    GEL_MapAdd(0x01940000,0,0x0000000c,1,1); /* Timer0 registers                */
    GEL_MapAdd(0x01980000,0,0x0000000c,1,1); /* Timer1 registers                */
    GEL_MapAdd(0x019c0000,0,0x0000000c,1,1); /* Interrupt selector registers    */
    GEL_MapAdd(0x01a00000,0,0x00000800,1,1); /* EDMA parameter RAM              */
    GEL_MapAdd(0x01a0ffe0,0,0x00000020,1,1); /* EDMA control registers          */
    GEL_MapAdd(0x02000000,0,0x00000014,0,1); /* QDMA registers                  */
    GEL_MapAdd(0x02000020,0,0x00000014,0,1); /* QDMA pseudo-registers           */
    GEL_MapAdd(0x30000000,0,0x04000000,1,1); /* McBSP0 data                     */
    GEL_MapAdd(0x34000000,0,0x04000000,1,1); /* McBSP1 data                     */
    GEL_MapAdd(0x80000000,0,0x10000000,1,1); /* CE0 - SDRAM                     */
    GEL_MapAdd(0x90000000,0,0x00200000,1,1); /* CE1 - 8-bit ROM                 */
    GEL_MapAdd(0x90080000,0,0x00000004,1,1); /* 8-bit I/O port LED              */
    GEL_MapAdd(0xA0000000,0,0x10000000,1,1); /* CE2 - Daughtercard              */
}

/* Confidence Test Commands */
#define ISRAM 0x1000
#define SDRAM 0x2000
#define FLASH 0x3000
#define MCBSP 0x4000
#define TIMER 0x5000
#define QDMA  0x6000
#define LEDS  0x7000
#define CODEC 0x8000
#define PGMEM 0xA000
/* Confidence Test Status */
#define HOST_RECEIVE_HAND_SHAKING_INFO 0x55555555
#define HOST_STATUS_INPUT_READY	       0x77777777
#define HOST_STATUS_END_PROCESSING	   0xFFFFFFFF
#define DSP_STATUS_OUTPUT_READY		   0x66666666
#define DSP_PROCESSING_COMMAND		   0x88888888
/*Confidence Test Return Codes */
#define HANDSHAKEOK	0xCCCCCCCC
#define ISRAM_OK	0x10000000
#define ISRAM_ERR55 0x10005555
#define ISRAM_ERRAA 0x1000AAAA
#define ISRAM_ERROR 0x1000FFFF
#define SDRAM_OK  	0x20000000
#define SDRAM_ERR55 0x20005555
#define SDRAM_ERRAA 0x2000AAAA
#define SDRAM_ERROR 0x2000FFFF
#define FLASH_OK  	0x30000000
#define FLASH_ERRCK 0x30003333
#define FLASH_ERR55 0x30005555
#define FLASH_ERR77 0x30007777
#define FLASH_ERRAA 0x3000AAAA
#define FLASH_ERRBB 0x3000BBBB
#define FLASH_ERROR 0x3000FFFF
#define MCBSP_OK  	0x40000000
#define MCBSP_ERROR 0x4000FFFF
#define TIMER_OK  	0x50000000
#define TIMER_ERROR 0x5000FFFF
#define QDMA_OK     0x60000000
#define QDMA_ERROR  0x6000FFFF
#define LEDS_OK     0x70000000
#define LEDS_ERROR  0x7000FFFF
#define CODEC_OK    0x80000000
#define CODEC_ERRTN 0x80005555
#define CODEC_ERRCD 0x8000AAAA
#define CODEC_ERROR 0x8000FFFF
#define PGMEM_OK    0xA0000000
#define PGMEM_ERROR 0xA000FFFF
#define TEST_DISABLED 0xFF00FFFF
#define DEFAULT_ERROR 0xF000FFFF
/* Confidence Test HandShakingBuffer  */
#define HSB_IDPARM1      0x00000200
#define HSB_IDPARM2      0x00000204
#define HSB_IDPARM3      0x00000208
#define HSB_COMMAND      0x0000020C
#define HSB_STATUS       0x00000210
#define HSB_RETURN       0x00000214

#define IO_PORT 0x90080000
#define CE1_32  0xFFFFFF23
#define CE1_8   0xFFFFFF03

/* Turns on/off LEDs */
TurnOnUserLED1()
{
	GEL_MemoryFill(EMIF_CE1,2,0x1,CE1_32);
	GEL_MemoryFill(IO_PORT,2,0x1,0xe000000);      
	GEL_MemoryFill(EMIF_CE1,2,0x1,CE1_8);           
}
TurnOnUserLED2()
{
	GEL_MemoryFill(EMIF_CE1,2,0x1,CE1_32);
	GEL_MemoryFill(IO_PORT,2,0x1,0xd000000);                 
	GEL_MemoryFill(EMIF_CE1,2,0x1,CE1_8);           
}
TurnOnUserLED3()
{
	GEL_MemoryFill(EMIF_CE1,2,0x1,CE1_32);
	GEL_MemoryFill(IO_PORT,2,0x1,0xb000000);                 
	GEL_MemoryFill(EMIF_CE1,2,0x1,CE1_8);           
}
TurnOffUserLEDs()
{
	GEL_MemoryFill(EMIF_CE1,2,0x1,CE1_32);
    GEL_MemoryFill(IO_PORT,2,0x1,0x7000000);                 
	GEL_MemoryFill(EMIF_CE1,2,0x1,CE1_8);           
}
ToggleUserLEDs(value)
{
	GEL_MemoryFill(EMIF_CE1,2,0x1,CE1_32);
	GEL_MemoryFill(IO_PORT,2,0x1,value);                 
	GEL_MemoryFill(EMIF_CE1,2,0x1,CE1_8);           
}

do_HandShake()
{
    /* Set Handshake ready */
    GEL_MemoryFill(HSB_STATUS,0,0x1,HOST_RECEIVE_HAND_SHAKING_INFO); 
    GEL_MemoryFill(HSB_RETURN,0,0x1,HANDSHAKEOK); 
    TurnOffUserLEDs();
}

do_ISRAM()
{
    /* Modify Command and Chg status */
    GEL_MemoryFill(HSB_COMMAND,0,0x1,ISRAM);
    GEL_MemoryFill(HSB_STATUS,0,0x1,HOST_STATUS_INPUT_READY);
    TurnOnUserLED1(); /* Test 1 */
}

do_SDRAM()
{
    /* Modify Command and Chg status */
    GEL_MemoryFill(HSB_COMMAND,0,0x1,SDRAM);
    GEL_MemoryFill(HSB_STATUS,0,0x1,HOST_STATUS_INPUT_READY);
    TurnOnUserLED2(); /* Test 2 */
}

do_FLASH()
{
    /* Modify Command and Chg status */
    GEL_MemoryFill(HSB_COMMAND,0,0x1,FLASH);
    GEL_MemoryFill(HSB_STATUS,0,0x1,HOST_STATUS_INPUT_READY);
    ToggleUserLEDs(0xc000000); /* LED1+LED2  Test 3 */
}

do_MCBSP()
{
    /* Modify Command and Chg status */
    GEL_MemoryFill(HSB_COMMAND,0,0x1,MCBSP);
    GEL_MemoryFill(HSB_STATUS,0,0x1,HOST_STATUS_INPUT_READY);
    TurnOnUserLED3(); /* Test 4 */
}

do_TIMER()
{
    /* Modify Command and Chg status */
    GEL_MemoryFill(HSB_COMMAND,0,0x1,TIMER);
    GEL_MemoryFill(HSB_STATUS,0,0x1,HOST_STATUS_INPUT_READY);
    ToggleUserLEDs(0xa000000); /* LED3+LED1  Test 5 */  
}

do_QDMA()
{
    /* Modify Command and Chg status */
    GEL_MemoryFill(HSB_COMMAND,0,0x1,QDMA);
    GEL_MemoryFill(HSB_STATUS,0,0x1,HOST_STATUS_INPUT_READY);
    ToggleUserLEDs(0x9000000); /* LED3+LED2  Test 6 */  
}

do_LEDS()
{   
    /* Modify Command and Chg status */
    if((*(HSB_IDPARM1)<0x1) || (*(HSB_IDPARM1)>0xA)) 
      GEL_MemoryFill(HSB_IDPARM1,0,0x1,0x5);
    if((*(HSB_IDPARM2)<0x64) || (*(HSB_IDPARM2)>0x3E8))
      GEL_MemoryFill(HSB_IDPARM2,0,0x1,0x1F4); 
    GEL_MemoryFill(HSB_COMMAND,0,0x1,LEDS);
    GEL_MemoryFill(HSB_STATUS,0,0x1,HOST_STATUS_INPUT_READY); 
}

do_CODEC()
{
    /* Modify Command and Chg status */
    if((*(HSB_IDPARM1)<0x20) || (*(HSB_IDPARM1)>0x1388)) 
      GEL_MemoryFill(HSB_IDPARM1,0,0x1,0x1388);
    if((*(HSB_IDPARM2)<0x1388) || (*(HSB_IDPARM2)>0x3d090))
      GEL_MemoryFill(HSB_IDPARM2,0,0x1,0x3d090); 
    GEL_MemoryFill(HSB_COMMAND,0,0x1,CODEC);
    GEL_MemoryFill(HSB_STATUS,0,0x1,HOST_STATUS_INPUT_READY);
    ToggleUserLEDs(0x8000000); /* LED3+LED2+LED1  Test 7 */  
}

do_PGMEM()
{
    /* Modify Command and Chg status */
/*    GEL_MemoryFill(HSB_IDPARM1,0,0x1,0x12345678); */
/*    GEL_MemoryFill(HSB_IDPARM2,0,0x1,0x0);        */
/*    GEL_MemoryFill(HSB_IDPARM3,0,0x1,0x10);       */
    GEL_MemoryFill(HSB_COMMAND,0,0x1,PGMEM);
    GEL_MemoryFill(HSB_STATUS,0,0x1,HOST_STATUS_INPUT_READY); 
}

do_QUIT()
{
    /* Host Asks for END of Processing */
    GEL_MemoryFill(HSB_STATUS,0,0x1,HOST_STATUS_END_PROCESSING); 
}

/* Show contents of HSB memory */
ShowHSB()
{
	GEL_TextOut("\nHSB[0] IDPARM1 %x %x\n","HandShakingBuffer",1,1,0,HSB_IDPARM1,*(HSB_IDPARM1)); 
	GEL_TextOut("HSB[1] IDPARM2 %x %x\n","HandShakingBuffer",1,2,0,HSB_IDPARM2,*(HSB_IDPARM2)); 
	GEL_TextOut("HSB[2] IDPARM3 %x %x\n","HandShakingBuffer",1,3,0,HSB_IDPARM3,*(HSB_IDPARM3)); 
	GEL_TextOut("HSB[3] COMMAND %x %x\n","HandShakingBuffer",1,4,0,HSB_COMMAND,*(HSB_COMMAND)); 
	GEL_TextOut("HSB[4] STATUS  %x %x\n","HandShakingBuffer",1,5,0,HSB_STATUS,*(HSB_STATUS)); 
	GEL_TextOut("HSB[5] RETURN  %x %x\n","HandShakingBuffer",1,6,0,HSB_RETURN,*(HSB_RETURN)); 
	GEL_TextOut("--------------------------------------","HandShakingBuffer",0,7,0,); 
}

/* Checks the Results of an individual test - Mimics HOST pgm */
CheckResults()
{                
	/* Handshake Acknowledged */
	if((unsigned)*(HSB_RETURN)==HANDSHAKEOK)
	{
		GEL_TextOut("Hand Shake Complete!\n","CnfTst Errors",1,1,0,); 
	}
	/* ISRAM test results */
	else if(*(HSB_RETURN)==ISRAM_OK)
	{
		GEL_TextOut("ISRAM Test PASSED! (%x)\n","CnfTst Errors",1,1,0,*(HSB_RETURN)); 
	}
	else if(*(HSB_RETURN)==ISRAM_ERR55)
	{
		GEL_TextOut("ISRAM 55 TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Total 55 errors=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM1)); 
		GEL_TextOut("Total Locations=%x\n","CnfTst Errors",2,3,0,*(HSB_IDPARM3)); 
	}
	else if(*(HSB_RETURN)==ISRAM_ERRAA)
	{
		GEL_TextOut("ISRAM AA TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Total AA errors=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM2)); 
		GEL_TextOut("Total Locations=%x\n","CnfTst Errors",2,3,0,*(HSB_IDPARM3)); 
	}
	else if(*(HSB_RETURN)==ISRAM_ERROR)
	{
		GEL_TextOut("ISRAM 55+AA TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Total 55 errors=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM1)); 
		GEL_TextOut("Total AA errors=%x\n","CnfTst Errors",2,3,0,*(HSB_IDPARM2)); 
		GEL_TextOut("Total Locations=%x\n","CnfTst Errors",2,4,0,*(HSB_IDPARM3)); 
	}
	/* SDRAM test results */
	else if(*(HSB_RETURN)==SDRAM_OK)
	{
		GEL_TextOut("SDRAM TEST PASSED! (%x)\n","CnfTst Errors",1,1,0,*(HSB_RETURN)); 
	}
	else if(*(HSB_RETURN)==SDRAM_ERR55)
	{
		GEL_TextOut("SDRAM 55 TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Total 55 errors=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM1)); 
		GEL_TextOut("Total Locations=%x\n","CnfTst Errors",2,3,0,*(HSB_IDPARM3)); 
	}
	else if(*(HSB_RETURN)==SDRAM_ERRAA)
	{
		GEL_TextOut("SDRAM AA TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Total AA errors=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM2)); 
		GEL_TextOut("Total Locations=%x\n","CnfTst Errors",2,3,0,*(HSB_IDPARM3)); 
	}
	else if(*(HSB_RETURN)==SDRAM_ERROR)
	{
		GEL_TextOut("SDRAM 55+AA TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Total 55 errors=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM1)); 
		GEL_TextOut("Total AA errors=%x\n","CnfTst Errors",2,3,0,*(HSB_IDPARM2)); 
		GEL_TextOut("Total Locations=%x\n","CnfTst Errors",2,4,0,*(HSB_IDPARM3)); 
	}
	/* FLASH test results */
	else if(*(HSB_RETURN)==FLASH_OK)
	{
		GEL_TextOut("FLASH TEST PASSED! (%x)\n","CnfTst Errors",1,1,0,*(HSB_RETURN)); 
	}
/*	else if(*(HSB_RETURN)==FLASH_ERRCK)     Turned off checksum test
	{
		GEL_TextOut("FLASH CHECKSUM ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Expected checksum=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM2)); 
		GEL_TextOut("Computed checksum=%x\n","CnfTst Errors",2,3,0,*(HSB_IDPARM3)); 
	}*/
	else if(*(HSB_RETURN)==FLASH_ERR55)
	{
		GEL_TextOut("FLASH 55 TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Total 55 errors=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM1)); 
		GEL_TextOut("Total Locations=%x\n","CnfTst Errors",2,3,0,*(HSB_IDPARM3)); 
	}
	else if(*(HSB_RETURN)==FLASH_ERRAA)
	{
		GEL_TextOut("FLASH AA TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Total AA errors=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM2)); 
		GEL_TextOut("Total Locations=%x\n","CnfTst Errors",2,3,0,*(HSB_IDPARM3)); 
	}
	else if(*(HSB_RETURN)==FLASH_ERROR)
	{
		GEL_TextOut("FLASH 55+AA TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Total 55 errors=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM1)); 
		GEL_TextOut("Total AA errors=%x\n","CnfTst Errors",2,3,0,*(HSB_IDPARM2)); 
		GEL_TextOut("Total Locations=%x\n","CnfTst Errors",2,4,0,*(HSB_IDPARM3)); 
	}
	/* MCBSP test results */
	else if(*(HSB_RETURN)==MCBSP_OK)
	{
		GEL_TextOut("MCBSP TEST PASSED! (%x)\n","CnfTst Errors",1,1,0,*(HSB_RETURN)); 
	}
	else if(*(HSB_RETURN)==MCBSP_ERROR)
	{
		GEL_TextOut("MCBSP TEST FAILED! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Error return value=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM1)); 
	}
	/* TIMER test results */
	else if(*(HSB_RETURN)==TIMER_OK)
	{
		GEL_TextOut("TIMER TEST PASSED! (%x)\n","CnfTst Errors",1,1,0,*(HSB_RETURN)); 
	}
	else if(*(HSB_RETURN)==MCBSP_ERROR)
	{
		GEL_TextOut("TIMER TEST FAILED! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
	}
	/* QDMA test results */
	else if(*(HSB_RETURN)==QDMA_OK)
	{
		GEL_TextOut("QDMA  TEST PASSED! (%x)\n","CnfTst Errors",1,1,0,*(HSB_RETURN)); 
	}
	else if(*(HSB_RETURN)==QDMA_ERROR)
	{
		GEL_TextOut("QDMA  TEST FAILED! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Error return value=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM1)); 
	}
	/* LEDS test results */
	else if(*(HSB_RETURN)==LEDS_OK)
	{
		GEL_TextOut("LEDS  TEST PASSED! (%x)\n","CnfTst Errors",1,1,0,*(HSB_RETURN)); 
	}
	else if(*(HSB_RETURN)==LEDS_ERROR)
	{
		GEL_TextOut("LEDS  TEST FAILED! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
	}
	/* CODEC test results */
	else if((unsigned)*(HSB_RETURN)==CODEC_OK)
	{
		GEL_TextOut("CODEC TEST PASSED! (%x)\n","CnfTst Errors",1,1,0,*(HSB_RETURN)); 
	}
	else if((unsigned)*(HSB_RETURN)==CODEC_ERRTN)
	{
		GEL_TextOut("CODEC TONE TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Error in Control Reg=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM1)); 
	}
	else if((unsigned)*(HSB_RETURN)==CODEC_ERRCD)
	{
		GEL_TextOut("CODEC CD/MIC TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Error in Control Reg=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM2)); 
	}
	else if((unsigned)*(HSB_RETURN)==CODEC_ERROR)
	{
		GEL_TextOut("CODEC TONE+CD/MIC TEST ERROR! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Error in Tone Control Reg=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM1)); 
		GEL_TextOut("Error in CD/MIC Control Reg=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM2)); 
	}
	/* PGMEM test results */
	else if((unsigned)*(HSB_RETURN)==PGMEM_OK)
	{
		GEL_TextOut("PGMEM TEST PASSED! (%x)\n","CnfTst Errors",1,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Value Written=%x\n","CnfTst Errors",1,2,0,*(HSB_IDPARM1)); 
		GEL_TextOut("First Address=%x\n","CnfTst Errors",1,3,0,(*(HSB_IDPARM2)+0x80000000)); 
		GEL_TextOut("Total Locations=%x\n","CnfTst Errors",1,4,0,*(HSB_IDPARM3)); 
	}
	else if((unsigned)*(HSB_RETURN)==PGMEM_ERROR)
	{
		GEL_TextOut("PGMEM TEST FAILED! (%x)\n","CnfTst Errors",2,1,0,*(HSB_RETURN)); 
		GEL_TextOut("Total errors=%x\n","CnfTst Errors",2,2,0,*(HSB_IDPARM1)); 
		GEL_TextOut("Total Locations=%x\n","CnfTst Errors",2,3,0,*(HSB_IDPARM3)); 
	}
	/* Unknown command */
	else if((unsigned)*(HSB_RETURN)==DEFAULT_ERROR)
	{
		GEL_TextOut("UNKNOWN Command sent to DSP! (%x)\n","CnfTst Errors",0,1,0,*(HSB_RETURN)); 
	}
	/* Test Disabled */
	else if((unsigned)*(HSB_RETURN)==TEST_DISABLED)
	{
		GEL_TextOut("Test Disabled on DSP! (%x)\n","CnfTst Errors",0,1,0,*(HSB_RETURN)); 
	}
	/* Default */
	else
	{
		GEL_TextOut("No Error Code Returned! (%x)\n","CnfTst Errors",0,1,0,*(HSB_RETURN)); 
	}
}

/* Reads and decodes STATUS word of HSB */
ReadStatus()
{   
	if((unsigned)*(HSB_STATUS)==HOST_RECEIVE_HAND_SHAKING_INFO)
	{
		GEL_TextOut("Hand Shake Complete!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_STATUS)==HOST_STATUS_INPUT_READY)
	{
		GEL_TextOut("HOST command READY!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_STATUS)==HOST_STATUS_END_PROCESSING)
	{
		GEL_TextOut("HOST Requested End of Processing!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_STATUS)==DSP_STATUS_OUTPUT_READY)
	{
		GEL_TextOut("DSP Ready for HOST Command!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_STATUS)==DSP_PROCESSING_COMMAND)
	{
		GEL_TextOut("DSP Processing a HOST Command!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_STATUS)==0x0)
	{
		GEL_TextOut("DSP Waiting for HOST ACK!\n","CnfTst Errors",0,1,0,); 
	}
	else
	{
		GEL_TextOut("Unknown Status! (%x)\n","CnfTst Errors",0,1,0,*(HSB_STATUS)); 
	}
}

/* Reads and decodes COMMAND word of HSB */
ReadCommand()
{   
	if((unsigned)*(HSB_COMMAND)==ISRAM)
	{
		GEL_TextOut("ISRAM Test!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_COMMAND)==SDRAM)
	{
		GEL_TextOut("SDRAM Test!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_COMMAND)==FLASH)
	{
		GEL_TextOut("FLASH Test!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_COMMAND)==MCBSP)
	{
		GEL_TextOut("MCBSP Test!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_COMMAND)==TIMER)
	{
		GEL_TextOut("TIMER Test!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_COMMAND)==QDMA)
	{
		GEL_TextOut("QDMA  Test!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_COMMAND)==LEDS)
	{
		GEL_TextOut("LEDS  Test!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_COMMAND)==CODEC)
	{
		GEL_TextOut("CODEC Test!\n","CnfTst Errors",0,1,0,); 
	}
	else if((unsigned)*(HSB_COMMAND)==PGMEM)
	{
		GEL_TextOut("PGMEM Test!\n","CnfTst Errors",0,1,0,); 
	}
	else
	{
		GEL_TextOut("Unknown Command! (%x)\n","CnfTst Errors",0,1,0,*(HSB_COMMAND)); 
	}
}

/* Read Dip switches */
Get_Dips()
{
	GEL_TextOut("Get USER_DIPS (%x) ","CnfTst Errors",2,1,0,user_dip_settings); 
	if(user_dip_settings==0x0f000000)
	  GEL_TextOut("ALL USERSW OFF\n","CnfTst Errors",2,1,0,);
	else if(user_dip_settings==0x0e000000)
	  GEL_TextOut("USERSW1\n","CnfTst Errors",2,1,0,);
	else if(user_dip_settings==0x0d000000)
	  GEL_TextOut("USERSW2\n","CnfTst Errors",2,1,0,);
	else if(user_dip_settings==0x0c000000)
	  GEL_TextOut("USERSW2+USERSW1\n","CnfTst Errors",2,1,0,);
	else if(user_dip_settings==0x0b000000)
	  GEL_TextOut("USERSW3\n","CnfTst Errors",2,1,0,);
	else if(user_dip_settings==0x0a000000)
	  GEL_TextOut("USERSW3+USERSW1\n","CnfTst Errors",2,1,0,);
	else if(user_dip_settings==0x09000000)
	  GEL_TextOut("USERSW3+USERSW2\n","CnfTst Errors",2,1,0,);
	else if(user_dip_settings==0x08000000)
	  GEL_TextOut("USERSW3+USERSW2+USERSW1\n","CnfTst Errors",2,1,0,);
    GEL_MemoryFill(HSB_IDPARM3,0,0x1,user_dip_settings); /* Write parameter for LEDS command */ 
}    

/* Set Dip switches */
Set_Dips(value)
{   
    GEL_MemoryFill(0x0000B238,0,0x1,value); /* Write user_dip_settings memory location */
    GEL_MemoryFill(HSB_IDPARM3,0,0x1,value); /* Write parameter for LEDS command */ 
	GEL_TextOut("Set USER_DIPS (%x) ","CnfTst Errors",2,1,0,value);
	if(value==0x0f000000)
	  GEL_TextOut("ALL USERSW OFF\n","CnfTst Errors",2,1,0,);
	else if(value==0x0e000000)
	  GEL_TextOut("USERSW1\n","CnfTst Errors",2,1,0,);
	else if(value==0x0d000000)
	  GEL_TextOut("USERSW2\n","CnfTst Errors",2,1,0,);
	else if(value==0x0c000000)
	  GEL_TextOut("USERSW2+USERSW1\n","CnfTst Errors",2,1,0,);
	else if(value==0x0b000000)
	  GEL_TextOut("USERSW3\n","CnfTst Errors",2,1,0,);
	else if(value==0x0a000000)
	  GEL_TextOut("USERSW3+USERSW1\n","CnfTst Errors",2,1,0,);
	else if(value==0x09000000)
	  GEL_TextOut("USERSW3+USERSW2\n","CnfTst Errors",2,1,0,);
	else if(value==0x08000000)
	  GEL_TextOut("USERSW3+USERSW2+USERSW1\n","CnfTst Errors",2,1,0,);
}    
Set_USERSW1()
{   
    GEL_MemoryFill(0x0000B238,0,0x1,0x0e000000); /* Write user_dip_settings memory location */
    GEL_MemoryFill(HSB_IDPARM3,0,0x1,0x0e000000); /* Write parameter for LEDS command */ 
	GEL_TextOut("Set USER_DIPS (%x) USERSW1\n","CnfTst Errors",2,1,0,0x0e000000); 
}    
Set_USERSW2()
{   
    GEL_MemoryFill(0x0000B238,0,0x1,0x0d000000); /* Write user_dip_settings memory location */
    GEL_MemoryFill(HSB_IDPARM3,0,0x1,0x0d000000); /* Write parameter for LEDS command */ 
	GEL_TextOut("Set USER_DIPS (%x) USERSW2\n","CnfTst Errors",2,1,0,0x0d000000); 
}    
Set_USERSW3()
{   
    GEL_MemoryFill(0x0000B238,0,0x1,0x0b000000); /* Write user_dip_settings memory location */
    GEL_MemoryFill(HSB_IDPARM3,0,0x1,0x0b000000); /* Write parameter for LEDS command */ 
	GEL_TextOut("Set USER_DIPS (%x) USERSW3\n","CnfTst Errors",2,1,0,0x0b000000); 
}