Sida 1 av 1
AT8051 och bootloader
Postat: 18 september 2007, 13:51:17
av Piratman
Om jag vill göra en bootlooader till 89C51, så behöver jag kunna dirigera om interrupt vektorn.
Jag måste använda interrupten både i bootloadern och i applikationsprogrammet.
Så när bootloadern skickar programexekveringen till applikationsprogrammet så ska interruptvektorn ställas om och för detta behövs lite assembler vad jag förstår.
Någon som sitter på en lösning?
Postat: 19 september 2007, 00:45:42
av macgyver
Så här kan man göra om man inte har externt exekverbart minne:
Kod: Markera allt
;en hårdvaruadresserad vector
int_vect1:
push int_vect1_l ;
push int_vect1_h ; Register i internminnet
ret
;omdirigera vector till ny adress i dptr
set_vector:
mov int_vect1_l, dpl
mov int_vect1_h, dph
ret
Postat: 19 september 2007, 01:09:34
av Piratman
Tyvärr, blev jag inte så mycket klokare
Men det beror på att mina kunskaper om assembler är = 0
Jag har gjort C-kod för avkodning av hex-fil klar, som ska ligga som bootloadern.
Vad jag förstår måste jag peka om interruptvektorn till en plats där jag får plats att kontrollera on det ska diregeras till bootloadern eller till app.programmet.
Postat: 19 september 2007, 01:18:48
av Piratman
Detta är ett exempel jag har hittat men detta är väl ovillkorligt hopp??
Jag skulle vilja villkora detta.
Man kan använda bit:en PSW.1 som väljare PSW.1 = 0 boot, 1 app.prog.
Kod: Markera allt
ExInt0 EQU 02003h ; X0
T0Int EQU 0200Bh ; T0
ExInt1 EQU 02013h ; X1
T1Int EQU 0201Bh ; T1
SerInt EQU 02023h ; S0
ORG 0000h
LJMP Start ; start bootstrap
ORG 0003h
LJMP ExInt0 ; call ISR of X0
RETI
ORG 000Bh
LJMP T0Int ; call ISR of T0
RETI
ORG 0013h
LJMP ExInt1 ; call ISR of X1
RETI
ORG 001Bh
LJMP T1Int ; call ISR of T1
RETI
ORG 0023h
LJMP SerInt ; call ISR of S0
RETI
Postat: 19 september 2007, 01:55:30
av Piratman
STOR spåning:
Kan man göra på detta vis?
Kod: Markera allt
T0IntBoot EQU 0010Bh ; T0
T0IntApp EQU 0300Bh ; T0
ORG 000Bh
JNB PSW.1, T0IntBoot ; call T0IntBoot if PSW.1=0
LJMP T0IntApp
RETI
Troligen inte, jag ser 2 problem: dels ska JNB laddas med relativ adress (eller räknar kompilatorn om?)
och dels har jag bara 8 byte till nästa interrupt-adress.....
Någon som kan hjälpa min ur detta?