Ich verwende LPC1778 uC für ein Projekt und möchte wissen, was der Unterschied zwischen der Erzeugung von Impulsen über die Timer-Match-Ausgabe und dem Umschalten eines Pins in einer Timer-ISR ist. Was sind die Vor- und Nachteile beider Ansätze? Welcher würde genauere Impulse erzeugen? Oder gibt es keinen Unterschied zwischen ihnen?
Der einzige Nachteil, den ich beim Erzeugen von Impulsen über Match-Pins sehen kann, ist, dass uCs im Allgemeinen nur wenige Match-Pins haben und daher nur wenige Impulse über ein Timer-Match erzeugt werden können, während es möglich ist, Impulse an jedem GPIO von einem Timer-ISR zu erzeugen.
Der Timer-Abgleich ist bei weitem genauer und die beste Lösung, wenn Sie hohe Präzision und das deterministischste Verhalten benötigen.
Die Timer-Anpassung hat eine Genauigkeit der CPU-Busfrequenz (auf diesem Teil bis 60 MHz). Interrupts haben eine Unsicherheit von einigen Takten (z. B. wenn sich die CPU mitten in einer langen Anweisung befindet, wenn der Interrupt auftritt). Außerdem haben einige CPUs kleine Caches und die Abrufzeit wirkt sich auf die Interrupt-Latenz aus.
Interrupts können flexibler sein, wenn Sie zusätzliche Entscheidungen über die Pin-Aktion treffen müssen – umschalten oder nicht, Berechnungen durchführen usw.
Das Problem bei einem ISR-basierten Ansatz ist, dass es sich um einen Interrupt handelt . Es unterbricht Dinge.
Die Verwendung der integrierten Timer-Vergleichsfunktionen zum Umschalten eines Match-Pins erfolgt vollständig in Hardware. Sie können Code auf dem Prozessor ausführen lassen und er hat keine Ahnung, dass der Timer den Pin umschaltet.
Wenn Sie einen ISR verwenden, um einen Pin umzuschalten, haben Sie mehr Flexibilität (Sie können mehr tun, als nur einen Pin umzuschalten, und Sie können jeden gewünschten Pin umschalten), aber Sie haben jetzt viele Interrupts, die Ihren Code unterbrechen . Dies kann zeitspezifische Routinen stören oder bei hohen Frequenzen zu unnötigem Overhead führen (Ihr Interrupt kann einen großen Teil der gesamten Befehlsanzahl ausmachen und Zyklen verschlingen, die vom Hauptprogramm verwendet werden könnten).
Welcher würde genauere Impulse erzeugen?
Die Timer-Match-Funktion wird wahrscheinlich eine genauere Ausgabe erzeugen, es sei denn, Sie gehen beim Programmieren Ihrer Interrupts sehr vorsichtig vor. Um genaue PWM/Pulse mit ISRs zu erhalten, müssen Sie Ihre ISRs wahrscheinlich in Assembler schreiben, damit Sie wissen, wie viele Zyklen sie benötigen, und dies dann in Ihrem Code berücksichtigen, der die Timings festlegt. Grundsätzlich wird der Aufwand für die Eingabe des ISR die Dinge zeitlich beeinflussen.
Wenn es möglich ist, mit den Timer-Match-Pins zu tun, was Sie tun möchten, tun Sie dies im Allgemeinen so, dass Sie keinen zusätzlichen Interrupt-Overhead haben. Wenn es mit den Timern allein nicht möglich ist, das zu erreichen, was Sie benötigen, oder Ihnen die Timer-Pins ausgehen, verwenden Sie einen ISR.
AlphaGoku