Hai bisogno di aiuto per capire la mappa di memoria PIC


9

Qualche sfondo. Uso MPLABx con un PicKit2 per programmare diversi tipi di immagini. Al momento è il 16F887. Cerco di attenermi alla catena di strumenti Hi-Tech PICC Lite ma sto diventando sempre più insoddisfatto di come sono assemblate alcune cose. Le operazioni che dovrebbero essere relativamente rapide (considerando il ciclo di istruzione di 500 ns a 8 Mhz) richiedono fino a 20us per essere completate. Quindi ho iniziato a inserire il mio codice ASM per gestirlo.

Tuttavia, ho difficoltà a comprendere la mappa di memoria fornita nel foglio dati a pagina 20.

La memoria del programma inizia alle 0005h. Tuttavia, pagina 23 mostra gli indirizzi dei file dei registri per scopi speciali, come ad esempio la porta A. L'indirizzo della porta A è indicato come "05h".

Sono confuso su come distinguere tra una posizione di memoria 0005h e il registro degli usi speciali situato alle 05h. Come posso fare riferimento ai registri per scopi speciali?

Ho programmato un assemblatore piuttosto esteso per chip HC11 meno recenti, ma questa è la mia prima avventura nella codifica asm PIC. Qualsiasi aiuto qui sarebbe apprezzato.

Risposte:


8

Il PIC usa quella che viene chiamata "Harvard Architecture", il che significa che ha spazi di indirizzi separati per istruzioni e dati.

Se un indirizzo si riferisce a un registro o un'istruzione dipende dal contesto in cui viene utilizzato.

Gli schemi nella sezione 2.1 "Organizzazione della memoria di programma" riguardano la memoria del programma o lo spazio degli indirizzi delle istruzioni. Gli schemi nella sezione 2.2 "Organizzazione della memoria dei dati" riguardano registri e registri di funzioni speciali o spazio di indirizzi della memoria dei dati.


Quindi se dicessi "MOVWF 0x0005", il PIC saprebbe che sto facendo riferimento all'indirizzo 0x0005 nella memoria dei dati e non nello spazio del programma?
Michael,

@Michael: Sì. Se l'indirizzo in un'istruzione si riferisce al programma o alla memoria dei dati dipende dall'istruzione. Questo è descritto per ciascun codice operativo. Fondamentalmente, se si tratta di dati, come MOVWF, accederà alla memoria dei dati. Se si occupa di indirizzi di programma, come GOTO, accederà alla memoria del programma.
Olin Lathrop,

Grazie. Immagino che l'HC11 in cui ero solito fare assemblatore fosse l'arco di von Neumann. Avrei spesso problemi di sovrascrivere il mio codice di istruzione quando stavo solo imparando. Grazie ancora.
Michael,

3

Quello che Dave ha detto, ma voglio anche sottolineare che la memoria del programma inizia da 0, non da 5. A un ripristino, il processore imposta il PC su 0 e inizia a funzionare. In caso di interruzione, il processore provoca effettivamente una chiamata alla posizione 4 e disattiva il bit di abilitazione dell'interruzione globale. La posizione di memoria del programma 5 non è speciale, a parte questa sarà la seconda istruzione della routine di interrupt se si dispone di una routine di interrupt.


Sì, questo è capito. Intendevo che 5 è il primo indirizzo di istruzione generico.
Michael,

@Michael: No, neanche quello. Come ho detto, non c'è nulla di veramente speciale nella posizione di memoria del programma 5. Il primo indirizzo di istruzione generico dell'etichetta non ha senso. Il primo indirizzo di istruzione è 0 e anche 4 è un po 'speciale a causa degli interrupt. Il resto non è davvero speciale e "generico" non ha senso in questo contesto.
Olin Lathrop,

Ok, che ne dici del suo primo indirizzo vettoriale non ripristinato, non interrotto? Quello che sto dicendo è che capisco cosa stai cercando di dire.
Michael,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.