FLASH MONITOR - 52
FLASH Monitor Debugger per la famiglia Abaco® 8051
Manuale Tecnico PDF,
in Italiano, del programma
FMO 52.
Ver.3.00 - Rel. 03 Marzo 2003.
I N D I C E
1. INTRODUZIONE
2. USO del' FMO52
3. Uso tramite GET-51
4. Uso Tramite BASCOM-LT; BASCOM-8051
1. INTRODUZIONE
FMO52 e' un pacchetto software per la famiglia di microprocessori
Intel 51 interattivo che comprende un debugger, un monitor in
linguaggio macchina che permette il debug del programma utente
nell'area di RAM da 2050H fino 7FFFH, dove
e' indispensabile sezionarla in area codice e area dati. Se il
codice viene compilato per l'esecuzione in Flash da 8050H
fino DFFFH, l'area di RAM risulta essere tutta disponibile
per i dati da 20C6H fino
7FFFH, questa e' la modalita' di AUTO RUN.
L'FMO52 include funzioni come, visualizzazione ed alterazione del contenuto della memoria, gestione di punti d'arresto, esecuzione codice a singola istruzione, esecuzione codice a velocita' reale, un completo disassemblatore, test della RAM, cancellazione della Flash, programmazione della Flash con il programma utente e lancio del programma in AUTO RUN tramite DIP-SWITCH o Jumper all'accensione.
FMO52 richiede l'installazione di una Flash ATMEL AT29c256 per la sola gestione della programmazione e dell'esecuzione del programma utente e sfrutta pochissime risorse dell'hardware utilizzato. In effetti l'FMO52 usa la linea seriale per la comunicazione nei confronti del P.C. di sviluppo, 80 bytes di RAM esterna (da 2000H a 204FH) per le sue variabili, 6631 bytes di ROM per il suo codice ed il TIMER1 per la generazione del baud rate di comunicazione e per l'esecuzione passo passo. Al fine di poter caricare un programma applicativo dal P.C. di sviluppo e di poter settare dei punti d'arresto l'FMO52 deve essere in grado di poter scrivere nell'area codice. Visto che l'architettura dell'8051 non consente queste operazioni quando si usa un'area codice separata da quella dati, e' necessario che l'area RAM di scaricamento del programma sia indirizzata sia come dati che come codice (/PSEN e /RD sommati).
Il mappaggio delle memorie e' cosi' suddiviso :
Vedi paragrafo 2.6 Configurazioni FMO52 per GPC® xxx.
L'FMO52 conserva il contenuto di tutti i registri e della RAM interna quando ripassa il controllo al programma utente; l'utilizzatore puo' quindi lavorare come se il suo programma fosse da solo, senza preoccuparsi di eventuali conflitti con lo stesso FMO52.
2. USO DELL'FMO52
I seguenti comandi sono implementati nel monitor debugger FMO52:
A <indirizzo>
Altera il contenuto della RAM interna del microcontrollore. FMO52 presenta l'indirizzo specificato ed il suo attuale contenuto. Si possono digitare due cifre HEX per cambiare il valore, lo 'SPAZIO' per avanzare alla prossima locazione, il 'BACKSPACE' per ritornare alla locazione precedente o 'RETURN' per terminare il comando di alterazione.
B <n° punto d'arresto> <indirizzo>
Setta un punto d'arresto all'indirizzo specificato. Se l'indirizzo specificato e' 0000 il punto d'arresto e' rimosso. Ci possono essere fino a quattro punti d'arresto, numerati da 0 a 3.
Se lo 'SPAZIO' e' premuto al posto del n. punto d'arresto, sono visualizzati gli indirizzi degli attuali punti d'arresto gia' impostati.
NOTA: La famiglia 8051 di microprocessori non ha una
istruzione di salto che occupi un singolo byte e quindi la gestione
dei punti d'interruzione non puo' essere gestita con le modalita'
classiche. I punti d'arresto sono quindi gestiti inserendo nel
codice un'istruzione "LCALL" a seguito dell'esecuzione
con il comando "G" e ripristinando il codice originario
quando il punto
d'arresto viene raggiunto. Ogni 'LCALL' occupa tre byte di memoria
codice e questo provoca i seguenti limiti:
Bisogna fare attenzione a non settare punti d'arresto in posizioni i cui due indirizzi sucessivi vengono chiamati da altre parti del programma.Per esempio, se viene settato un punto d'interruzione all'indirizzo 1234, nel programma non ci devono essere istruzioni che saltano agli indirizzi 1235 o 1236 (un salto all'indirizzo 1234 e' invece corretto).
Non si possono settare punti d'arresto che vanno sui tre byte occupati da un altro punto d'interruzione. Se si tenta questo settaggio viene rappresentato il messaggio d'errore 'Breakpoint conflict'.
Non si possono fornire comandi di 'G' ad un indirizzo che contiene
un punto d'arresto; anche in questo caso viene visualizzato il
messaggio d'errore 'Breakpoint conflict'. Si cade frequentemente
in questo limite quando si vuole riprendere l'esecuzione a seguito
del raggiungimento di un punto
d'interruzione; in questo caso si deve invece rimuovere il punto
d'arresto raggiunto oppure usare il comando 'S' per avanzare il
puntatore programma (PC) fino a sorpassare le locazioni occupate
dal punto d'arresto.
C <nome registro> <valore>
Cambia i valori dei registri interni dell'8051. Il nome registro coincide con una singola lettera ed il valore puo' essere a 8 o 16 bits, come sotto descritto:
A- Registro A (accumulatore) -> valore a 8 bit.
B- Registro B (registro generico) -> valore a 8 bit.
D- Registro DPTR (puntatore dati) -> valore a 16 bit.
S- Registro SP (puntatore stack) -> valore a 8 bit.
P- Registro PC (puntatore programma) -> valore a 16 bit.
W- Registro PSW (registro di stato) -> valore a 8 bit.
0÷7 Registri R0÷R7 (banco registri attuale) -> valore a 8 bit.D <indirizzo inizio>,<indirizzo fine>
Visualizza il contenuto della memoria dati esterna compresa tra gli indirizzi specificati, in formato HEX ed ASCII. Se come indirizzo di fine e' premuto lo "SPAZIO" allora si assume un indirizzo di fine = FFFF.
E <indirizzo>
Modifica il contenuto dell'area dati esterna del microcontrollore. FMO52 presenta l'indirizzo specificato ed il suo attuale contenuto. Si possono digitare due cifre HEX per cambiare il valore, lo 'SPAZIO' per avanzare alla prossima locazione, il 'BACKSPACE' per ritornare alla locazione precedente o 'RETURN' per terminare il comando di modifica.
F <indirizzo inizio>,<indirizzo fine> <valore>
Riempe la memoria dati esterna dall'indirizzo di inizio fino all'indirizzo di fine con il valore HEX specificato.
G <indirizzo>
Esegue il programma salvato nella memoria codice a partire dall'indirizzo specificato. Se uno "SPAZIO" e' premuto al posto dell'indirizzo, l'esecuzione inizia all'indirizzo attualmente contenuto nel registro puntatore programma (PC).
H
Abilita l'utilizzo dei comandi dedicati all'uso della Flash, questa modalita' viene indicata dal prompt, se viene rappresentato '*' e' in uso la modalita' normale di monitor, mentre se viene rappresentato '&' sono abilitati i comandi per la Flash (questa modalita' modifica il comado 'L') :
W
Programmazione della Flash, copiando il contenuto della RAM da 2050H fino 7FFFH in Flash da 8050H fino DFFFH.
X
Avviene la cancellazione totale del contenuto della FLASH.
I <indirizzo inizio>,<indirizzo fine>
Mostra il contenuto della memoria interna compresa tra i due indirizzi specificati, in formato HEX.
L
Attiva la ricezione di un file in formato HEX Intel o S MOTOROLA
dal P.C. di sviluppo. Il comando termina in corrispondenza della
ricezione delle sequenze ':00' o 'S9' che normalmente coincidono
con l'ultimo record dei file. Se involontariamente viene fornito
questo comando, l'utente puo' ritornare al modo comandi digitando
direttamente una delle due sequenze descritte. Se il prompt in
uso e' '*', il codice scaricato serve per la modalita' debugger,
mentre se il prompt e' '&', il codice scaricato servira' per
la programmazione della Flash, infatti durante lo scaricamento
il file subira' una riallocazione di 6000H bytes in meno (offset
che separa la RAM dalla Flash), questo permettera' la programmazione
della Flash.
All'accensione avverra' l'esecuzione del programma utente direttamente
dalla Flash se era attivata la modalita' di AUTO RUN (vedi 2.4).
R
Mostra i valori attuali dei registri dell'8051 (A, B, DPTR, SP, PC, PSW e R0-R7).
S
Esegue una singola istruzione salvata nell'indirizzo attualmente
salvato nel puntatore programma (PC). Il disassemblato dell'istruzione
eseguita e' rappresentato sul P.C. di sviluppo.
L'uso di questo comando comporta la perdita dell'interrupt del
TIMER1 overflow, in quanto viene ridirezionato nelle locazioni
di memoria RAM: 201BH, 201CH e 201DH.
T
Avviene un test completo della RAM a partire dall'indirizzo 2050H fino a 7FFFH. Questo comando altera completamente il contenuto della RAM, si consiglia, dopo l'uso di questo comando formattare la RAM con il valore 00H tramite il comando F. (Es: F 2050 7FFF 00)
U <indirizzo fine>,<indirizzo fine>
Disassembla la memoria programma compresa tra i due indirizzi
specificati. Se lo 'SPAZIO' e' premuto come indirizzo di fine,
si assume il valore FFFF.
Il comando rappresenta l'indirizzo, i byte di codice, il mnemonico
e gli operandi di ogni istruzione.
?
Mostre un breve sommario dei comandi disponibili.
Al fine di avere la massima quantita' di informazioni su una videata del P.C. di sviluppo, durante la fase di debug, l'FMO52 e' stato progettato per ridurre al minimo le linee di rappresentazione per ogni comando. Tutti i comandi che rappresentano solo una riga di dati (come 'B' e 'S') lo fanno sulla stessa riga su cui il comando e' stato fornito (alla sua destra).
Per i comandi che visualizzano grosse quantita' di dati (come 'D', 'U', ecc.) premendo lo 'SPAZIO' durante la rappresentazione, questa si fermera' sulla prossima riga. Ogni sucessiva pressione dello 'SPAZIO' rappresentera' una ulteriore riga mentre la pressione di 'ENTER' riprendera' la rappresentazione a piena velocita' delle righe rimanenti.
Il tasto 'ESC' puo' essere utilizzato per interrompere definitivamente la rappresentazione di un comando, tornando quindi nella modalita' di attesa comandi, segnalata dalla presenza di un '*' o '&' a capo riga.
L'FMO52 ridireziona tutti i vettori d'interrupt (escluso
quello del TIMER1, che e' usato internamente per l'esecuzione
passo passo ed occupa altre 3 locazioni di memoria RAM, vedi comando
'S') al corrispondente indirizzo all'inizio dell'area RAM a disposizione
dell'utente.
Quando si verifica un programma che usa i vettori d'interrupt
e' sufficiente allocare quest'ultimi nella RAM utente, ovvero
aggiungergli il valore di inizio di tale RAM. Le procedure di
risposta all'interrupt invece non devono subire alcuna variazione.
Quando viene eseguito il programma utente in modalita' di AUTO RUN, l'FMO52 prima di eseguire il codice copia i vettori di interrupt dalla Flash alla RAM, e precisamente da 8050H a 80C5H in 2050H fino 20C5H, in questo modo si avra' lo stesso funzionamento che si aveva nella modalita' debugger.
2.4 Programmazione della Flash e modalita' di AUTO RUN
L'FMO52 riceve i file per il monitor o per essere programmati
in Flash.
La condizione di monitor viene indicata dal prompt '*', dove il/i
files scaricati devono essere contenuti nell'area di memoria da
2050H a 7FFFH, in questa area deve risiedere il programma utente
con le sue variabili.
La condizione di programmazione della Flash viene indicata
dal prompt '&', vedi comando 'H' per l'attivazione, dove il/i
files scaricati devono essere contenuti nell'area di memoria da
8050H a DFFFH, questi files verranno parcheggiati in RAM in attesa
del comando 'W' che esegue la
programmazione della Flash, quindi e' necessario ricompilare il
sorgente con origine 8050H prima di scaricarlo.
Alla prossima accensione, l'FMO52 verifica l'avvenuta programmazione
della Flash che se risulta corretta identifica la modalita' di
AUTO RUN indicata dalla posizione del DIP-SWITCH o dal Jumper
(vedi paragrafo 2.6), di seguito viene eseguito il programma utente
dalla Flash, in questa condizione la RAM disponibile va da 20C6H
a 7FFFH.
2.5 Programmazione della Flash da programma utente
L'area di memoria contenuta nella Flash e' suddivisa in 3 parti :
Quest'ultima area e' possibile gestirla dall'utente a blocchi
di 64 bytes durante la modalita' di AUTO RUN, tramite l'aiuto
di una CALL che risponde all'indirizzo 1A00H la quale utilizza
12 bytes di stack.
Per il corretto uso della procedura prima della sua esecuzione
e' necessario scrivere alcune locazioni di memoria cosi' suddivise
:
Dopo l'uso di questa procedura e' indispensabile verificare il contenuto della locazione 2043H, dove e' indicato l'esito della programmazione secondo il valore assunto da essa :
Esempio : se volessi scrivere nel blocco 1 della Flash tutte le 64 locazioni con il valore 00H :
DATA |
Block |
Check Sum |
from 2001H to 2042H 00H.......00H |
2043H 01H |
2044H 02H |
2.6 Configurazioni FMO52 per GPC® xxx
In aggiunta alle precedenti informazioni valide per ogni tipo di scheda, in questo paragrafo vengono riportate le informazioni che riguardano l'uso dell'FMO52 in abbinamento alle schede grifo®:
COMUNICAZIONE :
BOARD NAME |
Memory Mapping |
Mapping Selection |
EPROM |
RAM |
FLASH |
AUTO RUN |
Jumper Memories |
MODE 1 |
DIP5=On DIP6=On |
IC5 |
IC4 |
IC3 |
DIP8=On |
J4=1-2 J5=1-2 J2=1-2 J3=wire 2-3 J2 |
|
MODE 1 |
DIP5=On DIP6=On |
IC5 |
IC4 |
IC3 |
DIP8=On |
J4=1-2 J5=1-2 J2=1-2 J3=wire 2-3 J2 |
|
MODE 3 |
DIP5=On DIP6=On |
IC8 |
On Board |
IC5 |
J1= Connected |
J4=1-2 J5=wire 2-3 J4 |
|
MODE 3 |
DIP5=On DIP6=On |
IC8 |
On Board |
IC5 |
J1= Connected |
J4=1-2 J5=wire 2-3J 4-2 |
|
MODE 1 |
J1=3 J2=3 J14=1,2,3 ASM |
IC15 |
IC13 |
IC12 |
DIP8=On |
J18=1-2 J17=wire 2-3 J18 |
|
MODE 3 |
DIP5=On DIP6=On |
IC1 |
IC2 |
IC3 |
DIP8=On |
J4;J5=1-2 J2=1-2 J3=wire 2-3 J2 |
|
MODE 3 |
J1= Connected J6=2-3 |
IC4 |
On Board |
IC6 |
J2= Connected |
J3=1-2 J4=wire 2-3 J3 |
|
MODE 3 |
J1= Connected J3=2-3 |
IC7 |
On Board |
IC10 |
J1= Connected |
J4=1-2 J3=wire 2-3 J4 |
|
MODE 3 |
J1= Connected J3=2-3 |
IC7 |
On Board |
IC10 |
J1= Connected |
J4=1-2 J3=wire 2-3 J4 |
Configurare il GET eseguendo la riga di comando GET51/I.
Selezionare la COM Port, selezionare il Baud rate a 19200, selezionare
la modalita' terminale M/DP-(F)MO52 e premere install.
Ora e' possibile avviare il programma digitando GET51,
premere ALT T, collegare la scheda, dare alimentazione
e apparira' il messaggio del monitor FMO52 Rel.1.1, ora
e' possibile fare il DOWNLOAD premendo F8, selezionare
un file.HEX con origine 2050H in poi.
Attendere alcuni secondi fino alla visualizzazione del messaggio:
xxxx Bytes
*
L'indicazione 'xxxx' indica il numero di bytes scaricati, che
coincide con la lunghezza del codice generato arrotondato per
eccesso ad un multiplo di 16 (decimale) o 10 (esadecimale).
Per eseguire il programma digitare "G 2050".
Quando viene eseguita una compilazione ad un sorgente BASCOM
LT/8051, viene generato un file.hex che contiene il codice
macchina del microcontrollore utilizzato.
Questo file va inserito in una EPROM o un microcontrollore con
una ROM interna, ma quando il programma non e' definitivo ma e'
ancore in fase di messa a punto, e' necessario ripetere la
programmazione diverse volte e questo comporta una perdita di
tempo notevole.
Per semplificare la fase di sviluppo di un programma e' sufficiente
installare il monitor debugger FMO52 V.1.1 a bordo della
GPC® xxx, vedi paragrafo 2.6.
4.1 Generazione file.hex tramite il BASCOM LT/8051
Inserire all'inizio di ogni programma basic le seguenti direttive per il compilatore indicate con il simbolo "$".
Schede GPC® con quarzo a 22.1184 MHz
$crystal = 22118400 ' frequenza di clock del microcontrollore
$baud = 19200 ' velocita' di comunicazione RS 232
$romstart = &H2050 ' indirizzo di partenza del codice macchina
$ramstart = &H6000 ' indirizzo di partenza dell'area dati
$ramsize = &H1FFF ' pongo a 8K l'area dati
$large ' indirizzamento a 16 bit
'***************** Inizio programma **********************
Waitms 1 ' ritardo per assestamento segnali
..... ' main del programma
.....
End ' fine del programma
..... ' eventualmente procedure del programma
Inoltre selezionare l'opzione "Option"|"Compiler"|"Misc" e nella finestra che compare selezionare il "Register file", secondo quanto riportato di seguito:
Board |
Register File |
GPC® R63 | 8052.DAT |
GPC® T63 | 8052.DAT |
GPC® 323 | 87C520.DAT |
GPC® 323D | 87C520.DAT |
GPC® 324 | 87C520.DAT |
GPC® 324D | 87C520.DAT |
GPC® 552 | 80C552.DAT |
GPC® 553 | 80C552.DAT |
GPC® 554 | 80C552.DAT |
4.2 Generazione file.hex per AUTO RUN,tramite il BASCOM LT/8051
Sostituire all'inizio di ogni programma basic le seguenti direttive per il compilatore indicate con il simbolo "$".
Compilare il sorgente, attivare il comando 'H' nel monitor, scaricare il programma e programmare la Flash con il comando 'W'.
4.3 Configurare il BASCOM LT/8051 per DOWNLOAD verso il monitor FMO52
La versione minima e necessaria del BASCOM LT/8051 deve essere :
BASCOM LT: IDE 1.20, Lib 1.27 e sucessive.
BASCOM 8051: IDE 1.0.0.13 e sucessive.
Configurazione BASCOM LT:
Configurazione BASCOM 8051:
4.4 Come effettuare il DOWNLOAD
Compilare il programma realizzato, selezionando il comando
opportuno ("File"|"Compile" nel BASCOM
LT, "Program"|"Compile" nel BASCOM
8051).
Se non ci sono errori si puo' attivare la finestra di emulazione
terminale ("File"|"Terminal emulator" nel
BASCOM LT, "Tools"|"Terminal emulator"
nel BASCOM 8051).
Con questa finestra attiva collegare la linea seriale primaria
della GPC® xxx alla COM preselezionata del PC, quindi
alimentare la scheda.
A questo punto sul video deve presentarsi il messaggio del FMO52
Rel.1.1.
Ora e' possibile fare il DOWNLOAD attivando il relativo
comando nella finestra del terminale ("File"|"Send"
nel BASCOM LT, "File"|"Upload file"
nel BASCOM 8051).
Attendere alcuni secondi fino alla visualizzazione del messaggio:
xxxx Bytes
*
L'indicazione 'xxxx' indica il numero di bytes scaricati, che
coincide con la lunghezza del codice generato arrotondato per
eccesso ad un multiplo di 16(decimale) o 10 (esadecimale).
Per eseguire il programma digitare "G 2050".
Pagina aggiornata al 03 Marzo 2004 - Rel.1.3