Μικροεπεξεργαστές Σημειώσεις Μαθήματος 2013-14 Υπεύθυνος: Δρ Άρης Παπακώστας,
Interrupts - Διακοπές Είναι ένας τρόπος για να διακοπεί η ροή ενός προγράμματος έτσι ώστε να εξυπηρετηθεί ένα έκτακτο γενογός Η ΚΜΕ αποθηκεύει την τρέχουσα διεύθυνση και κάνει άλμα στην διεύθυνση της Ρουτίνας Εξυπηρέτησης Διακοπής Επιστρέφει στην διεύθυνση της επόμενης εντολής από εκείνη που εκτελούνταν όταν συνέβη η Διακοπή
Interrupts Μια διακοπή είναι μια κατάσταση που προκαλεί ο μικροεπεξεργαστής για να εργαστούν προσωρινά σε μια διαφορετική εργασία, Και στη συνέχεια να επιστρέψει στην προηγούμενη εργασία του. Η διακοπή μπορεί να είναι εσωτερική ή εξωτερική. Εσωτερική διακοπή, ή «διακοπή λογισμικού» ενεργοποιούνται από μία χρήση λογισμικού. Μία εξωτερική διακοπή, ή μία "διακοπή υλικού," προκαλείται από μια εξωτερική μονάδα εξοπλισμού. Ως παράδειγμα, πολλά συστήματα υπολογιστών χρησιμοποιούν διακόπτουν οδηγείται I / O, μια διαδικασία όπου πατώντας ένα πλήκτρο στο πληκτρολόγιο ή πατώντας ένα κουμπί στο ποντίκι προκαλεί μία διακοπή. Ο επεξεργαστής σταματά ό, τι κάνει, διαβάζει την είσοδο από το πληκτρολόγιο ή το ποντίκι, και στη συνέχεια επιστρέφει στο τρέχον πρόγραμμα.
Διαδικάσια Διακοπής
Διακόπτες (Interrupts) μπορούν να ταξινομηθούν σε κάποιους βασικούς τύπους: Maskable Interrupt-Αποκρύψιμη διακοπής (IRQ): μια διακοπή υλικού που μπορεί να αγνοηθεί θέτοντας ένα κομμάτι σε μια μάσκα διακοπής του μητρώου (ΙΜΚ) bit μάσκα. Non-Maskable Interrupt-Μη αποκρύψιμη διακοπή (ΝΜΙ): είναι μία διακοπή υλικού που στερείται ένα συσχετιζόμενο bit μάσκας, έτσι ώστε δεν μπορεί ποτέ να αγνοηθεί. NMIs χρησιμοποιούνται για λειτουργίες υψηλότερης προτεραιότητας, όπως χρονιστές (timers), ειδικοί χρονιστές (watchdogs timers). Inter-processor interrupt-ενδο-επεργαστική διακοπή (IPI): μια ειδική περίπτωση διακοπής που δημιουργείται από έναν επεξεργαστή για να διακόψει ένα άλλο επεξεργαστή σε ένα σύστημα πολλαπλών επεξεργαστών. Software interrupt-διακοπή Λογισμικού: μια διακοπή παράγεται μέσα σε ένα επεξεργαστή με την εκτέλεση μιας εντολής. Οι διακοπές του λογισμικού που χρησιμοποιείται συχνά για την εφαρμογή των κλήσεων συστήματος, διότι οδηγούν σε μια κλήση υπορουτίνας με την αλλαγή επιπέδου του δακτυλίου CPU. Spurious interrupt-πλαστή διακοπή: μια διακοπή υλικού που είναι ανεπιθύμητο. Αυτές συνήθως δημιουργούνται από τις συνθήκες του συστήματος, όπως ηλεκτρικές παρεμβολές σε μια γραμμή διακοπής ή μέσω λανθασμένα σχεδιασμένο υλικό.
Types of Interrupts Level-triggered Ενεργοποίηση Επιπέδου Μια διακοπή επιπέδου είναι μια διακοπή που σηματοδοτείται από τη διατήρηση της γραμμής διακοπής σε υψηλό ή χαμηλό επίπεδο. Μια συσκευή που επιθυμεί να σηματοδοτήσει μια διακοπή επιπέδου προκαλεί το αίτημα διακοπής σε μία γραμμή σε ενεργό επίπεδο (υψηλό ή χαμηλό), και στη συνέχεια το κρατάει σε αυτό το επίπεδο μέχρι να εξυπηρετείται. Σταματάει την εντολή όταν η CPU δίνει εντολή να εκτελεστεί ή με κάποιο άλλο τρόπο χειρίζεται την κατάσταση ο επεξεργαστής. Edge-triggered -Ενεργοποίηση στο άκρο Μια edge-triggered διακοπή είναι μια διακοπή που σηματοδοτείται από ένα μεταβατικό επίπεδο σχετικά με τη διακοπή της γραμμής, είτε ακμής πτώσης (υψηλή προς χαμηλή) ή μια ανερχόμενη ακμή (χαμηλή προς υψηλή). Μια συσκευή, που επιθυμεί να σηματοδοτήσει μια διακοπή, οδηγεί έναν παλμό πάνω στη γραμμή και στη συνέχεια απελευθερώνει τη γραμμή στην ανενεργή κατάσταση. Αν ο παλμός είναι πολύ μικρής διάρκειας για να ανιχνευθεί από την I / O, τότε μπορεί να απαιτείται ειδικό υλικό για να ανιχνεύσει την άκρη. Hybrid - Υβριδική Μερικά συστήματα χρησιμοποιούν ένα υβρίδιο που αποτελείτε από ένα edge-triggered και ένα leveltriggered interrupt. Το υλικό ελέγχει όχι μόνο για μια μετάβαση στην άκρη του παλμού, αλλά επαληθεύει επίσης ότι το σήμα διακοπής παραμένει ενεργό για ορισμένο χρονικό διάστημα.
Types of Interrupts-Μέθοδοι διακοπών Doorbell Interrupt Σαν μία αναλογία με push-button που εφαρμόζεται σε συστήματα υπολογιστών, ο όρος κουδούνι ή ο διακόπτης κουδούνι χρησιμοποιείται συχνά για να περιγράψει ένα μηχανισμό με τον οποίο ένα σύστημα λογισμικού μπορεί να σημάνει ή να κοινοποιήσει σε μια συσκευή υλικού υπολογιστών ότι υπάρχει κάποια δουλειά να γίνει. Συνήθως, το λογισμικό σύστημα θα τοποθετήσει τα δεδομένα σε κάποια γνωστή και αμοιβαία συμφωνηθείσα τοποθεσία-ες μνήμης, και με την διακοπή doorbell θα ζητήσει διακοπή. Αυτή η διαφορετική θέση μνήμης ονομάζεται συχνά περιοχή doorbell (κουδούνι), και μπορεί ακόμη και να υπάρχουν πολλά κουδούνια που εξυπηρετούν διαφορετικούς σκοπούς σε αυτή την περιοχή. Είναι αυτή η πράξη της γραφής με το κουδούνι περιοχή της μνήμης που "κρούει τον κώδωνα" και ειδοποιεί τη συσκευή υλικού ότι τα δεδομένα είναι έτοιμα και σας περιμένουν. Η συσκευή υλικού συνεπώς γνωρίζει τώρα ότι τα δεδομένα είναι έγκυρα και μπορεί να κάνει κάποια ενέργεια.
Παραδείγματα Πηγών Διακοπών Από γενικής χρήσης ακροδέκτες (INT, NMI) Υπερχείλιση Χρονιστών-Μετρητών Εγγραφή ή ανάγνωση μιας σειριακής ή παράλληλης θύρας Σφάλματα μετάδοσης δεδομένων από μια θύρα Αναλογικούς Συγκριτές SWI RESET
Πολύπλεξη Διακοπών Πολλές πηγές διακοπών μπορούν να οδηγούν την μοναδική γραμμή (ΙΝΤ) ενός επεξεργαστή με τη χρήση Interrupt Controller Ο Interrupt Controller επιτρέπει την ιεράρχιση διακοπών με διάφορες μεθόδους (round robin, απόλυτη ιεράρχιση κλπ)
Καθορισμός Διεύθυνσης Ρουτίνας Εξ. Διακοπής Από την περιφερειακή συσκευή Από Πίνακα Διακοπών (Interrupt Vector) Έλεγχος Interrupt Flags
Interrupt Mask/Flag Ένας Mask καταχωρητής μπορεί να επιτρέψει ή να απαγορέψει κάποιες πηγές διακοπών γράφοντας 0 ή 1 στο bit που αντιστοιχεί σε μία πηγή Όταν συμβεί διακοπή η ΚΜΕ μπορεί να διακρίνει ποια/ποιες πηγές αιτήθηκαν διακοπή διαβάζοντας το Flag που αντιστοιχεί σε κάθε διακοπή Τα bit στην ίδια θέση ενός Mask και ενός Flag καταχωρητή αντιστοιχούν στην ίδια πηγή διακοπών
I/O Ports Παράλληλη Είσοδος/Έξοδος Διευκολύνει την αναγνώριση σημάτων εισόδου ή την οδήγηση σημάτων εξόδου Χειρισμός ομάδων bit ή καθ ενός ξεχωριστά Χρήση Handshaking σημάτων
Timer - Χρονιστής Χρονιστής (Timer) είναι ένας καταχωρητής του οποίου η τιμή αυξάνεται ή μειώνεται με βάση ένα σταθερό ρολόι. Χρησιμοποιείται για την μέτρηση χρονικών διαστημάτων Το ρολόι μπορεί να είναι εκείνο του συστήματος ή κάποιος αποκλειστικός ταλαντωτής
Counter - Μετρητής Παρόμοιος με τον Χρονιστή (συνήθως είναι το ίδιο κύκλωμα) Η μεταβολή στην τιμή του γίνεται με βάση τις αλλαγές στάθμης σε κάποιον ακροδέκτη εισόδου Ουσιαστικά μετράει γεγονότα Η μεταβολή στην τιμή μπορεί να λαμβάνει χώρα κατά την ανοδική ή καθοδική ακμή του ακροδέκτη εισόδου
Prescaler Χρησιμοποιείται για την επιβράδυνση του ρυθμού μεταβολής της τιμής ενός Χρονιστή ή Μετρητή Πχ, αν έχει οριστεί Prescaler 1:64 τότε η τιμή του Χρονιστή αλλάζει κάθε 64 κύκλους ρολογιού
Διακοπές σχετικές με Χρονιστές- Μετρητές Όταν υπερχειλίσει (overflow) ένας Μετρητής- Χρονιστής Όταν η τιμή του γίνει ίση με κάποιον άλλο καταχωρητή (Output Capture) Όταν κάποια σχετική είσοδος αλλάξει στάθμη η τιμή του χρονιστή μπορεί να μεταφερθεί σε κάποιον άλλο καταχωρητή (Input Capture) Οποτεδήποτε η τιμή του χρονιστή ταυτίζεται με κάποια προκαθορισμένη (για την δημιουργία παλμών PWM)
Απευθείας Προσπέλαση Μνήμης (Direct Memory Access-DMA) Για μεταφορά από Περιφερειακό σε Μνήμη χωρίς DMA: Η ΚΜΕ ειδοποιείται από το Περιφερειακό με διακοπή=>χρόνος Αντίδρασης Για κάθε byte πραγματοποιεί μια μεταφορά από το περιφερειακό σε κάποιο εσωτερικό καταχωρητή Ακολουθεί μια μεταφορά από τον εσωτερικό καταχωρητή στη μνήμη Για τη μεταφορά κάθε byte απαιτούνται 2 κύκλοι εντολής
Απευθείας Προσπέλαση Μνήμης (Direct Memory Access-DMA) Για μεταφορά από Μνήμη σε Περιφερειακό χωρίς DMA: Η ΚΜΕ ειδοποιείται από το Περιφερειακό με διακοπή=>χρόνος Αντίδρασης Για κάθε byte πραγματοποιεί μια μεταφορά από τη μνήμη σε κάποιο εσωτερικό καταχωρητή Ακολουθεί μια εγγραφή από τον εσωτερικό καταχωρητή στον κατάλληλο καταχωρητή του περιφερειακού Για τη μεταφορά κάθε byte απαιτούνται 2 κύκλοι εντολής
Απευθείας Προσπέλαση Μνήμης (Direct Memory Access-DMA) Η μεταφορά γίνεται χωρίς την μεσολάβηση της ΚΜΕ Την διευθυνσιοδότηση της μνήμης καθώς και την οδήγηση των control σημάτων (RD, WR κλπ) κάνει ο DMA Controller Η ΚΜΕ απομονώνει τον δίαυλο διευθύνσεων και τα control σήματά της (Υψηλή Εμπέδηση) όσο έχει τον έλεγχο ο DMA Controller
Μέθοδοι DMA Μεταφοράς Cycle Stealing: Σε κάθε κύκλο μηχανής όταν η ΚΜΕ δεν χρησιμοποιεί τους διαύλους ο DMA Controller μεταφέρει ένα byte. Cycle Stealing με επιμήκυνση του ρολογιού της ΚΜΕ Burst Mode: Παραχώριση του system bus για μαζική μεταφορά δεδομένων από τον DMA Controller.
System Bus χωρίς DMA Ελεγκτής DMA ΚΜΕ Περιφερειακά Μνήμη
System Bus με DMA Ελεγκτής DMA ΚΜΕ Περιφερειακά Μνήμη
Αρχικοποίηση DMA Καθορισμός αρχικής διεύθυνσης στη Μνήμη Πλήθος δεδομένων που θα μεταφερθούν Τύπος μεταφοράς: Cycle Stealing, Burst Mode Αναμονή για αίτηση μεταφοράς από την περιφερειακή συσκευή
Όταν ζητηθεί DMA μεταφορά 1. Ο DMA Controller ζητά έλεγχο του system bus για 1 κύκλο (cycle stealing) ή όσο απαιτείται για την πλήρη μεταφορά (burst mode) 2. Όταν του δοθεί ο έλεγχος, μεταφέρει ένα byte από/προς την τρέχουσα διεύθυνση μνήμης 3. Αυξάνει κατά ένα τη διεύθυνση και μειώνει κατά ένα το πλήθος των δεδομένων 4. Αν το πλήθος δεν έχει γίνει 0 επαναλαμβάνει τη διαδικασία από το βήμα 2