ΣΥΣΤΗΜΑΤΑ ΠΡΑΓΜΑΤΙΚΟΥ ΧΡΟΝΟΥ ΥΛΙΚΟ-ΛΟΓΙΣΜΙΚΟ ΣΥΣΤΗΜΑΤΑ ΠΡΑΓΜΑΤΙΚΟΥ ΧΡΟΝΟΥ ΥΛΙΚΟ-ΛΟΓΙΣΜΙΚΟ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΕΙ ΣΕΡΡΩΝ Ζ΄ ΕΞΑΜΗΝΟ Διδάσκων: Ιωάννης Καλόμοιρος, Επίκουρος καθηγητής
Real-time systems: ABS, αερόσακκοι, έλεγχος τρένων
Συστήματα πλοήγησης και χειρισμού
Όραση μηχανής και συστήματα DAQ
ΠΕΡΙΕΧΟΜΕΝΟ ΤΟΥ ΜΑΘΗΜΑΤΟΣ Παραδείγματα συστημάτων πραγματικού χρόνου Εισαγωγή στις έννοιες των συστημάτων πραγματικού χρόνου (περιοδικά και απεριοδικά συστήματα, αυστηρά κα χαλαρά συστήματα, περίοδος, προθεσμία, προβλεψιμότητα, χρονοπρογραμματισμός) Λειτουργικά συστήματα πραγματικού χρόνου (Βασικά χαρακτηριστικά, τεχνικές χρονοπρογραμματισμού) Συστήματα υλικού για εφαρμογές πραγματικού χρόνου (χρονιστές, ελεγκτές διακοπών, θύρες Ι/Ο, κανάλια επικοινωνίας) Ενσωματωμένα συστήματα πραγματικού χρόνου (μικροελεγκτές/DSPs, FPGAs, ASICs) Γλώσσες πραγματικού χρόνου (ADA, Real-Time Java)
ΤΥΠΟΙ ΣΥΣΤΗΜΑΤΩΝ ΠΡΑΓΜΑΤΙΚΟΥ ΧΡΟΝΟΥ: Ψηφιακός Ελεγκτής Χρονικοί περιορισμοί: περίοδος Τ της δειγματοληψίας
Ψηφιακός ελεγκτής (συνέχεια) Ένα σήμα ελέγχου u(t) (δεξιά) παράγει μια μεταβολή στη θέση y(t) (αριστερά). Η επιθυμητή απόκριση του συστήματος φαίνεται με τελείες και η απόκριση για μεγάλο Τ με συνεχή γραμμή.
ΤΥΠΟΙ ΣΥΣΤΗΜΑΤΩΝ ΠΡΑΓΜΑΤΙΚΟΥ ΧΡΟΝΟΥ: Ψηφιακό σύστημα συλλογής δεδομένων Χρονικοί περιορισμοί: περίοδος Τ της δειγματοληψίας και ανάγκες επεξεργασίας
ΤΥΠΟΙ ΣΥΣΤΗΜΑΤΩΝ ΠΡΑΓΜΑΤΙΚΟΥ ΧΡΟΝΟΥ: Ιεραρχικός έλεγχος Πολλά επίπεδα ελέγχου. Το καθένα έχει τις δικές του απαιτήσεις σε ρυθμούς δειγματοληψίας και επεξεργασίας
ΤΥΠΟΙ ΣΥΣΤΗΜΑΤΩΝ ΠΡΑΓΜΑΤΙΚΟΥ ΧΡΟΝΟΥ: Επεξεργασία σήματος και πολυμεσικές εφαρμογές Τυπικά, ένα σύστημα DSP πραγματικού χρόνου υπολογίζει σε κάθε περίοδο δειγματοληψίας μία ή περισσότερες εξόδους x(k), χρησιμοποιώντας ένα σύνολο από n δείγματα εισόδου y(i):
Επεξεργασία σήματος και πολυμεσικές εφαρμογές (συνέχεια)
Μερικές ακόμη χρήσιμες έννοιες Περιοδικά συστήματα (εκτελούν έναν βρόγχο επεξεργασίας) Απεριοδικά συστήματα (αντιδρούν σε σποραδικά συμβάντα) Τρόποι υλοποίησης συστημάτων πραγματικού χρόνου: ενσωματωμένοι επεξεργαστές ή μικροελεγκτές, συστήματα DSP ή συστήματα υλικού όπως FPGAs και ASICs. Κατανεμημένα συστήματα και δίκτυα
ΕΝΝΟΙΕΣ ΣΥΣΤΗΜΑΤΩΝ ΠΡΑΓΜΑΤΙΚΟΥ ΧΡΟΝΟΥ Τα μέρη ενός συστήματος πραγματικού χρόνου: Υλικό μέρος (CPUs, χρονιστές, περιφερειακές μονάδες Ι/Ο, κανάλια επικοινωνίας, κλπ)
Τα μέρη ενός συστήματος πραγματικού χρόνου: Τα μέρη ενός συστήματος πραγματικού χρόνου: Υλικό μέρος (CPUs, χρονιστές, περιφερειακές μονάδες Ι/Ο, ενεργοποιητές, κανάλια επικοινωνίας, κλπ) Ένα λειτουργικό σύστημα πραγματικού χρόνου (RTOS) ή απλά έναν πυρήνα πραγματικού χρόνου (Real-Time Kernel), με προβλέψιμη συμπεριφορά και καλά καθορισμένη λειτουργικότητα. Ένα σύνολο από «διεργασίες» (tasks) πραγματικού χρόνου.
Τι είναι οι διεργασίες Οι «διεργασίες» είναι ρουτίνες λογισμικού, γραμμένες σε κάποια γλώσσα πραγματικού χρόνου ή είναι μηχανισμοί που δημιουργεί το λειτουργικό σύστημα, για να διαχειρίζεται την εκτέλεση τμημάτων κώδικα σε ένα πρόγραμμα. Οι διεργασίες μοιράζονται τους πόρους του συστήματος, επικοινωνούν και συγχρονίζονται μεταξύ τους και με το περιβάλλον.
Χρονικοί περιορισμοί Περιοδικά συστήματα: η περίοδος του βρόγχου επανάληψης αντιπροσωπεύει μια μορφή χρονικού περιορισμού. Παράδειγμα: Σύστημα ελέγχου φούρνων. Κάθε φούρνος πρέπει να ρυθμίζει τη θερμοκρασία του τέσσερις φορές το δευτερόλεπτο.
Χρονικοί περιορισμοί Χρόνοι αποδέσμευσης: 20+kx250 ms, k=0,1,2,... Προθεσμία: συνήθως το πέρας της περιόδου: 270, 520, 770 ms … κλπ ή μικρότερη Π.χ. 170, 420, 670 ms… Σχετική προθεσμία: στη μία περίπτωση 250ms, στην άλλη 150ms.
Χρονικοί περιορισμοί Χρόνος αποδέσμευσης, προθεσμία, περίοδος, χρόνος εκτέλεσης
Παράδειγμα: Μηχανή εμφιάλωσης. Οι φιάλες περνούν μπροστά από τη μηχανή με ρυθμό πέντε φιάλες το δευτερόλεπτο. Από τη στιγμή που εμφανίζεται κάθε φιάλη υπάρχει ένα παράθυρο ευκαιρίας 150 ms, ώστε να βάλει το σύστημα το πώμα στη φιάλη. Σχετική προθεσμία: 150ms περίοδος: 200ms
Αυστηρά και χαλαρά συστήματα πραγματικού χρόνου (Hard and soft real-time systems)
Φάσμα εφαρμογών πραγματικού χρόνου
Χρονικές παράμετροι για δυο διαφορετικές διεργασίες Ερώτημα: πως μπορούν να οργανωθούν οι δύο διεργασίες, ώστε να τρέχουν «παράλληλα» Έστω δύο διεργασίες με Τ1=Τ2=4 ms και χρόνο εκτέλεσης c=2ms. Θα μπορούσαν να εκτελούνται διαδοχικά.
Διαταραχή (jitter) σε διαδοχικές εκτελέσεις ενός βρόγχου επεξεργασίας
Υλοποίηση συστημάτων πραγματικού χρόνου: Πρώτη προσέγγιση: προγραμματισμός του συστήματος σε χαμηλό επίπεδο, χρησιμοποιώντας γλώσσα Assembly και προγραμματίζοντας το σύστημα με χρήση χρονιστών, διακοπών (interrupts), επαναλαμβανόμενων βρόγχων κλπ. Οι ρουτίνες σε assembly πρέπει να διαχειρίζονται τις θύρες I/O, τους μετατροπείς αναλογικού σήματος σε ψηφιακό και τα κανάλια επικοινωνίας, όπως οι UART, οι θύρες USB, οι δίαυλοι CAN (Controller Area Network) κ.λπ.
Μια άλλη προσέγγιση, πιο κατάλληλη για μεγάλα και πολύπλοκα συστήματα, είναι ο προγραμματισμός με χρήση παράλληλων (concurrent) γλωσσών πραγματικού χρόνου. Τέτοιες γλώσσες είναι η Ada 95, η Real-time Java, η RTL/2 και άλλες. Οι γλώσσες αυτές έχουν το χαρακτηριστικό ότι μπορούν να διαχειρίζονται παραπάνω από μία διεργασία (task), καθώς ένα πρόγραμμα μπορεί να αποτελείται από ένα σύνολο αυτόνομων σειριακών διεργασιών, που η λογική τους εκτέλεση γίνεται παράλληλα.
Μια τρίτη προσέγγιση είναι να χρησιμοποιήσουμε μια συμβατική σειριακή γλώσσα προγραμματισμού (π.χ. PASCAL, C) και ένα λειτουργικό σύστημα που παρέχει υποστήριξη για διαδικασίες πραγματικού χρόνου. Τέτοια λειτουργικά συστήματα αναφέρονται ως λειτουργικά συστήματα πραγματικού χρόνου (RTOS) και παρέχουν ευκολίες για πολυδιεργασία (multitasking) και πολυνημάτωση (multithreading). Στην περίπτωση αυτή οι λειτουργίες του παραλληλισμού περνούν στο λειτουργικό σύστημα και όχι στην γλώσσα προγραμματισμού.
Λειτουργικά Συστήματα πραγματικού χρόνου (RTOS) Το λειτουργικό σύστημα είναι μέρος του λογισμικού και διαχειρίζεται τους πόρους υλικού του συστήματος
Οι έννοιες της πολυδιεργασίας και της πολυνημάτωσης
Χαρακτηριστικά RTOS Ο «εν δυνάμει» παραλληλισμός που εισάγει η πολυνημάτωση είναι μια βασική ιδιότητα των λειτουργικών συστημάτων πραγματικού χρόνου. Μια άλλη βασική ιδιότητα των λειτουργικών συστημάτων πραγματικού χρόνου είναι η προβλεψιμότητα (predictability) και η καθοριστικότητα (determinism)
Άλλα χαρακτηριστικά των RTOS Δυνατότητα χρονοπρογραμματισμού των διεργασιών με βάση προτεραιότητες (preemptive scheduling based on priorities) Γρήγορη μετάβαση ανάμεσα σε διαδικασίες (switch context) Μικρό μέγεθος Επικοινωνία και συγχρονισμό ανάμεσα σε διαδικασίες Ύπαρξη χρονιστών πραγματικού χρόνου
Τέλος, εξυπακούεται ότι ένα λειτουργικό σύστημα πραγματικού χρόνου υποστηρίζει όλες τις βασικές λειτουργίες ενός συμβατικού λειτουργικού συστήματος, όπως η διαχείριση διακοπών (interrupt handling), η διαχείριση διεργασιών (task manager), η διαχείριση της μνήμης (εκχώρηση, απελευθέρωση και προστασία της μνήμης), η διαχείριση εισόδου/εξόδου μέσω οδηγών συσκευών (device drivers) και η επικοινωνία ανάμεσα σε διεργασίες.
Η έννοια της διεργασίας Ένα λειτουργικό σύστημα πραγματικού χρόνου διαχειρίζεται τα διάφορα προγράμματα χωρίζοντάς τα σε νήματα διεργασιών, τις οποίες και ελέγχει κατάλληλα. Μια διεργασία είναι μια βασική μονάδα προγραμματιστικού έργου, μια οντότητα λογισμικού, που δημιουργείται από το λειτουργικό σύστημα προκειμένου να διαχειρίζεται την εκτέλεση ενός τμήματος κώδικα. Κάθε διεργασία είναι ανεξάρτητη από τις άλλες διεργασίες και μπορεί να συγχρονιστεί και να επικοινωνήσει μαζί τους.
Μοντέλο διεργασίας Αφού δημιουργηθεί μια διεργασία, έχει μια διάρκεια ζωής, κατά την οποία μπορεί να βρεθεί σε διάφορες «καταστάσεις», ανάλογα με το ποιες καταστάσεις διεργασιών υποστηρίζει το λειτουργικό σύστημα. Μπορεί, λοιπόν, να δημιουργείται, να βρίσκεται σε ανενεργή κατάσταση (sleeping) ή σε κατάσταση ετοιμότητας (ready), να εκτελείται και να τερματίζεται.
Χρονικές παράμετροι διεργασίας
Τεχνικές πολυδιεργασίας Συνεργαζόμενη πολυδιεργασία Με την συνεργαζόμενη πολυδιεργασία (cooperative multitasking) μια διεργασία παραδίδει τον έλεγχο σε άλλη μόνον «εθελοντικά». Για να χάσει η διεργασία τον έλεγχο πρέπει να καλέσει η ίδια το λειτουργικό σύστημα (RTOS). Με τον τρόπο αυτό οι διεργασίες μοιράζονται δίκαια τον επεξεργαστή και τους άλλους πόρους. Ολοκληρωμένη εκτέλεση Μια διεργασία παραδίδει τον έλεγχο μόνον όταν έχει ολοκληρώσει το έργο της (run to completion). Από πρακτική άποψη αυτή η τεχνική μπορεί να χρησιμοποιηθεί σε ένα RTOS μόνον όταν όλες οι διεργασίες είναι σχετικά σύντομες. Διακοπή από τον προγραμματιστή διεργασιών (preemption) Στην περίπτωση αυτή μια διεργασία παραδίδει τον έλεγχο όποτε υπαγορεύει ο χρονοπρογραμματιστής (scheduler). Η τεχνική αναφέρεται ως preemption. Γενικά, οι schedulers που στηρίζονται σ’ αυτή την τεχνική μπορούν να ανταποκριθούν σε συγκεκριμένες χρονικές απαιτήσεις καλύτερα από άλλους.
Πυρήνας RTOS Το κέντρο ενός λειτουργικού συστήματος ονομάζεται πυρήνας (kernel). Στα λειτουργικά συστήματα πραγματικού χρόνου ο πυρήνας αποτελείται από τον χρονοπρογραμματιστή διεργασιών (scheduler), τον διαχειριστή διακοπών (interrupt handler), και τον διαχειριστή πόρων (resource manager), που διαχειρίζεται τη μνήμη και τον διαμοιρασμό της στις διάφορες διεργασίες.
Διακοπή διεργασιών (preemptivity)
Τεχνικές χρονοπρογραμματισμού Οδήγηση από χρονιστή (clock-driven) Κυκλική εκτέλεση (round-robin) Οδήγηση από προτεραιότητες (priorities)
Οδήγηση από προτεραιότητες (priorities) σταθερή προτεραιότητα (fixed priority): η τιμής της προτεραιότητας κάθε διεργασίας υπολογίζεται μια φορά, προσδίδεται στην διεργασία και παραμένει αναλλοίωτη σε όλη τη διάρκεια ζωής της διεργασίας. Στην άλλη περίπτωση, η προτεραιότητα υπολογίζεται κατά τη διάρκεια του χρόνου εκτέλεσης και συνδέεται με την προθεσμία που δίνουμε στην κάθε διεργασία. Η δεύτερη αυτή περίπτωση ονομάζεται επίσης «οδηγούμενη από προθεσμία» (deadline driven).
Τεχνική Μονοτονικού ρυθμού (Rate Monotonic – RM). Η τεχνική αυτή αντιστοιχεί μια σταθερή προτεραιότητα σε κάθε διεργασία, σύμφωνα με την εξής αρχή: όσο πιο μικρή είναι η περίοδος της διεργασίας, τόσο μεγαλύτερη είναι η προτεραιότητα. Έχει αποδειχτεί ότι η τεχνική αυτή παρουσιάζει μια βέλτιστη συμπεριφορά ανάμεσα σε άλλες παρόμοιες τεχνικές που λειτουργούν με βάση σταθερές προτεραιότητες.
Προήγηση συντομότερης προθεσμίας (Earliest Deadline First – EDF). Όσο συντομότερη είναι η προθεσμία μιας διεργασίας, τόσο υψηλότερη είναι η προτεραιότητά της.
Προήγηση ελάχιστου χρόνου χαλάρωσης (Least Slack-time First – LSTF). O χρόνος χαλάρωσης (slack-time) ορίζεται ως η διαφορά του διαστήματος από την τρέχουσα χρονική στιγμή μέχρι το πέρας της προθεσμίας μιας διεργασίας και του χρόνου εκτέλεσης της διεργασίας: (απόλυτη προθεσμία - τρέχουσα χρονική στιγμή) - χρόνος εκτέλεσης. Σύμφωνα με την τεχνική αυτή η διεργασία που χαρακτηρίζεται την τρέχουσα στιγμή από τον ελάχιστο χρόνο χαλάρωσης έχει και την μεγαλύτερη προτεραιότητα.
Τεχνικές χρονοπρογραμματισμού
Διαχείριση διακοπών
Πηγές διακοπών προς έναν πυρήνα RTOS
Μελέτη περίπτωσης
Σχήμα ελέγχου για την εφαρμογή του ελεγκτή κινητήρα Έλεγχος της ταχύτητας του μοτέρ (1KHz ρυθμός δειγματοληψίας) Λήψη εντολών ελέγχου από το πληκτρολόγιο, και εκτέλεση του βρόγχου ελέγχου Οδήγηση της οθόνης και ανανέωση δύο φορές το δευτερόλεπτο. Αποστολή δεδομένων μέσω της σειριακής θύρας όταν δεν υπάρχει άλλη επεξεργασία
Απόδοση προτεραιότητας στις διεργασίες του ελέγχου κινητήρα - μηχανισμοί ενεργοποίησης διεργασιών
Η διεργασία ελέγχου του μοτέρ ενεργοποιεί την εκτέλεσή της με σήμα διακοπής. Ο έλεγχος του πληκτρολογίου επιτυγχάνεται επίσης με σήμα διακοπής, αλλά μικρότερης προτεραιότητας. Δηλαδή, κάθε φορά που ο χειριστής χρησιμοποιεί το πληκτρολόγιο, ενεργοποιείται μια ρουτίνα διακοπής, που ελέγχει για χαρακτήρες πέντε φορές το δευτερόλεπτο. Επειδή ενεργοποιείται από τον χειριστή, η υπορουτίνα αυτή είναι απεριοδική. Η διεργασία ανανέωσης της οθόνης είναι περιοδική και ενεργοποιείται κάθε μισό δευτερόλεπτο, με τη βοήθεια μια υπορουτίνας διακοπής που ενεργοποιείται με εντολή λογισμικού (software interrupt). Τέλος, η σειριακή αποστολή δεδομένων τρέχει διαρκώς στο υπόβαθρο, ως ατέρμων βρόγχος, με χαμηλή προτεραιότητα και όταν δεν εκτελείται καμιά άλλη διεργασία.
Συστήματα Υλικού για εφαρμογές πραγματικού χρόνου ΜΕΡΟΣ Β΄ Συστήματα Υλικού για εφαρμογές πραγματικού χρόνου Χρονιστές, ελεγκτές διακοπών, θύρες Ι/Ο, UART
Διαχείριση θυρών Ι/Ο – Το κύκλωμα PIA 8255Α Tο 8255 συνδέεται με τον δίαυλο δεδομένων του επεξεργαστή και τον διαμοιράζει σε τρεις θύρες εισόδου/εξόδου: την θύρα Α, την θύρα Β και την θύρα C. Κάθε θύρα παρέχει οκτώ ακροδέκτες για είσοδο/έξοδο. Πρόκειται για κύκλωμα που «προγραμματίζεται», αφού δέχεται σήματα και ψηφιολέξεις ελέγχου από τον επεξεργαστή προκειμένου να ρυθμίσει κατάλληλα τη λειτουργία του. Επίσης, έχει τη δυνατότητα να ανταλλάξει σήματα «χειραψίας» με τις περιφερειακές συσκευές.
Διασύνδεση με το μικροϋπολογιστικό σύστημα
Λειτουργικό διάγραμμα
Ενσωμάτωση του 8255 στον μικροϋπολογιστή BGC-8088
Λέξη ελέγχου του κυκλώματος 8255 MOV DX, FF13 MOV AL, 80 OUT DX, AL
MOV DX, FF13 MOV AL, 80 OUT DX, AL MOV DX, FF10 MOV AL, AA Χρήση θύρας Α για έξοδο MOV DX, FF13 MOV AL, 80 OUT DX, AL MOV DX, FF10 MOV AL, AA
Χρήση θύρας Α για είσοδο MOV DX, FF13 MOV AL, 9Β OUT DX, AL MOV DX, FF10 IN AL, DX
Είσοδος/έξοδος MOV DX, FF13 ;Προσπελάζουμε τον καταχωρητή λέξης Ελέγχου του 8255 MOV AL, 90 ;Θέτουμε το 8255 σε mode 0, με τις θύρες A,C σε λειτουργία εισόδου και τη Β έξοδο OUT DX, AL ;Εγγραφή της λέξης Ελέγχου αρχή MOV DX, FF10 ;Προσπελάζουμε τη θύρα Α του 8255 ΙΝ AL, DX ;Εισάγουμε τα δεδομένα MOV DX, FF11 ;Προσπελάζουμε τη θύρα Β του 8255 OUT DX, AL ;Εξάγουμε τα δεδομένα JMP αρχή
Ο χρονιστής 8254 To κύκλωμα 8254 διαθέτει τρεις ανεξάρτητους απαριθμητές των 16-bits, που ο καθένας μπορεί να δεχτεί συχνότητα ρολογιού μέχρι 10MHz. Ο καθένας από τους τρεις απαριθμητές μπορεί να λειτουργήσει σε έναν από έξι συνολικά τρόπους λειτουργίας (modes). Ο κάθε τρόπος λειτουργίας διαμορφώνει διαφορετικά τον παλμό χρονισμού στην έξοδο. Ο τρόπος λειτουργίας του κάθε απαριθμητή προγραμματίζεται μέσω του λογισμικού, από τον επεξεργαστή, με τη βοήθεια εξωτερικών σημάτων ελέγχου.
Δομικό διάγραμμα του χρονιστή 8254
Διασύνδεση του χρονιστή με το σύστημα
Λέξη ελέγχου
Mode 0 O τρόπος αυτός περιορίζεται σε απλή απαρίθμηση του χρονικού διαστήματος που αντιστοιχεί στην αρχική τιμή του απαριθμητή. Μόλις εγγραφεί η λέξη ελέγχου η έξοδος OUT μηδενίζεται και παραμένει μηδέν μέχρι ο απαριθμητής να φτάσει στο μηδέν. Τότε, η έξοδος OUT τίθεται σε λογικό 1 και παραμένει στην τιμή αυτή μέχρι να φορτωθεί νέα τιμή απαρίθμησης στον απαριθμητή. Με τον τρόπο αυτό είναι δυνατό να σκανδαλίσουμε σήμα διακοπής προς τον PIC 8259 με το πέρας της απαρίθμησης.
Mode 2 Σ’ αυτή τη λειτουργία κάθε απαριθμητής του 8254 συμπεριφέρεται ως γεννήτρια ρυθμού (rate generator). Παράγει, δηλαδή, έναν παλμό με σταθερό ρυθμό, που ορίζεται από την αρχική εγγραφή στον απαριθμητή. Συγκεκριμένα, όταν φορτώνεται ο απαριθμητής η έξοδος OUT θα γίνει αρχικά λογικό 1 και μόλις η απαρίθμηση φτάσει στο μηδέν, θα γίνει λογικό 0 για έναν παλμό του εξωτερικού ρολογιού. Στη συνέχεια η έξοδος OUT γίνεται πάλι μονάδα, η αρχική τιμή φορτώνεται αυτόματα ξανά στον απαριθμητή και ο κύκλος επαναλαμβάνεται.
Mode 3 Mε τον τρόπο αυτόν ο απαριθμητής λειτουργεί ως γεννήτρια τετραγωνικού παλμού. Τυπικά χρησιμοποιείται για να παράγει τον ρυθμό μετάδοσης στη σειριακή επικοινωνία (baud rate generator). Ο τρόπος είναι παρόμοιος με αυτόν της λειτουργίας 2, με τη διαφορά ότι η περιοδική κυματομορφή που παράγεται εδώ είναι τετραγωνική, με ίση διάρκεια ΟΝ και OFF. Η κάθε ημιπερίοδος έχει διάρκεια N/2 παλμούς του ρολογιού, όπου Ν είναι η αρχική τιμή που εγγράφουμε στον απαριθμητή.
Προγραμματισμός του Counter0 σε mode3 MOV DX, FF03 MOV AL, 36 ;Θέτουμε τον counter 0 σε mode 3 για ;παραγωγή τετραγωνικής παλμοσειράς OUT DX, AL MOV DX, FF00 ;Εγγράφουμε στον Counter 0 του 8254 MOV AX, 4800 ;την αρχική τιμή απαρίθμησης MOV AL, AH ΙΝΤ3
Προγραμματιζόμενος ελεγκτής διακοπών
Δομικό διάγραμμα
Καταχωρητές 1. O Καταχωρητής Αιτήσεων Διακοπής (Interrupt Request Register –IRR), όπου καταχωρούνται οι εξωτερικές αιτήσεις διακοπής. Αν κάποιο περιφερειακό στείλει σήμα διακοπής, τότε το αντίστοιχο bit του IRR γίνεται λογικό 1. 2. Ο καταχωρητής των αιτήσεων που βρίσκονται υπό εξυπηρέτηση (In-Service Request – ISR). Σ’ αυτόν καταχωρούνται όλες οι διακοπές που έχουν αρχίσει να εξυπηρετούνται. Αν αρχίσει η εξυπηρέτηση μιας διακοπής και ληφθεί νέο σήμα με μεγαλύτερη προτεραιότητα, παύει προσωρινά η εξυπηρέτηση της πρώτης και αρχίζει η εξυπηρέτηση της δεύτερης. Έτσι, στον ISR έχουν καταχωρηθεί δύο αιτήσεις.
Καταχωρητές 3. Ο καταχωρητής απόκρυψης διακοπών (Interrupt Mask Register - IMR). Στον καταχωρητή αυτόν καταχωρούμε λογικό 1 σε εκείνα τα bits που αντιστοιχούν σε περιφερειακά των οποίων τις διακοπές θεωρούμε ανενεργές. Έτσι αν b0=1, τότε το IR0 δεν είναι ενεργοποιημένο. Άλλη σημαντική βαθμίδα είναι το κύκλωμα επίλυσης προτεραιότητας διακοπών (Priority Resolver – PR). Το κύκλωμα αυτό αποφασίζει με βάση δικές μας επιλογές ποια διακοπή από αυτές που καταχωρήθηκαν στον IRR έχει τη υψηλότερη προτεραιότητα και θα καταχωρηθεί στον ISR.
Δείκτες διακοπής για τις οκτώ πηγές διακοπών στον BGC-8088
Κυρίως πρόγραμμα για προγραμματισμό σημάτων διακοπής στο περιβάλλον BGC-8088 CLI ;Μηδένισε τη σημαία διακοπής CLD ;Μηδένισε τη σημαία κατεύθυνσης MOV AX, 0000 MOV ES, AX MOV DI, 025C ;Δείκτης διεύθυνσης διακοπής MOV AX, 003E ;Διάνυσμα διακοπής (Segment) STOSW ;Αποθηκεύει το περιεχόμενο του AX στη ;διεύθυνση ES:DI MOV AX, CS ;Offset STOSW MOV DX, FF21 ;Ορισμός της μάσκας διακοπών MOV AL, 7F ;για ενεργοποίηση του IR7 OUT DX, AL STI 0100:0018 JMP 0018 ;Αναμονή διακοπής INT3
Υπορουτίνα Εξυπηρέτησης της διακοπής 0100:003E PUSH DX ;Αποθήκευσε στη στοίβα τους DX, BX, AX PUSH BX PUSH AX MOV BL, FF ;Επανέλαβε 255 φορές 0100:0043 MOV DX, FF70 ;Εγγραφή στον STATUS Register MOV AL, 0 ;της τιμής 0 OUT DX, AL MOV CX, 0100 ;Καθυστέρηση 0100:004C LOOP 004C MOV AL, 8 ;Εγγραφή 1 στο b3 του STATUS Reg (buzzer) 0100:0054 LOOP 0054 DEC BL ;Μείωσε τον BL κατά 1 CMP BL,0 ;Σύγκρινε με το μηδέν JA 0043 ;Aν BL>0 πήγαινε στην εντολή Loop1 MOV DX, FF20 ;Εγγραφή EOI (end of interrupt) στη λέξη OCW2 MOV AL,20 POP ΑX ;Ανακτά από τη στοίβα τους AX, BX, DX POP ΒX POP DX IRET
Ενσωματωμένα Συστήματα για εφαρμογές πραγματικού χρόνου: Μέρος Γ΄ Ενσωματωμένα Συστήματα για εφαρμογές πραγματικού χρόνου: Μικροελεγκτές, DSP επεξεργαστές
Διαφορές ανάμεσα σε μικροεπεξεργαστή και μικροελεγκτή
Μικροελεγκτές και DSP επεξεργαστές
Αρχιτεκτονική Harvard και Von Neumann Παρουσίαση των δυο τύπων αρχιτεκτoνικής α) Ενιαία μνήμη προγράμματος και δεδομένων (αρχιτεκτονική Von-Neumann) β) Ξεχωριστή μνήμη προγράμματος και δεδομένων (αρχιτεκτονική Harvard).
Βασική δομή του PIC16F877 Βασική δομή επεξεργαστή και μονάδες περιφερειακών συσκευών
Αρχιτεκτονική του Μικροελεγκτή PIC16F877
Επεξεργαστής και περιφερειακά στον PIC16F877
Οργάνωση της μνήμης RAM
ΚΑΤΑΧΩΡΗΤΕΣ- STATUS REGISTER ΚΑΤΑΧΩΡΗΤΕΣ- OPTION REGISTER b7 b6 b5 b4 b3 b2 b1 b0 RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
ΚΑΤΑΧΩΡΗΤΕΣ ΕΛΕΓΧΟΥ ΘΥΡΩΝ PORTA, PORTB, PORTC, PORTD TRISA, TRISB, TRISC, TRISD BSF STATUS, RP0 MOVLW b“1111000” MOVWF TRISB BCF STATUS, RP0 MOVLW b’10101010’ MOVWF PORTB
Αριθμός εντολών * Χρόνος εκτέλεσης εντολής ΧΡΟΝΙΣΜΟΣ Διάρκεια κύκλου εντολής = 4 / (Συχνότητα εξωτερικού κρυστάλλου ) Τυπική συχνότητα λειτουργίας των μικροελεγκτών PIC είναι 4ΜΗz, οπότε η διάρκεια κάθε κύκλου εντολής είναι 1μsec. Για κρύσταλλο 8MHz η διάρκεια του κύκλου εντολής είναι 0,5 μsec. Χρόνος εκτέλεσης ομάδας εντολών = Αριθμός εντολών * Χρόνος εκτέλεσης εντολής
TIMER0, τρόποι λειτουργίας α) Ως χρονιστής (timer): Στην περίπτωση αυτή η πηγή χρονισμού είναι ο εσωτερικός κύκλος των εντολών. Το περιεχόμενο του Timer0 σε λειτουργία χρονιστή αυξάνει κατά ένα σε κάθε κύκλο εντολής. Ο κύκλος της εντολής διαρκεί όσο η περίοδος του εξωτερικού κρυστάλλου επί τέσσερα (4*fosc). H αντίστοιχη συχνότητα είναι ίση με την συχνότητα του κρυστάλλου διά 4. Χρησιμοποιώντας τον TMR0 σε λειτουργία εσωτερικού χρονισμού, έχουμε στη διάθεσή μας ένα αρκετά αξιόπιστο σήμα χρονισμού που μπορεί να χρησιμοποιηθεί για τον ακριβή προσδιορισμό χρονικών διαστημάτων. β) Ως απαριθμητής (counter): Στην περίπτωση αυτή χρησιμοποιείται ένας εξωτερικός παλμός χρονισμού. Το εξωτερικό σήμα χρονισμού συνδέεται με τον ακροδέκτη TOCKI (RΑ4). Η χρήση εξωτερικής πηγής χρονισμού επιτρέπει την απαρίθμηση εξωτερικών συμβάντων, με τη μορφή παλμών. To περιεχόμενο του Timer0 αυξάνει κατά ένα σε κάθε παλμό της εξωτερικής πηγής χρονισμού. Και στις δύο περιπτώσεις, ο TMR0 μετρά στο δεκαεξαδικό σύστημα από την αρχική τιμή που καταχωρήσαμε έως 0xFF.
Διαιρέτης συχνότητας (PRESCALER) Ο διαιρέτης συχνότητας ρυθμίζεται με τα τρία πρώτα bits του καταχωρητή OPTION
OPTION_REG b7 b6 b5 b4 b3 b2 b1 b0 RBPU INTEDG T0CS T0CE PSA PS2 PS1 PS0 Bits 7-6: Δεν έχουν σημασία για την λειτουργία του χρονιστή (τα θέτουμε 11). T0CS: Επιλογή πηγής ρολογιού 1 = Πηγή συνδεδεμένη στον ακροδέκτη T0CKI (Λειτουργία μετρητή παλμών) 0 = Εσωτερική πηγή ρολογιού (Λειτουργία χρονιστή). T0CE: Επιλογή θετικού ή αρνητικού μετώπου παλμού (αναφέρεται σε εξωτερική πηγή χρονισμού) 1 = Αύξηση με κατερχόμενο μέτωπο του παλμού στον ακροδέκτη T0CLK 0 = Αύξηση με ανερχόμενο μέτωπο του παλμού στον ακροδέκτη T0CLK PSA: "0", όταν θέλουμε να συνδέσουμε τον διαιρέτη συχνότητας. "1", όταν θέλουμε να αποσυνδέσουμε τον διαιρέτη συχνότητας. PS2-PS0: Επιλογή λόγου διαίρεσης
ΠΑΡΑΔΕΙΓΜΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΤΟΥ ΤIMER0 #include "P16F877.inc" Org 0 ;Το πρόγραμμα ξεκινά από τη θέση ;μνήμης προγράμματος 0 bsf STATUS, RP0 ;Μεταβαίνουμε στην σελίδα 1 μνήμης movlw b'11010001' ;Διαίρεση συχνότητας διά 4 movwf OPTION_REG ;Εγγράφουμε τον OPTION REG bcf STATUS, RP0 ;Μεταβαίνουμε στην σελίδα 0 μνήμης movlw 0F0h ; Θέτουμε στον TMR0 αρχική τιμή 240 movwf TMR0 bcf INTCON, T0IF ;Μηδενίζουμε την σημαία T0IF loop goto loop ;Βρόχος αναμονής END