rhayader (22.09.2008 17:41, просмотров: 3761)
Добрового дня. Такой вопрос: возможно ли программно определить баг во внешнем генераторе (например, он не подключен или частота некорректна)? Сейчас у нас в плате перепутано и генераторы XTAL и RTC поменяны местами (10МГц и 32КГц). И вот виду того что у нас тут монтажники не очень добросовестны и иногда(почти всегда) не трезвы хотелось бы на будущее как то сделать, чтоб при баге в плате программа пыталась запуститься с внешнего генератора, если не получится, то работать от внутреннего.
Код:
SCS |= (1 << 5); // разрешаем работу основного генератора
for(u32 i = 0; i <= 10000; i++) // ждем, пока не заработает
{
if( SCS & (1 << 6) ) break; // вау, работает, идём дальше
delayus_rc(100);
}
if( SCS & (1 << 6) ) // проверяем, действительно ли заработал основной генератор
{
CLKSRCSEL = 0x1; // повезло, выбираем его в качестве источника ТЧ
PLLCFG = SYS_CalcPLLCFG( MAIN_OSC_FREQ );
break;
}
На строчке CLKSRCSEL = 0x1 виснет, в дебагере выдается какое-то сообщение Unable to halt chip(expecting nMREQ=1, DBGACK=1) found nMREQ=0, DBGACK=0. А генератор как будто бы заработал... Может как-нибудь все-таки можно исхитриться и решить такую задачу?
Заранее спасибо.