kann mir wer weiterhelfen? krieg das mit den Interrupts nicht hin... kann mir irgendwer ein kleines Codebeispiel für ne Interruptservice-Routine geben, damit ich mich ein wenig dran orientieren kann? Gruß und DANKE Roman
Schön wärs wenn du ein bischen Code zur Verfügung stellst und dein Problem beschreibst. C ?, ASM ? welcher Interrupt ?
Tschuldigung für meine knappe Ausdrucksweise. Ich programmiere in C mit der Entwicklungsumgebung Hitop, kenn mich aber auch mit uVision ein wenig aus. Bei meiner Entwicklungsumgebung ist ein kleines Programm dabei (StartEasy) mit dem man sich die ganzen Einstellungen für Ports, Baudrates, Interrupts usw. generieren lassen kann. Bisher bin ich relativ gut damit zu recht gekommen, allerdings bei den Interrupts versteh ich nur Bahnhof. Hab gedacht jemand von euch hat schon mal so was gemacht und kann mir ein bereits geschriebenes Programmchen schicken. was StartEasy so ausspuckt: /* defines for interrupt handlers */ /* unasigned interrupts: */ void isr_Default ( void ) _attribute_ ((interrupt ("IRQ"))); /* interrupt handler IRQ and FIQ interrupts */ /* interrupt handler for Default interrupt vector */ void isr_Default ( void ) { SWITCH_IRQ_TO_SYS; IOPIN1 = 0x0000FF00; SWITCH_SYS_TO_IRQ; /* clear interrupt in VIC */ VICVectAddr=0; } /* configuration of channel 0 IRQ channel is assigned to an interrupt channel but not enabled for IRQ. */ /* configuration of default interrupt vector */ VICDefVectAddr = (unsigned int)isr_Default; /* enable selected interrupts */ VICIntEnable = VIC_SOURCE_EINT1; /* Select enabled interrupts which are configured as FIQ */ VICIntSelect = VIC_SOURCE_EINT1; }
Ich kenne HITOP nicht aber der Code sieht für mich nach einem leeren Template aus. Interrupts sehen in etwa so aus: void timer_0_isr (void) interrupt 1 wobei "interrupt 1" ein keyword ist welches dem Compiler mitteilt das es sich hierbei um den Timer 0 Interrupt handelt. Der Code wird somit an die ISR Einsprungadresse für Timer 0 gesetzt. TMOD = 0x01; // Timer 0 Modus 1 = 16 BIT Timer ET0 = 1; // Enable Timer 0 Interrupt EA = 1; // Enable All BIT = 1 TR0 = 1; // Timer 0 starten Diese Anweisungen stellen nun Timer 0 in Modus 1 und bei Überlauf wird der Interrupt ausgelöst. void timer_0_isr (void) interrupt 1 { // mach was } Alles klar ?
Ich glaube das Beispiel für den 8051er hilft hier nicht wirklich... Mit LPC ist wohl eher ein ARM gemeint. Hab aber auch leider grad nix parat.
Ooooh, sorry Ich hatte die Namensgleichen 8x51 LPC's im Kopf ;-((
ARM-Fan wrote: > Ich glaube das Beispiel für den 8051er hilft hier nicht wirklich... > Mit LPC ist wohl eher ein ARM gemeint. Komisch, daß sich manche lieber ein Bein ausreißen, ehe sie die genaue CPU-Bezeichnung rausrücken. Das sollte eigentlich immer die allererste Angabe sein, wenn man Fragen hat. @Roman Also um welchen Chip geht es hier ? Peter
Peter, du sprichst mir aus der Seele, so langsam habe ich keine Lust mehr jemandem zu helfen. Mittlerweile sind doch einige nicht mehr in der Lage eine Frage vernünftig zu formulieren. Bin eigentlich auch ein Geduldsesel aber im Moment hab ich die Faxen dicke ;-))
Ich nehme einfach mal an es handelt sich um einen Typen der LPC2000 Familie. Fuer die Grundinitialisierung ist diese Application Note waermstens empfohlen: http://www.standardics.nxp.com/support/documents/microcontrollers/pdf/an10404.pdf Ein schoenes Beispiel fuer Interrupts gibts hier: "Nesting of interrupts in the LPC2000" auch wenn es keine "Nested" interrupts sind http://www.standardics.nxp.com/support/documents/microcontrollers/pdf/an10381.pdf Hoffe das hilft mal weiter, Robert
Ich muss mich an dieser Stelle entschuldigen, meine unpräzisen Angaben haben für etwas Aufregung gesorgt. Aber vielen Dank für Eure Beiträge, habs mit diesen Hilfestellungen nun doch hingekriegt...
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.