File tree Expand file tree Collapse file tree 1 file changed +8
-1
lines changed Expand file tree Collapse file tree 1 file changed +8
-1
lines changed Original file line number Diff line number Diff line change 27
27
#include "sim_interrupts.h"
28
28
#include "sim_avr.h"
29
29
#include "sim_core.h"
30
+ #include "sim_core_declare.h"
30
31
31
32
DEFINE_FIFO (avr_int_vector_p , avr_int_pending );
32
33
@@ -281,7 +282,13 @@ avr_service_interrupts(
281
282
printf ("IRQ%d calling\n" , vector -> vector );
282
283
_avr_push_addr (avr , avr -> pc );
283
284
avr_sreg_set (avr , S_I , 0 );
284
- avr -> pc = vector -> vector * avr -> vector_size ;
285
+ const int mcucr = _SFR_IO8 (0x35 );
286
+ const int ivsel = 1 ;
287
+ const char interrupt_sector_moved_to_bootloader = avr -> data [mcucr ] & (1 << ivsel );
288
+ if (interrupt_sector_moved_to_bootloader )
289
+ avr -> pc = vector -> vector * avr -> vector_size + 0x7000 ;
290
+ else
291
+ avr -> pc = vector -> vector * avr -> vector_size ;
285
292
286
293
avr_raise_irq (vector -> irq + AVR_INT_IRQ_RUNNING , 1 );
287
294
avr_raise_irq (table -> irq + AVR_INT_IRQ_RUNNING , vector -> vector );
You can’t perform that action at this time.
0 commit comments