adsp 21361 AMI : иногда "проглатывает" команды чтения и записи. Сигнал ACK использовать невозможно (не разведен).
Сооотв в регистре он выключен.
Состояние шины DSP смотрим логическим анализатором.
Создается впечатление, что CPU core вообще не ждет готовности AMI(ext memory interface).
Если после каждой записи поставить сброс буферов в шину, все гораздо лучше.
Но если прибавить waitstate до 32, то в линию вообще выдается постоянно 0.
Первый раз с таким сталкиваюсь.
Пропадаю.
*pAMICTL1= PREDIS | RHC2 | /*RHC1 |*/ AMIFLSH | IC7 | HC2 | /*HC1 |*/ WS12 | PKDIS | BW32 | AMIEN; /* sram, 32 bit bus */
/* SRAM тест 1 */
for(addr= 0; addr <= SRAM_SIZE; addr++) /* пишем по нечетным адресам 0xffff_ffff, по четным 0x0000_0000 */
{p= (volatile unsigned int *)(EXT_BUS_BANK1_ADDR | addr);
*pAMICTL1|= AMIFLSH;
if(addr & 0x01)
{*p= 0xffffffff; continue;}
*p= 0x00000000;
}
for(r=0x100; r; r--) continue; /* задержка */
for(addr= 0; addr <= SRAM_SIZE; addr++) /* проверяем, что по нечетным адресам 0xffff_ffff, по четным 0x0000_0000 */
{p= (volatile unsigned int *)(EXT_BUS_BANK1_ADDR | addr);
*pAMICTL1|= AMIFLSH;
v= *p;
if(addr & 0x01)
{if(v == 0xffffffff) continue;}
else
{if(!v) continue;}
return 0;
}
/* SRAM тест 2 */
for(r=0x100; r; r--) continue; /* задержка */
for(addr= 0; addr <= SRAM_SIZE; addr++) /* пишем по нечетным адресам 0x0000_0000, по четным 0xffff_ffff */
{p= (volatile unsigned int *)(EXT_BUS_BANK1_ADDR | addr);
if(*pAMICTL1 & AMIFLSH) continue;
if(addr & 0x01)
{*p= 0x00000000; *pAMICTL1|= AMIFLSH; continue;}
*p= 0xffffffff; *pAMICTL1|= AMIFLSH;
}
for(r=0x100; r; r--) continue; /* задержка */
for(addr= 0; addr <= SRAM_SIZE; addr++) /* проверяем, что по нечетным адресам 0x0000_0000, по четным 0xffff_ffff */
{p= (volatile unsigned int *)(EXT_BUS_BANK1_ADDR | addr);
v= *p;
if(addr & 0x01)
{if(!v) continue;}
else
{if(v == 0xffffffff) continue;}
return 0;
}
++