Ситуевина такова. Несколько месяцев работаю с этим камнем. Все замечательно, но есть одно НО...
Иногда возникают непонятные совершенно глюки (мне непонятные). Камень LPC2364.
Например:
Процессор загружаю через JTAG. Все загружается, но при попытке запустить программу выдает ошибку чтения RAM и Core Error.
Смотрю в каком месте глючит -- иду пошагово. В момент когда закончена инициализация прерывания от RTC -- return( TRUE ); -- JTAG глохнет...
Инит стандартный...
Код
DWORD install_irq( DWORD IntNumber, void *HandlerAddr, DWORD Priority )
{
DWORD *vect_addr;
DWORD *vect_cntl;
VICIntEnClr = 1 << IntNumber; /*Выключить */
if ( IntNumber >= VIC_SIZE )
{
return ( FALSE );
}
else
{
vect_addr = (DWORD *)(VIC_BASE_ADDR + VECT_ADDR_INDEX + IntNumber*4);
vect_cntl = (DWORD *)(VIC_BASE_ADDR + VECT_CNTL_INDEX + IntNumber*4);
*vect_addr = (DWORD)HandlerAddr; /* установить вектор */
*vect_cntl = Priority;
VICIntEnable = 1 << IntNumber; /* Включить*/
return( TRUE ); << ---- Вот здесь
}
}
На другой такой же плате этого не происходит.
Или другой пример -- процессор не засыпает после команды PCONP|=0x02;
В дебаг смотрю -- до команды доходит, но она не выполняется -- регистр пуст (0)...
На другой такой же плате все нормально...
Еще?
Ни с того ни с сего перестает работать какая-либо нога порта...
Причем не факт, что на рабочей плате это не произойдет...
И много других подобных сбоев.
Кто -нибудь сталкивался с подобного рода неисправностями?
Отчего это может происходить и как это избежать?
Где собака порылась?