Hallo zusammen! Obwohl ich vor einiger Zeit gesehen habe, daß es schon diskutiert wurde: Wie krieg ich das hin, daß mein MSP einen Interrupt auslöst und dann ins Programm zurückspringt, wenn ich eine Flanke auf Port 1 habe. Genauer gesagt auf einem PIN auf Port 1? der Plan ist so: * programmschleife unterbricht, * setzt Interruptfunktion setzt variable * programm wird fortgesetzt und reagiert später auf den Interrupt durch eine aufzuckende LED bool bPort1Int; /* Description : wird von Port 1 gesetzt */ wakeup interrupt (PORT1_VECTOR) INT_P1(void) { //acknowledge interrupts (caution! clr is not appropriate when multiple irqs are enabled) bPort1Int = 1; DINT(); } int main(void) { P1DIR=0xFF; //port 1 = output P1OUT=0x00; //set bit 0 in port 1 P1DIR=0; //port 1 = input P1IES = 0xFF; // Interrupt Edge Select (+Slope=1) P1IE = 0xFF; // Interrupt Enable (Yes=1) P2DIR=0xFF; //port 2 = output P2OUT=0x00; bPort1Int=0, EINT(); for(;;) { //infinite loop P2OUT+=1; delay(0x4fff); P2OUT+=1; delay(0x4fff); if (bPort1Int==1){ P2OUT=0; bPort1Int=0; EINT(); } delay(0x4fff); P2OUT+=1; delay(0x4fff); P2OUT+=1; delay(0x4fff); P2OUT+=1; delay(0x4fff); P2OUT+=1; delay(0x4fff); P2OUT+=1; delay(0x4fff); } } Danke Benni
Hallo Benjamin, gut das Du noch einen eigenen Thread zu Deiner Frage aufgemacht hast. mit was arbeitest Du gcc- oder IAR-Tools?
Ich habe mspgcc runtergeladen. Insigth und proxy tun ihre arbeit - wenn auch nicht sehr zuverlässig: Ich lösche immer noch manuell den gesamten speicher vor einer neuprogrammierung. Das passt mir nicht. Die Quelltextanzeige im Insight funxt auch nicht wirklich. Vielelciht liegt das aber eindfach an WinXP. Will demnächst mal auf Linux testen. CIAO Benni
Das manuelle Löschen des gesamten Speichers macht doch sinn... Wenn Du die Info-Memory (FSEG_A und FSEG_B) nicht löschen möchtest, aber ein "monitor erase all" in der Insight-Config einträgst, gibts da ein Problem ;-) Sourcecode alignement funktioniert bei mir wunderbar (Win2K), allerdings verabschiedet sich mein Insight schon mal beim auslesen des Stacks oder hin und wieder auch mal ziemlich wild bei irgend einer trivialen Operation, wie beispielsweise das Konsolenfenster des GDBs öffnen... Deine Frage zum Interrupt an Port 1 ist ja schon geklärt, oder? Gruß, Patrick...
von Benni in einem anderen Thread geschrieben: *** Hallo M@is! Danke! Hab den fehler diese "Nacht" noch gefunden. Deine antwort hat meinen fund aber auch noch bestätigt: Ich habe das Interrupt-Flag nicht zurückgesetzt. Die Eingänge habe ich einfach alle parallel geschaltet - dann liegen sie definiert (und das eh schon über einen pull down). Habe in einem sehr kelein Prog reaktionszeiten von rund 200-300 ns bei 8 MHz Quarz - finde ich etwas viel! Hast du erhfahrungen? Benni *** ANTWORT: sieht bei mir nicht besser aus, mit den Zeiten liegst Du schon gut, leider :-( Gruß m@is
Hab mich um eine paar 10er-potenzen vertan: es sind gerade 350µs. Das finde ich etwas viel: Der Prozessor macht alle 125ns einen schritt - dann brauchte er ja mehr als tausend schritte um den interrupt durchzureichen?!?!
JuHuuuu! Gerae habe ich mal direkt in der Interrupt-Routine die ausgabe gestartet. Da komme ich den Werten die ich brauche schon näher: 2,5µs reaktionszeit. Das ist nicht schlecht! Benni
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.