Forum: Mikrocontroller und Digitale Elektronik Software Interrupt bei pic18F458


von Olli (Gast)


Lesenswert?

Hi,

ich habe folgende Frage:
Bietet der 18F458 Software Interrupts?

Habe es im Moment so gelöst, dass ich einen Interrupt aktiviere (z.B. 
INT0) und diesen per Software setze.

Finde das UNSCHÖN. Hätte gerne Software IRs, die ich bequem setzen und 
rücksetzen kann und trotzdem alle I/O IRs nutzbar bleiben.

Im Datenblatt habe ich leider nix darüber gefunden.


Gruß O'

von Peter D. (peda)


Lesenswert?

Was ist der Unterschied zwischen einem Softwareinterrupt und einem Call 
zu einer Funktion, die zu Anfang die Interrupts sperrt ?

Keiner.


Peter

von Olli (Gast)


Lesenswert?

OK, dankeschön

Programmiere in C.
Muss ich das dann mit inline_Assembler machen oder gibts da 
Funktionen/Befehler.


Vielen Dank O'

von tastendrücker (Gast)


Lesenswert?

Da wird es sicher einen Befehl zum setzen/löschen des GIE (Global 
Interrupt Enable) Flags geben. Das sollte in der Doku zum Compiler 
stehen.

von Steff (Gast)


Lesenswert?

So könnte ein selber gebastelter SoftwareIR aussehen:

Void call_SWIR(char IRNr)
{
    // Deactivate Interrupts
    INTCONbits.GIEH = 0x00;
    INTCONbits.GIEL = 0x00;

    switch(IRNr)
    {
  case1:
         // CODE
       // …….
       break;
  default:
       break;
    }

    // Reactivate Interrupts
    INTCONbits.GIEH = 0x01;
    INTCONbits.GIEL = 0x01;
}


Gruß Steff

von Olli (Gast)


Lesenswert?

Hi,

danke für die Antworten.
Habe n bissel nachgeforscht (C18 Users Gide)

Wenn ichs richtig verstanden habe übernimmt die ISR das Deaktivieren der 
Interrupts und letztendliche Reaktivieren beim Verlassen.

Das bedeutet, dass ich meine SoftwareIRs wie folt realisieren könnte:

Struktur strctSWIR erstellen mit x gewünschten IR_Status_Bits.

Im Code:

..
..
..
strctSWIR.SWIR1 = 0x01;
high_isr();
..
..

In der high_ISR frage ich einfach strctSWIR.SWIR1 ab, so wie ich die 
I/O-Interrupts auch abfrage.

Müsste funktionieren oder?


Gruß O'

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
Noch kein Account? Hier anmelden.