реклама на сайте
подробности

 
 
> BootLoader, AT90CAN128, WinAvr., Не вызвать загрузчик из апликашин секции.
Igor_U
сообщение Mar 28 2006, 10:54
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 2-10-05
Пользователь №: 9 141



Не возьму в толк где грабли.
Первоначально шью бутлаудер. С помощью него загружаю прикладную программу. Все работает. Но не получается вызвать бутлаудер из прикладной программы. Точнее переход осуществляется (jmp 0x1F000), но программа циклится где-то на инициализации bootloader секции. Вот код:

...
здесь инициализация портов (опускаю, так как все равно поломает)
...
здесь я дергаю ножками, чтобы сообразить где застревает
On_1();
Off_2();
Off_3();
On_3();
Off_1();

// Timer_0 - CTC, prescaling - 64, Force Output Compare A, 2003Гц
TCCR0A=ХХ;
OCR0A=0x73;

// USART0_Init (unsigned int baud)
/* Set baud rate */
UBRR0H = ХХ;
UBRR0L = ХХ;

UCSR0A=ХХ;
/* Set frame format: 8data, no parity & 1 stop bits */
UCSR0C=ХХ;
/* Enable receiver and transmitter */
UCSR0B=ХХ;

/* Write logical one to WDCE and WDE */
WDTCR =ХХ; здесь выставляю флаги WDCE и WDE
/* Turn off WDT */
WDTCR = 0x00;
time = MCUCR;
/* Enable change of Interrupt Vectors */
MCUCR = time | ХХ; здесь выставляю флаг IVCE;
/* Move interrupts to bootloader section */
MCUCR = time | ХХ; здесь выставляю флаг IVSEL;

// прерывание по совпадению для таймера 0
TIMSK0=ХХ;

flags.byte=0;
flags.wait=1; // будем ожидать команду 0xA5, 0xA5
sei();

До цикла расположенного ниже программа не доходит. _1() и _2() вывод переключаются через 250мкс (~3700 тактов). Где и что делает в это время контроллер не понимаю.

while (flags.wait)
{
OffLed();
OnLed();
}
OnLed();
On_1();

Смотрел ассемблерный код. Переключение векторов прерывания и выключение собачки укладывается в 4-х тактный допуск:
1f6dc: 88 e1 ldi r24, 0x18 ; 24
1f6de: 80 93 60 00 sts 0x0060, r24 - это собачка
1f6e2: 10 92 60 00 sts 0x0060, r1 - это собачка
1f6e6: 85 b7 in r24, 0x35 ; 53
1f6e8: 98 2f mov r25, r24
1f6ea: 91 60 ori r25, 0x01 ; 1
1f6ec: 95 bf out 0x35, r25 ; 53 - это вектора
1f6ee: 82 2b or r24, r18
1f6f0: 85 bf out 0x35, r24 ; 53 - это вектора

В общем ничего не понимаю. Самое смешное, что какое-то время эта связка (aplication & bootloader) работала нормально.

Фьюзы: BLB = 3, т.е. ни каких ограничений, все разрешено. Bootsz-1, bootrst-1(aplication), wdton-1.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Igor_U
сообщение Mar 29 2006, 05:06
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 2-10-05
Пользователь №: 9 141



Сброс у меня с нулевого адреса. Я таким образом перехожу на прикладную программу из бутлодера. У меня появились подозрения, что может быть контролер переходы по прерываниям делает не корректно. Например если вектора прерываний располагает с адреса 0xF000, то ситуация будет похожия на мой случай. Единственно не понятно, почему все корректно работает при первоначальном пуске. Т.е. до тех пор пока не загружена прикладная программа. В общем пока ничего не понимаю, так как считывал код с контроллера после "зависа". Код совпадает с компиленным, т.е. ничего не портится. Фьюзы так же все в норме. В общем пока загадкаsad.gif
Спасибо за ответ.
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 29 2006, 09:11
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
Единственно не понятно, почему все корректно работает при первоначальном пуске. Т.е. до тех пор пока не загружена прикладная программа.

Это как раз понятно. Когда флеш пустой, то проц спокойно попадает на код бутлоадера, когда есть программа - то перейдя "через круг" попадает на код основной программы. Вы это видите так как-будто программа циклится..

У меня есть предположение, что Вы промазали с адресом бутлоадера. Либо код бутлоадера располагается "ниже" чем надо, либо адрес перехода Вы задаете "выше" чем надо.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01367 секунд с 7
ELECTRONIX ©2004-2016