Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
#pragma optimize = none
/************************************************************************
*
* FUNCTION: xmemTestAll()
*
* DESCRIPTION: Выполняет тестирование:
* 1) шины данных;
* 2) шины адреса;
* 3) непрерывного участка внешней SRAM;
* 4) селектора страниц;
* 5) страничной SRAM.
*
* RETURNS: 0 если все тесты прошли успешно
*
* Ненулевое значение сообщает номер неудавшегося теста.
* Глобальные переменные модуля содержат:
* sram_test_step - номер непройденного теста;
* sram_test_code - байт данных для memTestDataBus;
* адрес ячейки ОЗУ для других функций;
* sram_test_page - номер страницы.
*
***********************************************************************/
uint8_t xmemTestAll( void )
{
uint8_t *ptr;
sram_test_page = 0;
/* Тест шины данных */
sram_test_step = 1;
sram_test_code = memTestDataBus( SRAM_EXT_BEGIN );
if ( sram_test_code ) return( sram_test_step );
/* Тест шины адреса */
sram_test_step = 2;
sram_test_code = ( uint16_t ) memTestAddressBus( SRAM_EXT_BEGIN, SRAM_EXT_SIZE );
if ( sram_test_code ) return( sram_test_step );
SELECT_SRAM_PAGE( FIRST_PAGE_NUM );
sram_test_code = ( uint16_t ) memTestAddressBus( SRAM_PAGE_BEGIN, SRAM_PAGE_SIZE );
if ( sram_test_code ) return( sram_test_step );
/* Тест непрерывной области внешней SRAM */
sram_test_step = 3;
sram_test_code = ( uint16_t ) memTestDevice( SRAM_EXT_BEGIN, SRAM_EXT_SIZE );
if ( sram_test_code ) return( sram_test_step );
/* Тест селектора страниц */
sram_test_step = 4;
ptr = SRAM_PAGE_BEGIN;
for ( sram_test_page = FIRST_PAGE_NUM; sram_test_page <= LAST_PAGE_NUM; sram_test_page++ ) {
SELECT_SRAM_PAGE( sram_test_page );
ptr[0] = sram_test_page;
ptr[1] = ~sram_test_page;
}
for ( sram_test_page = FIRST_PAGE_NUM; sram_test_page <= LAST_PAGE_NUM; sram_test_page++ ) {
SELECT_SRAM_PAGE( sram_test_page );
if ( ptr[0] != sram_test_page ) {
sram_test_code = ( uint16_t ) SRAM_PAGE_BEGIN;
return( sram_test_step );
}
if ( ptr[1] != ~sram_test_page ) {
sram_test_code = ( uint16_t )( SRAM_PAGE_BEGIN + 1 );
return( sram_test_step );
}
}
sram_test_step = 5;
ptr = SRAM_EXT_BEGIN;
while ( ptr <= SRAM_EXT_END ) {
if ( *ptr ) {
sram_test_code = ( uint16_t ) ptr;
return( sram_test_step );
}
ptr++;
}
/* Тест страничной памяти */
sram_test_step = 6;
for ( sram_test_page = FIRST_PAGE_NUM; sram_test_page <= LAST_PAGE_NUM; sram_test_page++ ) {
SELECT_SRAM_PAGE( sram_test_page );
sram_test_code = ( uint16_t ) memTestDevice( SRAM_PAGE_BEGIN, SRAM_PAGE_SIZE );
if ( sram_test_code ) return( sram_test_step );
}
/* Все тесты прошли успешно */
sram_test_step = 0;
sram_test_code = 0;
sram_test_page = 0;
return( 0 );
}