Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с загрузчиком для F2MC-16LX
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
B@rtL™
Используемый контроллер MB90F428GC.

Проблема не в самом загрузчике (зашивает все правильно), а в запуске им основной программы.

Запуск делаю следующим образом:
Код
#define APPLICATION_START_ADDRESS (*((unsigned long __far*)0xFFFFE0L))

__nosavereg
void __far StartApplication(void)
{
            // останавливаю CAN
    clear_CPU_operation_detection();
    CSR = 0x81;                 
    while (!CSR_HALT)
           clear_CPU_operation_detection();
        
            // останавливаю PLL       
    CKSCR_MCS = 1;
    while (!CKSCR_MCS)  clear_CPU_operation_detection();
    
            // прыжок на вектор сброса основной программы
    ((void __far (*)(void))APPLICATION_START_ADDRESS)();
}


В реальности запуск основной программы получается только со второго раза.
Т.е. включаю питание, жду исхода таймаута ... запуска не происходит.
Выключаю, через секунду включаю питание, жду таймаута - девайс запускается.

Если зашивать только основную программу, то таких проблем нету.

Подскажите где что я упустил.
Andy Mozzhevilov
Как-то не совсем понятно, о чем речь? Вы делаете IAP и после перепрошивки контроллера хотите рестартовать программу?
У фуджиков помнится есть регистр для программной генерации сброса. Пишешь туда какой-то бит, и контроллер сбрасывается.
spf
Цитата(B@rtL™ @ Feb 19 2008, 17:41) *
Подскажите где что я упустил.

Адрес вектора сброса 0xFFFFDCL, если мне память не изменяет.

Можно проще -- программно вызвать прерывание сброса
Код
__asm("    INT    #8");    // По адресу вектора INT8 хранится адрес старта


Конкретные адреса зависят от приемов в загрузчике.
Может просто в том адресе, который пытаетесь использовать и нет ничего, проверяли правильность записи данных в 0xFFFFE0?
B@rtL™
Действительно.....
Оказалось, что вектор сброса не туда сохраняется.......Куда я смотрел когда проверял laughing.gif

Спасибо spf за направление.....
spf
Цитата(B@rtL™ @ Feb 21 2008, 18:39) *
Действительно.....
Оказалось, что вектор сброса не туда сохраняется


Если вектор хранится все же по адресу 0xFFFFE0, то можно переходить к выполнению кода приложения при помощи все того же вызова программного прерывания с соответствующим номером:
Код
__asm("    INT    #7");
B@rtL™
Так и делается....

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