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

 
 
> Не выходит одолеть прерывания в Bootloader'е
Sirko
сообщение Apr 11 2011, 00:06
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



За основу было взято вот Это. Вернее хочу использовать Makefile от сюда.
CODE
#include <stdint.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/boot.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#if defined(BOOTLOADERHASNOVECTORS)
#warning "This Bootloader does not link interrupt vectors - see makefile"
/* make the linker happy - it wants to see __vector_default */
// void __vector_default(void) { ; }

void __vector_default(void) { ; }
#endif

volatile unsigned char b = 0;

ISR(TIMER0_COMP_vect){
b = 1;
}

ISR(TIMER0_OVF_vect){
b = 1;
}

int main(void){

TCCR0 = _BV(CS02) | _BV(CS00);
OCR0 = 100;
TIMSK |= _BV(OCIE0) | _BV(TOIE0);
MCUCR |= (1<<IVCE); // Enable change of Interrupt Vectors
MCUCR |= (1<<IVSEL); // Move interrupts to Boot Flash section


DDRE |= _BV(PE7);
unsigned long x = 0;
while(1){
asm("sei");
x = (cool.gif ? (1UL<<15) : (1UL<<18);
while(--x){asm("nop");}
PORTE ^= _BV(PE7);
}
return 0;
}
Тест не мудреный, Если прерывания запретить, то лампа моргает редко. Если разрешить, - то почащще. А в моем случае, при разрешении прерывания она не горит вовсе. Вероятно при наступлении прерывания происходит улет в ???.
Проц - Mega128, компилятор - WinAVR-20100110.
LDFLAGS += -Wl,--section-start=.text=0x1E000, наверное
НЕХ на выходе начинается вот так:
:020000021000EC
:10E0000011241FBECFEFD0E1DEBFCDBF11E0A0E0F5
Фьюзы настроены на 4кБ, addr-$F000

Что где править, ума не приложу.
А проект, если понадобится прилагаю.
Прикрепленный файл  Bootloader.zip ( 31.25 килобайт ) Кол-во скачиваний: 112


Сообщение отредактировал Sirko - Apr 11 2011, 22:02
Причина редактирования: [codebox]
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sirko
сообщение Apr 12 2011, 21:52
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795



Цитата
1. Write the Interrupt Vector Change Enable (IVCE) bit to one.
2. Within four cycles, write the desired value to IVSEL while writing a zero to IVCE.


Огромнейшее спасибо, вроде как ОНО. 08.gif

По поводу
Цитата
если это не опечатка, то alag57 пусть...
простите, беру свои слова обратно.



Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sirko   Не выходит одолеть прерывания в Bootloader'е   Apr 11 2011, 00:06
- - Vetal-Soft   Скорее всего заморочка с измерением памяти програм...   Apr 11 2011, 02:41
- - Sirko   ЦитатаСкорее всего... Скорее всего. Кто бы носом т...   Apr 11 2011, 21:57
|- - Vetal-Soft   У Вас в makefile: Код#/* Select Boot Size in Words...   Apr 12 2011, 08:36
- - defunct   Цитата(Sirko @ Apr 11 2011, 03:06) LDFLAG...   Apr 12 2011, 13:00
- - alag57   Попробуйте так: Код //MCUCR = (1<<IVCE...   Apr 12 2011, 15:01
- - Sirko   ЦитатаПохоже вы не укладываетесь в... Попробуйте ...   Apr 12 2011, 18:29
- - SysRq   Цитата(Sirko @ Apr 12 2011, 22:29) Лампа ...   Apr 12 2011, 20:10
- - Sirko   Спасибо, не видел. Исправил. К сожалению пока-что ...   Apr 12 2011, 21:18
- - SysRq   Цитата1. Write the Interrupt Vector Change Enable ...   Apr 12 2011, 21:23
- - alag57   Цитатапростите, беру свои слова обратно. Да все но...   Apr 13 2011, 06:22
- - Sirko   Добрался - таки я до загрузчика и, пользуясь случа...   Apr 14 2011, 22:20
|- - SysRq   Цитата(Sirko @ Apr 15 2011, 02:20) буду н...   Apr 15 2011, 07:55
- - Sirko   ЦитатаРаньше вас ныть начнёт МК Безусловно, но это...   Apr 15 2011, 11:11


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

 


RSS Текстовая версия Сейчас: 24th August 2025 - 03:40
Рейтинг@Mail.ru


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