Besoin d'aide pour comprendre la carte mémoire PIC

9

Quelques antécédents. J'utilise MPLABx avec un PicKit2 pour programmer différents types de photos. En ce moment c'est le 16F887. J'essaie de m'en tenir à la chaîne d'outils Hi-Tech PICC Lite, mais je suis de plus en plus mécontent de la façon dont certaines choses sont assemblées. Les opérations qui devraient être relativement rapides (compte tenu du cycle d'instruction de 500 ns à 8 MHz) prennent jusqu'à 20 us pour se terminer. J'ai donc commencé à insérer mon propre code ASM pour y faire face.

Cependant, j'ai du mal à comprendre la carte mémoire fournie dans la fiche technique de la page 20.

La mémoire du programme commence à 0005h. Cependant, la page 23 affiche les adresses de fichiers des registres spéciaux, tels que le port A par exemple. L'adresse du port A est indiquée comme "05h".

Je ne sais pas comment faire la différence entre un emplacement mémoire 0005h et le registre à usage spécial situé à 05h. Comment référencer les registres à usage spécial?

J'ai fait une programmation d'assembleur assez étendue pour les anciennes puces HC11, mais c'est ma première aventure dans le codage asm PIC. Toute aide ici serait appréciée.

Michael
la source

Réponses:

8

Le PIC utilise ce qu'on appelle une "architecture Harvard", ce qui signifie qu'il a des espaces d'adressage séparés pour les instructions et les données.

Le fait qu'une adresse fasse référence à un registre ou à une instruction dépend du contexte dans lequel elle est utilisée.

Les diagrammes de la section 2.1 «Organisation de la mémoire programme» concernent la mémoire programme ou l'espace d'adressage des instructions. Les diagrammes de la section 2.2 «Organisation de la mémoire de données» concernent les registres et les registres de fonctions spéciales ou l'espace d'adressage de la mémoire de données.

Dave Tweed
la source
Donc, si je dis "MOVWF 0x0005", le PIC sait que je fais référence à l'adresse 0x0005 dans la mémoire de données, et non dans l'espace programme?
Michael
@Michael: Oui. Le fait que l'adresse dans une instruction se réfère à un programme ou à une mémoire de données dépend de l'instruction. Ceci est décrit pour chaque opcode. Fondamentalement, s'il traite des données, comme MOVWF, il accède à la mémoire de données. S'il traite des adresses de programme, comme GOTO, il accède à la mémoire du programme.
Olin Lathrop
Je vous remercie. Je suppose que le HC11 dans lequel j'étais assembleur était l'arc de von Neumann. J'avais souvent des problèmes d'écriture excessive de mon code d'instruction quand j'étais en train d'apprendre. Merci encore.
Michael
3

Ce que Dave a dit, mais je tiens également à souligner que la mémoire du programme commence à 0 et non à 5. Lors d'une réinitialisation, le processeur met le PC à 0 et commence à fonctionner. Lors d'une interruption, le processeur provoque effectivement un appel à l'emplacement 4 et désactive le bit de validation d'interruption globale. L'emplacement de mémoire de programme 5 n'est pas spécial, sinon ce sera la deuxième instruction de la routine d'interruption si vous avez une routine d'interruption.

Olin Lathrop
la source
Oui c'est compris. Je voulais dire que 5 est la première adresse d'instruction générique.
Michael
@Michael: Non, ce n'est pas ça non plus. Comme je l'ai dit, il n'y a rien de vraiment spécial à l'emplacement de la mémoire du programme 5. La première adresse d'instruction générique de l' étiquette n'a aucun sens. La première adresse d'instruction est 0, et 4 est aussi un peu spéciale en raison d'interruptions. Le reste n'est vraiment pas spécial et "générique" n'a aucun sens dans ce contexte.
Olin Lathrop
Ok, qu'en est-il de la première adresse vectorielle non réinitialisée et sans interruption? Ce que je dis, c'est que je comprends ce que vous essayez de dire.
Michael