ΜΕΡΟΣ 1. Διακοπές (Interrupts)



Σχετικά έγγραφα
Embedded Systems Laboratory LAB 06 CLKS-a

12. Διακοπές Interrupts (IRQ)

Οργάνωση και Αρχιτεκτονική Υπολογιστών. Κεφάλαιο 7.4

ΗΜΥ 213. Εργαστήριο Οργάνωσης Η.Y. και Μικροεπεξεργαστών week 5. Διδάσκων: Δρ. Γιώργος Ζάγγουλος

Μικροεπεξεργαστές. Σημειώσεις Μαθήματος Υπεύθυνος: Δρ Άρης Παπακώστας,

Κεφάλαιο 4 Σύνδεση Μικροεπεξεργαστών και Μικροελεγκτών ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ ΠΑΡΑΡΤΗΜΑ ΚΑΣΤΟΡΙΑΣ ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

Είναι το πρωτόκολλο RS232 που χρησιμοποιείται στις σειριακές θύρες COM με τη διαφορά ότι εκτελείται σε επίπεδο τάσεων TTL. 2

ΗΜΥ Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 5: Εξωτερικές διακοπές του 8051

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Μάθημα 8: Επικοινωνία Συσκευών με τον Επεξεργαστή

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

10. Πληκτρολόγιο matrix 4x4

Αρχιτεκτονική υπολογιστών

Καθολική Σειριακή Διεπιφάνεια (Universal Serial Interface)

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

Αρχιτεκτονική υπολογιστών

Ερωτήσεις θεωρίας MY. Μέρος Α. Υλικό.

Οργάνωση Υπολογιστών (IΙI)

Λειτουργικά Συστήματα Πραγματικού Χρόνου

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013

Βασικές συσκευές Ε/Ε. Είσοδος Έξοδος στον υπολογιστή. Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (IΙI) Μ.

Άσκηση 2 η : Εισαγωγή στο eζ430-f2013 με χρήση του IAR Embedded Workbench, ενός αναπτυξιακού περιβάλλοντος για τα MSP430

Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) Τμήματα ΚΜΕ (CPU) Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (Ι)

Οργάνωση Υπολογιστών (Ι)

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή

Προγραμματισμός σε C και προγραμματισμός Μακροεντολών με τον ΕΖ430

Αρχιτεκτονική Υπολογιστών

8051 Interrupt Ports. Name Alternate Function

Μάθημα 3.8 Τεχνικές μεταφοράς δεδομένων Λειτουργία τακτικής σάρωσης (Polling) Λειτουργία Διακοπών DMA (Direct Memory Access)

ΠΛΕ- 027 Μικροεπεξεργαστές 7ο μάθημα: Αρχιτεκτονική πυρήνα: Πρόβλεψη διακλάδωσης, Εξαιρέσεις

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems)

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

ΜΙΚΡΟΕΛΕΓΚΤΕΣ ΘΕΜΑΤΑ ΦΕΒ Ημ/νία:

Σελ. Θεωρία : Θεωρητική εισαγωγή στους µικροελεγκτές MSP430. Τίτλος

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

ΕΙΣΑΓΩΓΗ. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ

10. Πληκτρολόγιο matrix 4x4

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

Εικονική Μνήμη (Virtual Μemory)

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΑ ΗΛΕΚΤΡΟΝΙΚΑ

Ενεργοποίηση και ιαχείριση σηµάτων διακοπής

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2014

Αρχιτεκτονική υπολογιστών

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Αρχιτεκτονικές Συνόλου Εντολών

Μαθαίνοντας το hardware του αναπτυξιακού

WDT και Power Up timer

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

Πανεπιστήμιο Θεσσαλίας- Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΗΥ430- Εργαστήριο Ψηφιακών Κυκλωμάτων

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΚΑΤΑΧΩΡΗΤΕΣ ΟΛΙΣΘΗΤΕΣ

Μονάδα Ελέγχου Καυστήρων Πετρελαίου. Ρύθμιση Επιθυμητής Θερμοκρασίας Νερών Έλεγχος Κυκλοφορητή. Αντιπαγοτική Προστασία

Προγραμματισμός Ι (ΗΥ120)

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication

1. Εισαγωγή. Λειτουργικά Συστήματα Η/Υ. Διεργασίες. Ορισμός ΚΕΦΑΛΑΙΟ 3 - ΔΙΕΡΓΑΣΙΕΣ. Κεφάλαιο 3 «Διεργασίες»

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

; Γιατί είναι ταχύτερη η λήψη και αποκωδικοποίηση των εντολών σταθερού μήκους;

«ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΕΣ» ΕΣΩΤΕΡΙΚΗ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΚΑΙ ΛΕΙΤΟΥΡΓΙΕΣ

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Λειτουργικά Συστήματα (Λ/Σ)

Ολοκληρωμένα Κυκλώματα - Φθινόπωρο 2014 Γ. Δημητρακόπουλος. Εργαστηριακή άσκηση 2

Καταχωρητής STATUS. IRP: Bit επιλογής περιοχής μνήμης (Bank) για την έμμεση διευθυνσιοδότηση 1= Bank2, Bank3 0= Bank0, Bank1

Λιβανός Γιώργος Εξάμηνο 2017Β

Be.Be.Be.Be. ήχος, ραδιόφωνο ( FM / AM )

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή

2. Δήλωση μεταβλητών. #include <avr/io.h> #include <util/delay.h> unsigned char i=0xa0; register unsigned char i asm("r3");

Περίληψη. ΗΜΥ-210: Λογικός Σχεδιασµός Εαρινό Εξάµηνο Μετρητής Ριπής (Ripple Counter) Μετρητές (Counters) Μετρητής Ριπής (συν.

ΗΜΥ 210: Σχεδιασμός Ψηφιακών Συστημάτων. Μετρητές 1

ΚΕΦΑΛΑΙΟ 3: Λειτουργικά Συστήµατα

Εφαρμογές Σειριακής Επικοινωνίας

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

; Τι περιέχεται στη συσκευασία ενός μικροεπεξεργαστή σήμερα;

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΑΠΑΝΤΗΣΕΙΣ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2008

Εισαγωγή στην Πληροφορική

Λειτουργικά Συστήματα

Δίκτυα Η/Υ ςτην Επιχείρηςη

ΗΜΥ-210: Σχεδιασμός Ψηφιακών Συστημάτων

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Γ ΕΠΑΛ 14 / 04 / 2019

Ας ξεκινήσουμε. Macro-instructions. (Assembly level) Micro-instructions Main memory. (micro-code)

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 4: Ρουτίνες καθυστέρησης. [Συγγραφή ρουτίνας καθυστέρησης]

ΑΣΚΗΣΗ 3 ΑΣΚΗΣΗ 3. Μηχανικοί ιακόπτες. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ

Μικροαρχιτεκτονική του LC3

MultiBoot Οδηγός χρήσης

Παραλληλισµός Εντολών (Pipelining)

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Transcript:

Εργαστήριο Μικροελεγκτών 6η ΑΣΚΗΣΗ ΗΜΕΡΟΜΗΝΙΑ ΟΝΟΜΑ ΕΠΩΝΥΜΟ ΑΜ ΕΞΑΜΗΝΟ ΣΚΟΠΟΣ ΕΡΓΑΣΤΗΡΙΟΥ Διακοπές (Interrupts) Τρόπο Λειτουργίας (Operating Modes) ΜΕΡΟΣ 1. Διακοπές (Interrupts) 1. Εισαγωγή 1. Μια διακοπή (interrupt) είναι ένα γεγονός σε επίπεδο υλικού που ενεργοποιεί τον επεξεργαστή ώστε να μεταπηδήσει από την τρέχουσα κατάστασή του (που περιέχεται στον program counter, PC) σε μια συγκεκριμένη θέση του κώδικα. 2. Ο μικροελεγκτής έχει πολλά διαφορετικά είδη διακοπών και για καθεμία ο επεξεργαστής θα στείλει τη ροή της εκτέλεσης σε ένα συγκεκριμένο και μοναδικό σημείο της μνήμης. 3. Κάθε διακοπή χαρακτηρίζεται από ένα τμήμα μήκους λέξης στο πάνω άκρο της μνήμης. Αυτή είναι αρκετή μνήμη για να περιγράψει μια μεταπήδηση στη θέση μνήμης όπου θα γίνει ο χειρισμός της διακοπής. 2. Είδη Διακοπών 1. Υπάρχουν τρία είδη διακοπών: Επανεκκίνηση συστήματος Μη καλυμμένες (ΝΜΙ) διακοπές Καλυμμένες διακοπές 2. Μια καλυμμένη διακοπή (maskable interrupt) είναι μια διακοπή της οποίας το γεγονός ενεργοποίησης δεν είναι πάντα σημαντικό, οπότε ο προγραμματιστής μπορεί να αποφασίσει ότι το γεγονός δεν θα πρέπει να οδηγήσει σε μεταπήδηση από την τρέχουσα θέση εκτέλεσης του κώδικα. 1

3. Μια ακάλυπτη διακοπή (nonmaskable interrupt) όπως π.χ. πίεση του κουμπιού επανεκκίνησης, είναι τόσο σημαντική που δεν πρέπει ποτέ να την αγνοήσει ο επεξεργαστής, ο οποίος και θα μεταπηδήσει πάντα στη θέση μνήμης για την εξυπηρέτηση της διακοπής αυτής, όταν αυτή συμβεί. 4. Συχνά οι καλυμμένες διακοπές απενεργοποιούνται για να απλοποιηθεί η συμπεριφορά της διάταξης. Ειδικοί καταχωρητές ελέγχου επιτρέπουν στις μηκαλυμμένες διακοπές καθώς και σε ειδικές μη καλυμμένες διακοπές να απενεργοποιούνται. 3. Μη Καλυμμένες Διακοπές (ΝΜΙ) 1. Οι ΝΜΙ δεν είναι καλυμμένες με το GIE bit (General Interrupt Enable bit), αλλά ενεργοποιούνται με επιμέρους bits ενεργοποίησης διακοπής (NMIIE, ACCVIE, OFIE). 2. Όταν μια ΝΜΙ διακοπή γίνει αποδεκτή, επανατίθενται αυτόματα όλα τα ΝΜΙ interrupt enable bits. Η εκτέλεση του προγράμματος ξεκινά από την αποθηκευμένη διεύθυνση στο μη καλυμμένο διάνυσμα διακοπής. Αυτό το διάνυσμα βρίσκεται στη θέση μνήμης 0FFFCh. Το λογισμικό του χρήστη πρέπει να θέσει τα απαιτούμενα NMI bits ενεργοποίησης διακοπής, σε λειτουργία ικανότητας επανάθεσης. 3. Μια μη καλυμμένη διακοπή μπορεί να προκληθεί από τρεις αιτίες: Λόγω ακμής τάσης στον ακροδέκτη RST( )/NMI όταν αυτός είναι διαμορφωμένος σε τρόπο NMI Λόγω αστοχίας στον ταλαντωτή Λόγω παράβασης στην προσπέλασης της μνήμης flash 4. Κατά την παροχή ισχύος στη διάταξη, ο ακροδέκτης RST( )/NMI διαμορφώνεται σε τρόπο επανεκκίνησης. Η λειτουργία του αυτή επιλέγεται μέσω του καταχωρητή WDTCLT. Αν ο ακροδέκτης αυτός είναι σε τρόπο επανεκκίνησης, η CPU διατηρείται σε κατάσταση επανεκκίνησης, για όσο χρόνο ο ακροδέκτης είναι σε 0. Αν αλλάξει σε 1, η CPU ξεκινά την εκτέλεση του προγράμματος από τη διεύθυνση που είναι αποθηκευμένη στο διάνυσμα επανεκκίνησης, στη θέση 0FFFEh, ενώ τίθεται η σημαία RSTIFG. 5. Σημείωση: Όταν ο ακροδέκτης RST( )/NMI είναι σε διαμόρφωση ΝΜΙ, ένα σήμα που προκαλεί ένα γεγονός ΝΜΙ δε θα πρέπει να κρατήσει τον ακροδέκτη σε 0. Αν ένα PUC (power up Clear) προκληθεί από μια διαφορετική πηγή ενώ το NMI είναι σε 0, η διάταξη θα κρατηθεί σε κατάσταση επανεκκίνησης γιατί το PUC αλλάζει τον ακροδέκτη αυτό σε λειτουργία επανεκκίνησης. 6. Σημείωση: Όταν ο ακροδέκτης RST( )/NMI είναι σε διαμόρφωση ΝΜΙ, και αλλάξει το WDTNMIES bit, μπορεί να προκληθεί μια ΝΜΙ, ανάλογα με την τρέχουσα τάση στον ακροδέκτη. Αν το bit επιλογής της ΝΜΙ ακμής αλλάξει πριν επιλεγεί ο τρόπος ΝΜΙ, δεν θα παραχθεί ΝΜΙ. 7. Όταν συμβεί παραβίαση προσπέλασης της flash, τότε ACCVIFG=1. Αυτή η παραβίαση μπορεί να ενεργοποιηθεί για να παράγει μια ΝΜΙ με το να θέσουμε 2

ACCVIE=1. Η σημαία ACCVIFG μπορεί στη συνέχεια να ελεγχθεί από τη ρουτίνα εξυπηρέτησης ΝΜΙ για να διαπιστώσουμε αν η ΝΜΙ προκλήθηκε από παραβίαση προσπέλασης flash. 8. Το σήμα αστοχίας ταλαντωτή προειδοποιεί για πιθανό σφάλμα λειτουργίας του κρυσταλλικού ταλαντωτή. Η αστοχία στον ταλαντωτή μπορεί να παράγει ΝΜΙ διακοπή αφού θέσουμε πρώτα το OFIE=1. Στη συνέχεια πρέπει να ελέγξουμε τη σημαία OFIFG μέσω της συνάρτησης εξυπηρέτησης ΝΜΙ για να προσδιορίσουμε αν η ΝΜΙ προκλήθηκε από αστοχία του ταλαντωτή. 9. Ένα σήμα PUC μπορεί να προκαλέσει σφάλμα ταλαντωτή, γιατί το PUC αλλάζει τον LFXT1 σε τρόπο LF, δηλαδή κλείνει τον HF τρόπο. Το PUC σήμα κλείνει και τον XT2. 3

4. Μπλόκ Διάγραμμα Αιτίων NMI 5. Παράδειγμα του Διαχειριστή της ΝΜΙ Διακοπής 1. Η ΝΜΙ διακοπή είναι μια διακοπή που μπορεί να προκληθεί από πολλά γεγονότα. Μια διακοπή ΝΜΙ αυτόματα επαναθέτει τα NMIIE, OFIE και ACCVIE interruptenable. Η συνάρτηση εξυπηρέτησης της ΝΜΙ επαναθέτει τις σημαίες διακοπής και επανενεργοποιεί τα interrupt enable bits σύμφωνα με τις ανάγκες της εφαρμογής, όπως φαίνεται στο επόμενο σχήμα. 4

2. Για να αποφύγουμε εμφωλευμένες διακοπές, τα ACCVIE, NMIIE, και OFIE δεν θα πρέπει να τίθενται εντός της ρουτίνας χειρισμού της NMI. 6. Καλυμμένες Διακοπές 1. Οι καλυμμένες διακοπές προκαλούνται από περιφερειακά με δυνατότητα παραγωγής διακοπής συμπεριλαμβανομένου του watchdog timer για την περίπτωση υπερχείλισης σε λειτουργίας μέτρησης χρονικού διαστήματος. 2. Κάθε πηγή καλυμμένης διακοπής μπορεί να απενεργοποιηθεί ανεξάρτητα μέσω ενός bit interrupt enable, διαφορετικά όλες οι καλυμμένες διακοπές απενεργοποιούνται μέσω του GIE (General Interrupt Enable bit) του καταχωρητή κατάστασης (SR). 7. Προτεραιότητα Διακοπών 1. Οι διακοπές γενικά έχουν μια προτεραιότητα. Όταν δύο διακοπές συμβούν την ίδια στιγμή, αυτή με τη μεγαλύτερη προτεραιότητα θα διεκπεραιωθεί πρώτη. Π.χ. αν σβήσει ο μετρητής ενός περιφερειακού την ίδια στιγμή που πατηθεί το κουμπί επανεκκίνησης ο επεξεργαστής θα αγνοήσει το μετρητή του περιφερειακού γιατί η επανεκκίνηση είναι πιο σημαντική (έχει μεγαλύτερη προτεραιότητα). 2. Όσο πιο κοντά είναι ένα τμήμα του ολοκληρωμένου στη CPU/NMIRS, τόσο μεγαλύτερη και η αντίστοιχη προτεραιότητα της διακοπής που παράγει. Το επόμενο σχήμα δείχνει ποιοτικά την ιεραρχία ως προς την προτεραιότητα διακοπών. 5

3. Η πιο σημαντική διακοπή στον MSP430 είναι η διακοπή επανεκκίνησης. Όταν ο επεξεργαστής εξακριβώσει μια επανεκκίνηση ή εκκίνηση για πρώτη φορά, μεταπηδά στην αρχή της μνήμης και εκτελεί τις εντολές που υπάρχουν εκεί. 4. Το διάνυσμα διακοπής με τη μεγαλύτερη προτεραιότητα ξεκινά από τη θέση μνήμης 0xFFFE. 5. Το διάνυσμα διακοπής με τη μικρότερη προτεραιότητα ξεκινά από τη θέση μνήμης 0xFFE0. 6. Το πλήρες σύνολο διακοπών διέπεται από τις εξής προτεραιότητες: 8 μη καλυμμένη διακοπή: Εξωτερική επανεκκίνηση, Ενεργοποίηση (Power Up), Επανεκκίνηση Watchdog Timer, Παραβίαση Κλειδιού Flash, NMI. 7 μη καλυμμένη διακοπή: Σφάλμα ταλαντωτή, Παραβίαση προσπέλασης μνήμης Flash. 6 καλυμμένη διακοπή: Watchdog Timer. 5 καλυμμένη διακοπή: Διακοπή από τον Καταχωρητή Σύλληψης/Σύγκρισης 0 (CCR0) του Timer_A. 4 καλυμμένη διακοπή: Διακοπή από τον Καταχωρητή Σύλληψης/Σύγκρισης 1 (CCR1) του Timer_A. 3 καλυμμένη διακοπή: Διακοπή από τον Sigma/Delta 16 bit (SD16) μετατροπέα. 2 καλυμμένη διακοπή: Διακοπές από το Universal Serial Interface (USI). 1 καλυμμένη διακοπή: Διακοπές από την Port 2 I/O. 6

0 καλυμμένη διακοπή: Διακοπές από την Port 1 I/O. 8. Επεξεργασία Διακοπών 1. Όταν δημιουργείται μια διακοπή από ένα περιφερειακό τότε 1. Τίθεται το interrupt enable bit 2. Τίθεται το GIE 3. Ξεκινά η συνάρτηση διαχείρισης της διακοπής 2. Μόνο το επιμέρους bit ενεργοποίησης πρέπει να τεθεί για την απαίτηση μηκαλυμμένης διακοπής. 3. Η συνάρτηση που καλείται ή ο συγκεκριμένος κώδικας assembly που εκτελείται όταν συμβεί μια διακοπή, ονομάζεται ρουτίνα εξυπηρέτησης διακοπών (Interrupt Service Routine, ISR). 4. Μια σημαία διακοπής (Interrupt Flag) IFG είναι ένα bit που όταν τίθεται ενεργοποιεί τη διακοπή. Η ολοκλήρωση της διαδικασίας χειρισμού της διακοπής επαναθέτει τη σημαία στην κανονική της κατάσταση. 5. Ένα bit interrupt enable (IE) είναι ένα bit ελέγχου που υποδεικνύει στον επεξεργαστή ότι μια συγκεκριμένη καλυμμένη διακοπή θα πρέπει ή όχι να αγνοηθεί. Συνήθως υπάρχει ένα τέτοιο bit ανά διακοπή και συνήθως όλα αυτά βρίσκονται μαζί σε έναν καταχωρητή. 9. Αποδοχή Διακοπής και Διεκπεραίωση 1. Όταν συμβεί μια διακοπή στον MSP430, ακολουθείται μια συγκεκριμένη διαδικασία γεγονότων. Αυτή η διαδικασία χρειάζεται 5 κύκλους (CPUx) ή 6 κύκλους (CPU) μετά την ολοκλήρωση της τρέχουσας εντολής. Ξεκινά με την αποδοχή της αίτησης διακοπής και διαρκεί μέχρι την αρχή εκτέλεσης της πρώτης εντολής της διαδικασίας εξυπηρέτησης διακοπής. Στη συνέχεια παρουσιάζονται τα βήματα αυτά: I. Ολοκληρώνεται η τρέχουσα εντολή. II. Ο program counter (PC) όπως είναι μετά την παραπάνω εντολή, προωθείται στη στοίβα. Η στοίβα είναι κομμάτι μνήμης της οποίας τα περιεχόμενα ακολουθούν τοποθέτηση LIFO. Ο δείκτης στοίβας ανανεώνεται κατάλληλα ώστε να δείχνει στο πιο πρόσφατα τοποθετημένο στοιχείο στη στοίβα. Αυτό επιτρέπει στον επεξεργαστή να καλεί συναρτήσεις και να παρακολουθεί διακοπές. Όταν κάτι σπρώχνεται στη στοίβα, ο δείκτης στοίβας αυξάνεται και τα προωθημένα δεδομένα γράφονται σε αυτή τη θέση. Η διαδικασία της αντιγραφής δεδομένων από τη στοίβα και της ελάττωσης του δείκτη στοίβας λέγεται εξαγωγή από τη στοίβα. III. Ο status register(sr) προωθείται στη στοίβα. IV. Επιλέγεται η διακοπή με τη μεγαλύτερη προτεραιότητα από αυτές που περιμένουν διεκπεραίωση. 7

V. Οι διακοπές μιας πηγής επαναθέτουν αυτόματα τις σημαίες αίτησης διακοπής. Οι διακοπές πολλαπλών πηγών δε θέτουν αυτόματα τις αντίστοιχες σημαίες αίτησης ώστε η ρουτίνα εξυπηρέτησης διακοπής να μπορεί να εξακριβώσει την αιτία τους. VI. Ο SR με εξαίρεση το bit SCG0 καθαρίζεται. Αυτό θα βγάλει τον επεξεργαστή από οποιαδήποτε κατάσταση χαμηλής ισχύος. Αυτό επίσης αδρανοποιεί τις διακοπές (bit GIE) κατά τη διάρκεια της διακοπής. VII. Το περιεχόμενο του διανύσματος διακοπής φορτώνεται στοn PC. Ουσιαστικά, ο επεξεργαστής εκτελεί την εντολή στη συγκεκριμένη θέση μνήμης (το διάνυσμα διακοπής) για τη συγκεκριμένη διακοπή. Αυτό θα πρέπει πάντα να είναι μια μεταπήδηση στη ρουτίνα διεκπεραίωσης διακοπών. 10. Επιστροφή από Διακοπή 1. Όταν φτάσει το τέλος της ρουτίνας χειρισμού διακοπής ο επεξεργαστής του μικροελεγκτή θα εκτελέσει ένα συγκεκριμένο σύνολο από βήματα για να συνεχίσει την εκτέλεση του κώδικα από το σημείο που βρισκόταν πριν τη διακοπή. Η συνάρτηση χειρισμού της διακοπής ολοκληρώνεται με την εντολή RETI (return from an interrupt service routine) 2. Αυτή η διαδικασία υλοποιείται σε 5 κύκλους (CPU) ή σε 3 κύκλους (CPUx): I. Ο status register και όλες οι προηγούμενες ρυθμίσεις εξάγονται από τη στοίβα. Καθαρίζονται όλες οι αλλαγές που έγιναν στον status register κατά τη διάρκεια χειρισμού της διακοπής. II. Ο program counter εξάγεται από τη στοίβα και η εκτέλεση συνεχίζει από το σημείο που είχε σταματήσει πριν τη διακοπή. 8

11. Εμφώλευση Διακοπών 1. Η εμφώλευση διακοπών είναι δυνατή αν τεθεί το GIE=1 εντός της διαδικασίας χειρισμού της διακοπής. 2. Όταν είναι ενεργοποιημένη η δυνατότητα εμφώλευσης διακοπών, κάθε διακοπή που θα συμβαίνει κατά τη διάρκεια εκτέλεσης μιας ρουτίνας χειρισμού διακοπής, θα διακόπτει αυτή τη ρουτίνα ανεξάρτητα από την προτεραιότητα της διακοπής. 12. Διανύσματα Διακοπών 1. Τα διανύσματα διακοπών και οι διευθύνσεις εκκίνησης λειτουργίας (power up starting) βρίσκονται στην περιοχή διευθύνσεων 0FFFFh ως 0FFC0h.. 2. Το διάνυσμα προγραμματίζεται από το χρήστη με τη 16 bit διεύθυνση της αντίστοιχης ρουτίνας χειρισμού της διακοπής. 3. Συστείνεται η δημιουργία μιας ρουτίνας χειρισμού για κάθε διάνυσμα διακοπής που αντιστοιχίζεται σε ένα τμήμα της διάταξης. Η απλούστερη ρουτίνα χειρισμού διακοπής μπορεί να αποτελείται μόνο από την εντολή RETI και διάφορα διανύσματα διακοπής μπορεί να δείχνουν σε αυτή. 4. Αν είναι απαραίτητο μπορούμε να χρησιμοποιήσουμε μη αποδόσιμα διανύσματα διακοπής στον κανονικό κώδικα του προγράμματος. 13. Συνάρτηση Χειρισμού Διακοπής 1. Η ρουτίνα εξυπηρέτησης διακοπών είναι ο κώδικας που γράφει ένας προγραμματιστής, για να χειριστεί την εργασία που πρέπει να γίνει όταν συμβεί μια συγκεκριμένη διακοπή. Μπορεί να περιέχει οτιδήποτε χρειάζεται να γίνει. Επειδή η είσοδος σε μια διακοπή, απενεργοποιεί το bit GIE, δε θα μπορεί να ληφθούν διακοπές κατά τη διάρκεια εκτέλεσης της ρουτίνας χειρισμού διακοπών. Υπάρχει η δυνατότητα να ενεργοποιηθεί η καταγραφή διακοπών ακόμα και κατά τη διάρκεια λειτουργίας της ρουτίνας χειρισμού διακοπών, αλλά συνήθως είναι καλή ιδέα να είναι η ρουτίνα εξυπηρέτησης όσο το δυνατό μικρότερη. Στη C, οι διακοπές είναι απλά συναρτήσεις με ειδική δήλωση. Ο προγραμματιστής δεν καλεί ποτέ αυτές τις συναρτήσεις. Αντίθετα ο μεταγλωττιστής τροποποιεί κατάλληλα το διάνυσμα 9

διακοπής το οποίο θα καλέσει τη συνάρτηση αυτή όταν συμβεί η συγκεκριμένη διακοπή. Π.χ. // Watchdog Timer interrupt service routine #pragma vector=wdt_vector interrupt void watchdog_timer(void) P1OUT ^= 0x01; // Toggle P1.0 using exclusive OR 2. Οι συναρτήσεις διακοπών θα πρέπει πάντα να είναι τύπου void και δε θα πρέπει να δέχονται ορίσματα. Στο προηγούμενο παράδειγμα η συγκεκριμένη ρουτίνα χειρισμού διακοπής ονομάζεται watchdog_timer, αλλά το όνομα δεν έχει ιδιαίτερη σημασία. Ο τρόπος με τον οποίο ο μεταγλωττιστής καταλαβαίνει ότι αυτή η συνάρτηση θα χειριστεί διακοπές από τον watchdog timer είναι από αυτά που ακολουθούν το όνομα της συνάρτησης. H #pragma vector = υποδεικνύει ότι πρόκειται για μια διακοπή και το WDT_VECTOR είναι ένα αναγνωριστικό από το αρχείο κεφαλίδας του MSP που δείχνει το διάνυσμα διακοπής που θα χρησιμοποιήσουμε. Κάθε διάνυσμα διακοπής του επεξεργαστή έχει ένα αναγνωριστικό ορισμένο για αυτό (που μπορεί να βρεθεί μέσα στο αρχείο κεφαλίδας). Για να συνδέσουμε την προηγούμενη ρουτίνα χειρισμού διακοπής με μια διαφορετική διακοπή, το μόνο που χρειάζεται να κάνουμε είναι να αλλάξουμε το όνομα WDT_VECTOR με ένα από τα άλλα αναγνωριστικά που βρίσκονται στο αρχείο κεφαλίδας. 14. Καταχωρητές Ενεργοποίησης Διακοπών 1. Επειδή δε θέλουμε όλες οι διακοπές να ενεργοποιούνται ταυτόχρονα προς τον επεξεργαστή, o MSP έχει τη δυνατότητα κάλυψης συγκεκριμένων διακοπών. 2. Όταν δημιουργείται ένα γεγονός διακοπής, ο επεξεργαστής πρώτα ελέγχει αν η διακοπή είναι ενεργοποιημένη, πριν μεταπηδήσει στην αντίστοιχη συνάρτηση χειρισμού διακοπής. Για τις περισσότερες διακοπές, ο MSP ελέγχει το general interrupt enable bit (GIE) στον status register και το bit της συγκεκριμένης διακοπής στον καταχωρητή interrupt enable. Αν και τα δύο αυτά bits είναι ρυθμισμένα για να επιτρέπουν τη διακοπή, τότε ο επεξεργαστής θα μεταπηδήσει στη συνάρτηση χειρισμού της διακοπής. 3. Εξορισμού, οι περισσότερες διακοπές είναι απενεργοποιημένες κατά την εκκίνηση. Για να χρησιμοποιήσουμε τα περισσότερα τμήματα περιφερειακών θα πρέπει να θέσουμε τα enable bits στους καταχωρητές interrupt enable και να ενεργοποιήσουμε και το general interrupt enable bit. Η ενεργοποίηση μερικές φορές θέτει και τη σημαία διακοπής, οπότε θα πρέπει να λάβουμε υπόψη το βιβλίο του MSP για τη σωστή σειρά ενεργοποίησης κάποιας διακοπής. Συνήθως για να 10

διαμορφώσουμε μια διακοπή σωστά, θα πρέπει να έχουμε πριν θέσει σωστά το αντίστοιχο τμήμα περιφερειακού. 4. Υπάρχουν τρεις κατηγορίες διακοπών για κάλυψη στον MSP430. Οι διακοπές επανεκκίνησης, οι μη καλυμμένες και μη επανεκκίνησης διακοπές και οι καλυμμένες διακοπές. 5. Οι καλυμμένες διακοπές έχουν τη μικρότερη προτεραιότητα και μπορούμε να τις απενεργοποιήσουμε καθεμία ξεχωριστά με τη χρήση των καταχωρητών interrupt enable ή σαν ομάδα θέτοντας το GIE bit στον status register. 6. Οι μη καλυμμένες διακοπές δεν υπόκεινται στον GIE. Ωστόσο, κάθε πηγή μηκαλυμμένης διακοπής μπορεί να ελεγχθεί με ένα bit. Πρόκειται για τις flash access violation interrupt enable (ADDVIE), external NMI interrupt enable (NMIIE) και oscillator fault interrupt enable (OFIE). Και τα τρία αυτά bits βρίσκονται στον καταχωρητή IE1. 7. Οι διακοπές επανεκκίνησης έχουν πάντα τη μεγαλύτερη προτεραιότητα και πάντα θα επανεκκινούν την εκτέλεση της διάταξης. Η εξωτερική επανεκκίνηση μπορεί να διαμορφωθεί ώστε να ενεργοποιεί είτε τη διακοπή επανεκκίνησης είτε τη διακοπή NMI. 8. Οι καταχωρητές interrupt enable (IE1, IE2) χρησιμοποιούνται ξεχωριστά για την ενεργοποίηση των διακοπών. Το βιβλίο του MSP430 περιγράφει τις διακοπές που σχετίζονται με το κάθε περιφερειακό. 15. Ασκήσεις Να μεταγλωτίσσετε και να εξηγήσετε τη λειτουργία καθενός από τους παρακάτω κώδικες. 1. msp430x20x3_nmi.c Basic Clock, Configure RST/NMI as NMI #include <msp430x20x3.h> void main(void) WDTCTL = WDTPW + WDTHOLD + WDTNMI + WDTNMIES; P1DIR = 0x01; P1OUT &= ~0x01; IE1 = NMIIE; _BIS_SR(LPM0_bits); 11

#pragma vector=nmi_vector interrupt void nmi_ (void) volatile unsigned int i; P1OUT = 0x01; for (i = 20000; i > 0; i ); P1OUT &= ~0x01; IFG1 &= ~NMIIFG; IE1 = NMIIE; 2. msp430x20x3_p1_01.c Software Poll P1.4, Set P1.0 if P1.4 = 1 #include <msp430x20x3.h> void main(void) WDTCTL = WDTPW + WDTHOLD; P1DIR = 0x01; while (1) if ((0x10 & P1IN)) P1OUT = 0x01; else P1OUT &= ~0x01; 3. msp430x20x3_p1_02.c Software Port Interrupt Service on P1.4 from LPM4 #include <msp430x20x3.h> void main(void) 12

WDTCTL = WDTPW + WDTHOLD; P1DIR = 0x01; P1IE = 0x10; P1IES = 0x10; P1IFG &= ~0x10; _BIS_SR(LPM4_bits + GIE); #pragma vector=port1_vector interrupt void Port_1(void) P1OUT ^= 0x01; P1IFG &= ~0x10; 4. msp430x20x3_p1_03.c Poll P1 With Software with Internal Pull up #include <msp430x20x3.h> void main(void) WDTCTL = WDTPW + WDTHOLD; P1DIR = 0x01; P1OUT = 0x10; P1REN = 0x10; while (1) if (0x10 & P1IN) P1OUT = 0x01; else P1OUT &= ~0x01; 13

5. msp430x20x3_p1_04.c P1 Interrupt from LPM4 with Internal Pullup #include <msp430x20x3.h> void main(void) WDTCTL = WDTPW + WDTHOLD; P1DIR = 0x01; P1OUT = 0x10; P1REN = 0x10; P1IE = 0x10; P1IES = 0x10; P1IFG &= ~0x10; _BIS_SR(LPM4_bits + GIE); #pragma vector=port1_vector interrupt void Port_1(void) P1OUT ^= 0x01; P1IFG &= ~0x10; ΜΕΡΟΣ 2. Τρόποι Λειτουργίας (Operating Modes) 1. Εισαγωγή 1. Η οικογένεια του MSP430 είναι σχεδιασμένη για πολύ μικρή κατανάλωση ισχύος και χρησιμοποιεί διαφορετικούς τρόπους λειτουργίας. 2. Οι τρόποι λειτουργίας λαμβάνουν υπόψη τριών ειδών ανάγκες: Πολύ μικρή κατανάλωση ισχύος 14

Ταχύτητα και προσφορά δεδομένων Ελαχιστοποίηση της κατανάλωσης ρεύματος 2. Τυπική Κατανάλωση Ρεύματος σε Διατάξεις 21x1 3. Οι Τρόποι Χαμηλής Κατανάλωσης Ισχύος 1. Οι τρόποι χαμηλής ισχύος από 0 μέχρι 4 διαμορφώνονται με τα bits CPUOFF, OSCOFF, SCG0, SCG1 Του καναχωρητή καταστασης (SR). 2. Το πλεονέκτημα της ύπαρξης των bits αυτών στον SR είναι ότι ο τρέχον τρόπος λειτουργίας σώζεται στη στοίβα όταν συμβή μια διακοπή και ξεκινήσει η ρουτίνας εξυπηρέτησής της. 3. Η ροή του προγράμματος θα επιστρέψει στον προηγούμενο τρόπο λειτουργίας αν η σωσμένες τιμές τους SR δεν αλλάξουν κατά τη διάρκεια λειτουργίας της ρουτίνας εξυπηρέτησης διακοπής. 4. Η ροή του προγράμματος μπορεί να επιστρέψει σε διαφορετικό τρόπο λειτουργίας να μέσα στη συνάρτηση εξυπηρέτηςη διακοπής γίνει τροποποίηση των σωσμένων τιμών του SR. 5. Τα bits ελέγχου του τρόπου λειτουργίας και η στοίβα προσπελαύνονται με οποιαδήποτε εντολή. 6. Όταν θέτουμε κάποιο από τα bits ελέγχου τρόπου λειτουργίας, ο τρόπος που θα επιλεγχθεί ενεργοποιείται αμέσως. Τα περιφερειακά που λειτουργούν με κάποιο απενεργοποιημένο ρολόι θα απενεργοποιηθούν μέχρι το ρολόι να ενεργοποιηθεί ξανά. Τα περιφερειακά μπορούν να απενεργοποιηθούν και μέσω των επιμέρους bits των καταχωρητών ελέγχου τους. Όλοι οι ακροδέκτες I/O και οι καταχωρητές RAM μένουν αναλλοίωτοι. Οι ενεργοποίηση συμβαίνει μέσω των ενεργοποιημένων διακοπών. 15

4. Οι Τρόποι Λειτουργίας του MSP430x2xx για το Βασικό Σύστημα Ρολογιού SCG1 SCG0 OSCOFF CPUOFF ΤΡΟΠΟΣ ΚΑΤΑΣΤΑΣΗ CPU και CLOCK 0 0 0 0 Active CPU ενεργή και όλα τα ενεργοποιημένα ρολόγια λειτουργούν 0 0 0 1 LPM0 CPU, MCLK απενεργοποιημένα SMCLK, ACLK ενεργά 0 1 0 1 LPM1 CPU, MCLK απενεργοποιημένα DCO και DC γεννήτρια απενεργοποιημένα αν ο DCO δε χρησιμοποιείται για το SMCLK ACLK ενεργό 16

1 0 0 1 LPM2 CPU, MCLK, SMCLK, DCO απενεργοποιημένα, DC γεννήτρια παραμένει ενεργή, ACLK ενεργό 1 1 0 1 LPM3 CPU, MCLK, SMCLK, DCO απανεργοποιημένα, DC γεννήτρια απενεργοποιημένη, ACLK ενεργό 1 1 1 1 LPM4 CPU και όλα τα ρολόγια απενεργοποιημένα 5. Είσοδος και Έξοδος σε Τρόπους Χαμηλής Ισχύος 1. Μια ενεργοποιημένη διακοπή ξυπνά τον MSP430 απο οποιονδήποτε τρόπο χαμηλής κατανάλωσης ισχύος. Η ροή προγράματος έχει ως εξής: a. Είσοδος στη ρουτίνα εξυπηρέτησης της διακοπής Ο PC και ο SR αποθηκεύονται στη στοίβα Τα bits CPUOFF, SCG1, OSCOFF επανατίθενται αυτόματα b. Επιλογές για επιστροφή από τη ρουτίνα εξυπηρέτησης διακοπής: Ο αρχική κατάσταση του SR εξάγεται από τη στοίβα, αντικαθιστώντας τον προηγούμενο τρόπο λειτουργίας Tα bits του SR που είναι αποθηκευμένα στη στοίβα μπορεί να τροποποιηθούν εντός της ρουτίνας εξυπηρέτησης διακοπής ώστε να επιστρέψουμε σε έναν διαφορετικό τρόπο λειτουργίας, όταν εκτελεστεί η εντολή RETI ; Enter LPM0 Example BIS #GIE+CPUOFF,SR ; Enter LPM0 ;... ; Program stops here ; ; Exit LPM0 Interrupt Service Routine BIC #CPUOFF,0(SP) ; Exit LPM0 on RETI RETI ; Enter LPM3 Example BIS #GIE+CPUOFF+SCG1+SCG0,SR ; Enter LPM3 ;... ; Program stops here ; ; Exit LPM3 Interrupt Service Routine BIC #CPUOFF+SCG1+SCG0,0(SR) ; Exit LPM3 on RETI RETI 17

6. Αρχές Εφαρμογών Χαμηλής Ισχύος 1. Συνήθως, ο πιο σημαντικός παράγοντας για την ελάττωση της κατανάλλωσης ισχύος είναι να χρησιμοποιήσουμε το σύστημα ρολογιού του MSP430 για να μεγιστοποιήσουμε το χρόνο στην κατάσταση LPM3. Η κατανάλωση ισχύος στην LPM3 είναι λιγότερο αό 2μΑ ρεύμα τυπικά με μια λειτουργία ρολογιού πραγματικού χρόνου και όλες τις διακοπές ενεργές. Ένας κρύσταλλος ρολογιού 32kHz χρησιμοποιείται για το ACLK και η CPU χρονίζεται από τον DCO (συνήθως απενεργοποιημένος) με 6μs απαιτούμενο χρόνο αφύπνισης. 7. Ασκήσεις Χρησιμοποιούμε διακοπές για την αφύπνιση του επεξεργαστή και της ροής ελέγχου του προγράμματος Τα περιφερειακά θα πρέπει να ενεργοποιούνται μόνο όταν είναι απαραίτητα Κάνουμε χρήση ολοκληρωμένων περιφερειακών αντί για λειτουργίες οδηγούμενες από συναρτήσεις. Για παράδειγμα ο Timer_A και ο Timer_B μπορούν αυτόματα να παράγουν PWM και να συλλάβουν εξωτερικό χρονισμό, χωρίς πόρους από τη CPU. Υπολογισμένες διακλαδώσεις και γρήγορη αναζήτηση σε πίνακες θα πρέπει να χρησιμοποιηθούν αντί για χρήση σηματοδοτήσεων (flag polling) και μακρύς υπολογισμούς λογισμικού. Αποφεύγουμε συχνές κλήσεις υπορουτίνων και συναρτήσεων λόγω συσσώρευσης (overhead). Για μεγάλες ρουτίνες λογισμικού, χρησιμοποιούμε καταχωρητές CPU μονού κύκλου. 1. msp430x20x3_lpm3.c Basic Clock, LPM3 Using WDT ISR, 32kHz ACLK #include <msp430x20x3.h> void main(void) BCSCTL1 = DIVA_2; WDTCTL = WDT_ADLY_1000; IE1 = WDTIE; P1DIR = 0xFF; P1OUT = 0; P2DIR = 0xFF; 18

P2OUT = 0; while(1) int i; P1OUT = 0x01; for (i = 5000; i>0; i ); P1OUT &= ~0x01; _BIS_SR(LPM3_bits + GIE); #pragma vector=wdt_vector interrupt void watchdog_timer (void) _BIC_SR_IRQ(LPM3_bits); 2. msp430x20x3_lpm3_vlo.c Basic Clock, LPM3 Using WDT ISR, VLO ACLK #include <msp430x20x3.h> void main(void) BCSCTL1 = DIVA_1; BCSCTL3 = LFXT1S_2; WDTCTL = WDT_ADLY_1000; IE1 = WDTIE; P1DIR = 0xFF; P1OUT = 0; P2DIR = 0xFF; 19

P2OUT = 0; while(1) int i; P1OUT = 0x01; for (i = 10000; i>0; i ); P1OUT &= ~0x01; _BIS_SR(LPM3_bits + GIE); #pragma vector=wdt_vector interrupt void watchdog_timer (void) _BIC_SR_IRQ(LPM3_bits); 20