/********************************************************************************* * * Embedded Studio (C) 2007 * * File: ES_SDRAM_Test.c * Desc: SDRAM self test function * CPU: Analog Device ADSP-21369 * **********************************************************************************/ /******************************************************************************************* * For 16-bit SDRAM, the DSP reads/writes twice to make 16 x 2 = 32 (1 word) *******************************************************************************************/ #define SDRAM_START 0x200000 // start address of SDRAM, MS0 #define SDRAM_SIZE 0x200000 // size of SDRAM in 16-bit words. (i.e. 2M x 32) /********************************************************************************* * Function: TEST_SDRAM * * Desc: This function tests each SDRAM location with different values * * Params: None * * Returns: boolean * * Notes: *********************************************************************************/ bool TEST_SDRAM(void) { int *pDst; int nPattern, nTemp; int i; // write all 0xFFFFFFFF nPattern = 0xFFFFFFFF; pDst = (UINT32 *)SDRAM_START; for(i = 0; i < SDRAM_SIZE; i++ ) { *pDst++ = nPattern; } // verify all 0xFFFFFFFF pDst = (UINT32 *)SDRAM_START; for(i = 0; i < SDRAM_SIZE; i++ ) { nTemp = *pDst++; if( nTemp != nPattern ) { return false; } } // write all 0xAAAAAAAA nPattern = 0xAAAAAAAA; pDst = (UINT32 *)SDRAM_START; for(i = 0; i < SDRAM_SIZE; i++ ) { *pDst++ = nPattern; } // verify all 0xAAAAAAAA pDst = (UINT32 *)SDRAM_START; for(i = 0; i < SDRAM_SIZE; i++ ) { nTemp = *pDst++; if( nTemp != nPattern ) { return false; } } // write all 0x55555555 nPattern = 0x55555555; pDst = (UINT32 *)SDRAM_START; for(i = 0; i < SDRAM_SIZE; i++ ) { *pDst++ = nPattern; } // verify all 0x55555555 pDst = (UINT32 *)SDRAM_START; for(i = 0; i < SDRAM_SIZE; i++ ) { nTemp = *pDst++; if( nTemp != nPattern ) { return false; } } // write incremental values to each SDRAM location pDst = (UINT32 *)SDRAM_START; for (i = 0; i < SDRAM_SIZE; i++ ) { *pDst++ = i; } // verify incremental values pDst = (UINT32 *)SDRAM_START; for (i = 0; i < SDRAM_SIZE; i++ ) { nTemp = *pDst++; if( nTemp != i ) { return false; } } return true; }