Η μνήμη που περιέχεται στους μικροελεγκτές AVR χωρίζεται σε δυο τμήματα: τη μνήμη προγράμματος και τη μνήμη δεδομένων.
Μνήμη προγράμματος
Η μνήμη προγράμματος αποτελεί έναν συνεχή χώρο μιας μνήμης τύπου flash και χρησιμοποιείται για την αποθήκευση του προγράμματος του μικροελεγκτή. Η ακριβής χωρητικότητα της μνήμης αυτής διαφέρει από μικροελεγκτή σε μικρελεγκτή. Ο μικρελεγκτής ATtiny2313 που είναι μέλος της οικογένειας AVR, διαθέτει μνήμη προγράμματος χωρητικότητας 2Κ η οποία είναι οργανωμένη σε1Κ Χ 16bits, ενώ ο μικροελεγκτής ATmega32 διαθέτει μνήμη προγράμματος των 32Kbytes η οποία είναι οργανωμένη σε 16Κ Χ 16bits. Σημειώστε ότι η ποσότητα του 1Κ αντιστοιχεί σε 1024 αντί της τιμής 1000.
Στην μνήμη προγράμματος εκτός από την αποθήκευση εντολών, αποθηκεύονται και τα λεγόμενα διανύσματα διακοπών (interrupt vectors), η περιοχή των οποίων ξεκινά από την διεύθυνση $0000. Τα διανύσματα διακοπών είναι χρήσιμες διευθύνσεις που χρησιμοποιεί ο μικροελεγκτής για την εξυπηρέτηση των διακοπών και αποθηκεύονται στην αρχή της μνήμης προγράμματος. Το κύριο πρόγραμμα της εκάστου εφαρμογής θα πρέπει να ξεκινά από μια διεύθυνση μνήμης η οποία να βρίσκεται υψηλότερα σε σχέση με το χώρο ο οποίος προβλέπεται για τα διανύσματα διακοπών. Το πλήθος των διαθέσιμων διανυσμάτων διακοπών διαφέρει από επεξεργαστή σε επεξεργαστή.
Η μνήμη δεδομένων
Από την άλλη πλευρά, η μνήμη δεδομένων του συστήματος διαιρείται σε πολλούς διαφορετικούς τύπους. Στο σχήμα φαίνονται οι διάφορες χάρτες μνήμης όπως διατάσσονται τε ένα τυπικό μικροελεγκτή AVR.
Η μνήμη δεδομένων χωρίζεται σε πέντε διαφορετικά τμήματα:
1/ Ομάδα καταχωρητών εργασίας.
Ένα τμήμα της μνήμης δεδομένων που αντιστοιχεί στην ομάδα καταχωρητών γενικής χρήσης GPRs (General Purpose Registers) και οι οποίοι υπάρχουν σε όλους τους μικροελεγκτές της οικογένειας AVR. Σε μερικούς από αυτούς τους καταχωρητές προβλέπονται και επιπλέον ειδικές λειτουργίες. Οι κατεχωρητές εργασίας αναγνωρίζονται με τα σύμβολα R0 έως R31.
2/Τμήμα καταχωρητών εισόδου-εξόδου.
Το τμήμα της μνήμης που αντιστοιχεί στην λεγόμενη μνήμη εισόδου – εξόδου (I/O Memory) που αντιστοιχεί (ταυτίζεται) με τους καταχωρητές εισόδου-εξόδου (I/O registers), που αποτελεί το μέσο διασύνδεσης και επικοινωνίας του μικροελεγκτή AVR με τις περιφεριακές του μονάδες. Πρόκειται ουσιαστικά για ένα τμήμα της μνήμης SRAM στο οποίο η πρόσβαση επιτυγχάνεται με δυο τρόπους. Αφενός αντιμετωπίζεται ως τμήμα της SRAM και εφετέρου ως ομάδα καταχωρητών εισόδου – εξόδου. Σαν τμήμα της SRAM η προσπέλαση τους πραγματοποιείται από την διεύθυνση $20 εως $5F ή σαν καταχωρητές εισόδου εξόδου στις διευθύνσεις $00 έως $3F. Για παράδειγμα ο Ι/Ο register PORTA σαν τμήμα της SRAM έχει διεύθυνση την $3Β και σαν μνήμη εισόδου - εξόδου (Ι/Ο memory) έχει διεύθυνση $1Β. Δεν διαθέτουν όλοι οι μικρεοελεγκτές της σειράς AVR και τους 64 παραπάνω καταχωρητές. Μερικοί μικροελεγκτές διαθέτουν περισσότερους τέτοιους καταχωρητές, ανάλογα με το πλήθος των εσωτερικών περιφερειακών μονάδων.
3/Τμήμα εσωτερικής στατικής μνήμης SRAM
Ένα τμήμα εσωτερικής στατικής μνήμης (internal SRAM). Η μνήμη αυτή περιλαμβάνεται σε όλους τους μικροελεγκτές της σειράς AVR. Η χωρητικότητα της μνήμης αυτής κυμαίνεται από 128bytes μέχρι 4Kbytes. Η μνήμη SRAM χρησιμοποιείται εκτός από την αποθήκευση μεταβλητών και ως στοίβα (stack) του συστήματος. Κατά τη διάρκεια εμφάνισης μιας διακοπής ή κατά την κλίση υπορουτινών, η τρέχουσα κάθε φορά τιμή του μετρητή προγράμματος αποθηκεύεται στη στοίβα. Το μέγεθος της στοίβας περιορίζεται από τη διαθέσιμη χωρητικότητα της εσωτερικής μνήμης SRAM. H τρέχουσα θέση στην οποία βρίσκεται η στοίβα φανερώνεται από την τιμή του καταχωρητή δείκτη. Ο καταχωρητής δείκτη (Stack pointer) έχει μήκος ενός byte στους μικρότερους μικροελεγκτές όπως για παράδειγμα στον ATtiny2313, ενώ στους μεγαλύτερους μικροελεγκτές όπως ο ATmega8535 έχει μήκος δυο bytes (τα οποία συμβολίζονται αντίστοιχα, SPH και SPL). Η τιμή του καταχωρητή δείκτη θα πρέπει να λαμβάνει μια συγκεκριμένη αρχική τιμή κατά την κατάσταση εκκίνησης (reset) και πριν ακόμη γίνει χρήση της στοίβας από το πρόγραμμα της εφαρμογής. Για την ακρίβεια, ο χώρος των διευθύνσεων της μνήμης δεδομένων αρχίζει από την διεύθυνση $60. Επίσης είναι σημαντικό να τονιστεί ότι ο χώρος των ενεργών διευθύνσεων της στοίβας μεγαλώνει προοδευτικά προς τα κάτω, δηλαδή η εισαγωγή μιας τιμής στην στοίβα (διαδικασία push) ελαττώνει την τιμή του δείκτη στοίβας κατά μια μονάδα, ενώ αντίστοιχα, η ανάκληση μιας τιμής που έχει αποθηκευτεί στην στοίβα (διαδικασία pop) αυξάνει κατά μια μονάδα τα περιεχόμενα του δείκτη στοίβας.
4/Τμήμα εξωτερικής μνήμης SRAM
Ένα τμήμα εξωτερικής στατικής μνήμης SRAM. Η μνήμη αυτή χρησιμοποιείται μόνο στους μεγαλύτερους μικροελεγκτές της σειράς AVR. Στους μικροελεγκτές αυτούς που διαθέτουν θύρες πρόσβασης σε εξωτερικό δίαυλο δεδομένων και διευθύνσεων (όπως ο ATmega8515), μπορεί να χρησιμοποιηθεί οποιαδήποτε ποσότητα εξωτερικής μνήμης SRAM επιθυμεί ο χρήστης.
5/ Τμήμα εσωτερικής μνήμης τύπου EEPROM
Ένα τμήμα εσωτερικής μνήμης τύπου EEPROM. Αυτός ο τύπος της εσωτερικής μνήμης είναι διαθέσιμος σχεδόν σε όλους τους μικροελεγκτές AVR και η πρόσβαση του επιτυγχάνεται σε ιδιαίτερο χώρο διευθύνσεων μνήμης. Η αρχική διεύθυνση της μνήμης EEPROM είναι πάντα η διεύθυνση $0000. Η χωρητικότητα της μνήμης αυτής κυμαίνεται από 64 bytes έως 4 Kbytes στους διάφορους μικροελεγκτές της σειράς. Η EEPROM μπορεί να διαβαστεί και να γραφτεί από οποιαδήποτε πρόγραμμα. Τονίζεται το γεγονός ότι, η διαδικασία ενός κύκλου ανάγνωσης της μνήμης EEPROM είναι ταχύτερη από την αντίστοιχη διαδικασία ενός κύκλου εγγραφής. Επίσης θα πρέπει να γνωρίζουμε ότι η μνήμη EEPROM μπορεί να δεχθεί μέχρι και 100 000 κύκλους εγγραφής.
Μνήμη προγράμματος
Η μνήμη προγράμματος αποτελεί έναν συνεχή χώρο μιας μνήμης τύπου flash και χρησιμοποιείται για την αποθήκευση του προγράμματος του μικροελεγκτή. Η ακριβής χωρητικότητα της μνήμης αυτής διαφέρει από μικροελεγκτή σε μικρελεγκτή. Ο μικρελεγκτής ATtiny2313 που είναι μέλος της οικογένειας AVR, διαθέτει μνήμη προγράμματος χωρητικότητας 2Κ η οποία είναι οργανωμένη σε1Κ Χ 16bits, ενώ ο μικροελεγκτής ATmega32 διαθέτει μνήμη προγράμματος των 32Kbytes η οποία είναι οργανωμένη σε 16Κ Χ 16bits. Σημειώστε ότι η ποσότητα του 1Κ αντιστοιχεί σε 1024 αντί της τιμής 1000.
Στην μνήμη προγράμματος εκτός από την αποθήκευση εντολών, αποθηκεύονται και τα λεγόμενα διανύσματα διακοπών (interrupt vectors), η περιοχή των οποίων ξεκινά από την διεύθυνση $0000. Τα διανύσματα διακοπών είναι χρήσιμες διευθύνσεις που χρησιμοποιεί ο μικροελεγκτής για την εξυπηρέτηση των διακοπών και αποθηκεύονται στην αρχή της μνήμης προγράμματος. Το κύριο πρόγραμμα της εκάστου εφαρμογής θα πρέπει να ξεκινά από μια διεύθυνση μνήμης η οποία να βρίσκεται υψηλότερα σε σχέση με το χώρο ο οποίος προβλέπεται για τα διανύσματα διακοπών. Το πλήθος των διαθέσιμων διανυσμάτων διακοπών διαφέρει από επεξεργαστή σε επεξεργαστή.
Η μνήμη δεδομένων
Από την άλλη πλευρά, η μνήμη δεδομένων του συστήματος διαιρείται σε πολλούς διαφορετικούς τύπους. Στο σχήμα φαίνονται οι διάφορες χάρτες μνήμης όπως διατάσσονται τε ένα τυπικό μικροελεγκτή AVR.
Η μνήμη δεδομένων χωρίζεται σε πέντε διαφορετικά τμήματα:
1/ Ομάδα καταχωρητών εργασίας.
Ένα τμήμα της μνήμης δεδομένων που αντιστοιχεί στην ομάδα καταχωρητών γενικής χρήσης GPRs (General Purpose Registers) και οι οποίοι υπάρχουν σε όλους τους μικροελεγκτές της οικογένειας AVR. Σε μερικούς από αυτούς τους καταχωρητές προβλέπονται και επιπλέον ειδικές λειτουργίες. Οι κατεχωρητές εργασίας αναγνωρίζονται με τα σύμβολα R0 έως R31.
2/Τμήμα καταχωρητών εισόδου-εξόδου.
Το τμήμα της μνήμης που αντιστοιχεί στην λεγόμενη μνήμη εισόδου – εξόδου (I/O Memory) που αντιστοιχεί (ταυτίζεται) με τους καταχωρητές εισόδου-εξόδου (I/O registers), που αποτελεί το μέσο διασύνδεσης και επικοινωνίας του μικροελεγκτή AVR με τις περιφεριακές του μονάδες. Πρόκειται ουσιαστικά για ένα τμήμα της μνήμης SRAM στο οποίο η πρόσβαση επιτυγχάνεται με δυο τρόπους. Αφενός αντιμετωπίζεται ως τμήμα της SRAM και εφετέρου ως ομάδα καταχωρητών εισόδου – εξόδου. Σαν τμήμα της SRAM η προσπέλαση τους πραγματοποιείται από την διεύθυνση $20 εως $5F ή σαν καταχωρητές εισόδου εξόδου στις διευθύνσεις $00 έως $3F. Για παράδειγμα ο Ι/Ο register PORTA σαν τμήμα της SRAM έχει διεύθυνση την $3Β και σαν μνήμη εισόδου - εξόδου (Ι/Ο memory) έχει διεύθυνση $1Β. Δεν διαθέτουν όλοι οι μικρεοελεγκτές της σειράς AVR και τους 64 παραπάνω καταχωρητές. Μερικοί μικροελεγκτές διαθέτουν περισσότερους τέτοιους καταχωρητές, ανάλογα με το πλήθος των εσωτερικών περιφερειακών μονάδων.
3/Τμήμα εσωτερικής στατικής μνήμης SRAM
Ένα τμήμα εσωτερικής στατικής μνήμης (internal SRAM). Η μνήμη αυτή περιλαμβάνεται σε όλους τους μικροελεγκτές της σειράς AVR. Η χωρητικότητα της μνήμης αυτής κυμαίνεται από 128bytes μέχρι 4Kbytes. Η μνήμη SRAM χρησιμοποιείται εκτός από την αποθήκευση μεταβλητών και ως στοίβα (stack) του συστήματος. Κατά τη διάρκεια εμφάνισης μιας διακοπής ή κατά την κλίση υπορουτινών, η τρέχουσα κάθε φορά τιμή του μετρητή προγράμματος αποθηκεύεται στη στοίβα. Το μέγεθος της στοίβας περιορίζεται από τη διαθέσιμη χωρητικότητα της εσωτερικής μνήμης SRAM. H τρέχουσα θέση στην οποία βρίσκεται η στοίβα φανερώνεται από την τιμή του καταχωρητή δείκτη. Ο καταχωρητής δείκτη (Stack pointer) έχει μήκος ενός byte στους μικρότερους μικροελεγκτές όπως για παράδειγμα στον ATtiny2313, ενώ στους μεγαλύτερους μικροελεγκτές όπως ο ATmega8535 έχει μήκος δυο bytes (τα οποία συμβολίζονται αντίστοιχα, SPH και SPL). Η τιμή του καταχωρητή δείκτη θα πρέπει να λαμβάνει μια συγκεκριμένη αρχική τιμή κατά την κατάσταση εκκίνησης (reset) και πριν ακόμη γίνει χρήση της στοίβας από το πρόγραμμα της εφαρμογής. Για την ακρίβεια, ο χώρος των διευθύνσεων της μνήμης δεδομένων αρχίζει από την διεύθυνση $60. Επίσης είναι σημαντικό να τονιστεί ότι ο χώρος των ενεργών διευθύνσεων της στοίβας μεγαλώνει προοδευτικά προς τα κάτω, δηλαδή η εισαγωγή μιας τιμής στην στοίβα (διαδικασία push) ελαττώνει την τιμή του δείκτη στοίβας κατά μια μονάδα, ενώ αντίστοιχα, η ανάκληση μιας τιμής που έχει αποθηκευτεί στην στοίβα (διαδικασία pop) αυξάνει κατά μια μονάδα τα περιεχόμενα του δείκτη στοίβας.
4/Τμήμα εξωτερικής μνήμης SRAM
Ένα τμήμα εξωτερικής στατικής μνήμης SRAM. Η μνήμη αυτή χρησιμοποιείται μόνο στους μεγαλύτερους μικροελεγκτές της σειράς AVR. Στους μικροελεγκτές αυτούς που διαθέτουν θύρες πρόσβασης σε εξωτερικό δίαυλο δεδομένων και διευθύνσεων (όπως ο ATmega8515), μπορεί να χρησιμοποιηθεί οποιαδήποτε ποσότητα εξωτερικής μνήμης SRAM επιθυμεί ο χρήστης.
5/ Τμήμα εσωτερικής μνήμης τύπου EEPROM
Ένα τμήμα εσωτερικής μνήμης τύπου EEPROM. Αυτός ο τύπος της εσωτερικής μνήμης είναι διαθέσιμος σχεδόν σε όλους τους μικροελεγκτές AVR και η πρόσβαση του επιτυγχάνεται σε ιδιαίτερο χώρο διευθύνσεων μνήμης. Η αρχική διεύθυνση της μνήμης EEPROM είναι πάντα η διεύθυνση $0000. Η χωρητικότητα της μνήμης αυτής κυμαίνεται από 64 bytes έως 4 Kbytes στους διάφορους μικροελεγκτές της σειράς. Η EEPROM μπορεί να διαβαστεί και να γραφτεί από οποιαδήποτε πρόγραμμα. Τονίζεται το γεγονός ότι, η διαδικασία ενός κύκλου ανάγνωσης της μνήμης EEPROM είναι ταχύτερη από την αντίστοιχη διαδικασία ενός κύκλου εγγραφής. Επίσης θα πρέπει να γνωρίζουμε ότι η μνήμη EEPROM μπορεί να δεχθεί μέχρι και 100 000 κύκλους εγγραφής.