Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bootloader никак не могу поймать глюк
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Vovanchik
Здравствуйте.
Использую AT91SAM7S512. Написал для него Bootloader (во Flash по адресам 0x100000 по 0x101FFF).
Основная прога во Flash по адресам 0x102000 по 0x17FFFF.
Переход из бута в основную прогу сделан так:
Код
...
#define USER_FLASH_START 0x2000;
...
void (*user_code_entry)(void);
user_code_entry = (void (*)(void))USER_FLASH_START;
user_code_entry();

В большинстве случаев все отрабатывает нормально.
Но периодически при запуске происходит глюк. Причем в основной программе.
Проверял в отладке - прога крутится в файле SAM7.s примерно в этом месте:
Код
;  Wait until Main Oscillator is stablilized
                IF      (PMC_MOR_Val:AND:PMC_MOSCEN) != 0
MOSCS_Loop      LDR     R2, [R0, #PMC_SR]
                ANDS    R2, R2, #PMC_MOSCS
                BEQ     MOSCS_Loop
                ENDIF

Циклическое выполнение происходит до срабатывания WDT таймера - после чего происходит нормальный запуск.

С чем это может быть связано? Куда копать?
aaarrr
Цитата(Vovanchik @ May 19 2010, 15:15) *
С чем это может быть связано? Куда копать?

Могу предположить, что в основной программе не выполняются правила переключения источника клоков.
Vovanchik
Я делал на основе примера от атмела, правда на другой процессор.
И там были одинаковые настройки в Startup file для Bottloader'а и основной проги.

Цитата
Могу предположить, что в основной программе не выполняются правила переключения источника клоков

Если не сложно не могли бы в кратце описать.
aaarrr
Цитата(Vovanchik @ May 19 2010, 17:06) *
Если не сложно не могли бы в кратце описать.

Просто переключите процессор на SCLK и заглушите основной генератор перед переходом на основную программу. Или, как вариант, не инициализируйте тактирование в основной программе, если это уже сделано bootloader'ом.
Vovanchik
Цитата(aaarrr @ May 19 2010, 17:48) *
Просто переключите процессор на SCLK и заглушите основной генератор перед переходом на основную программу. Или, как вариант, не инициализируйте тактирование в основной программе, если это уже сделано bootloader'ом.

Спасибо. Завтра попробую.
Vovanchik
Попробовал отключить генератор и перевести в slow clock.
Код
AT91C_BASE_PMC->PMC_PCDR = 0xFFFFFFFF; //Peripheral Clock Disable
AT91C_BASE_CKGR->CKGR_MOR = 0; //The Main Oscillator is disabled
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_SLOW_CLK; //Slow Clock

Основная прога перестала вообще запускаться. Останавливается на иницилизации PLL'ки.

Сейчас попробовал убрать инициализацию в основной проге PMC, WDT, EFC, RSCT - пока вроде работает.
Почему то отключение только PMC не помогло.
aaarrr
Логика подсказывает, что нужно сначала переключаться на SCLK, а уж потом выключать основной генератор, а никак не наоборот...
Vovanchik
Цитата(aaarrr @ May 20 2010, 16:12) *
Логика подсказывает, что нужно сначала переключаться на SCLK, а уж потом выключать основной генератор, а никак не наоборот...

Пробовал и сначала включить SCLK а потом выключить генератор, и пробовал просто переход на SCLK без выключения генератора - не запускается основная прога...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.