Interrupt service rountine für LPC

Gast #438011
Lesenswert?

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;
}
Gast #438199
Lesenswert?

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 ?
#438247
Lesenswert?

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
Gast #438335
Lesenswert?

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 ;-))
#438343
Lesenswert?

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
Gast #438498
Lesenswert?

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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren