Здравствуйте, уважаемые форумчание!
Пишу загрузчик в IAR 5.5. Загрузчик, как положено, отдельным проектом. Вектора и код переместил в загрузочную область:
Файл
lnkusb647s.xclКод
.
.
.
/* Code (flash) segments */
-D_..X_INTVEC_SIZE=F098 /* 4 bytes * 38 vectors */
.
.
.
/* Code memory */
-Z(CODE)INTVEC=F000-(_..X_INTVEC_SIZE-1)
/* Fill unused interrupt vector's with RETI */
-H1895
-h(CODE)F000-_..X_INTVEC_SIZE
.
.
.
Код и вектора переместились, это видно из чтения памяти программ. Начало векторов расположено с адреса 0хF000, следом идет код.
Код программы:
Код
.
.
.
int main(void)
{
__enable_interrupt(); // разрешение прерываний (sei)
DDRD |= (1 << PD7); // управление светодиодом
EIMSK |= (1 << INT0); // разрешение прерывания
MCUCR |= (1 << IVCE); // для записи IVSEL
MCUCR = (1 << IVSEL); // вектора в загрузочной области
for(;;)
{
}
return 0;
}
#pragma vector = INT0_vect
__interrupt void INT0_interrupt()
{
for(;;)
{
PORTD |= (1 << PD7);
__delay_cycles(4000000);
PORTD &= ~(1 << PD7);
__delay_cycles(4000000);
}
}
Когда код идет с нулевого адреса, все нормально прерывание проходит, светодиод мигает. При переносе кода в загрузчик, выполнение программы "сваливается" куда-то непонятно куда.
Что я делаю не так?
Спасибо