www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe MC9S12NE64 interrupt programmierung


Autor: Sebastian Sobierajski (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich hab ein kleines Problem. Ich muss mich auf ein MC9S12NE64
einschießen.

Mein Problem: Ich hab keine Ahnung wie so ein Ding programmiert wird.

Ich möchte auf meinem Demoboard eine LED via Interrupt zum leuchten
bringen.

Mit den Ports kenn ich mit schon etwas aus.
Es müsste der Port H pin 4 sein, den man als Interrupteingang benutzen
kann.

Die Ansteuerung der LEDs funktioniert in der Main erstmal Ohne ISR


Gruss
Sebastian

Autor: Eckhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wundert mich ein wenig das keine Demo dabei war die Interrupts
verwendet. Das ganze sollte jedenfalls so aussehen:

typedef void (*near tIsrFunc)(void);
const tIsrFunc _vect[] @0xFF80 = {     /* Interrupt table */
        UnimplementedISR,                 /* vector 63 */
        UnimplementedISR,                 /* vector 62 */
        UnimplementedISR,                 /* vector 61 */
        UnimplementedISR,                 /* vector 60 */
        UnimplementedISR,                 /* vector 59 */
        UnimplementedISR,                 /* vector 58 */
        UnimplementedISR,                 /* vector 57 */
        UnimplementedISR,                 /* vector 56 */
        UnimplementedISR,                 /* vector 55 */
        UnimplementedISR,                 /* vector 54 */
        UnimplementedISR,                 /* vector 53 */
        UnimplementedISR,                 /* vector 52 */
        UnimplementedISR,                 /* vector 51 */
        UnimplementedISR,                 /* vector 50 */
        UnimplementedISR,                 /* vector 49 */
        UnimplementedISR,                 /* vector 48 */
        UnimplementedISR,                 /* vector 47 */
        UnimplementedISR,                 /* vector 46 */
        UnimplementedISR,                 /* vector 45 */
        UnimplementedISR,                 /* vector 44 */
        UnimplementedISR,                 /* vector 43 */
        UnimplementedISR,                 /* vector 42 */
        UnimplementedISR,                 /* vector 41 */
        UnimplementedISR,                 /* vector 40 */
        UnimplementedISR,                 /* vector 39 */
        UnimplementedISR,                 /* vector 38 */
        UnimplementedISR,                 /* vector 37 */
        UnimplementedISR,                 /* vector 36 */
        UnimplementedISR,                 /* vector 35 */
        UnimplementedISR,                 /* vector 34 */
        UnimplementedISR,                 /* vector 33 */
        UnimplementedISR,                 /* vector 32 */
        UnimplementedISR,                 /* vector 31 */
        UnimplementedISR,                 /* vector 30 */
        UnimplementedISR,                 /* vector 29 */
        UnimplementedISR,                 /* vector 28 */
        UnimplementedISR,                 /* vector 27 */
        UnimplementedISR,                 /* vector 26 */
        UnimplementedISR,                 /* vector 25 */
        UnimplementedISR,                 /* vector 24 */
        UnimplementedISR,                 /* vector 23 */
        UnimplementedISR,                 /* vector 22 */
        UnimplementedISR,                 /* vector 21 */
        SCI0_ISR,                         /* vector 20 */
        UnimplementedISR,                 /* vector 19 */
        UnimplementedISR,                 /* vector 18 */
        UnimplementedISR,                 /* vector 17 */
        UnimplementedISR,                 /* vector 16 */
        UnimplementedISR,                 /* vector 15 */
        UnimplementedISR,                 /* vector 14 */
        UnimplementedISR,                 /* vector 13 */
        UnimplementedISR,                 /* vector 12 */
        UnimplementedISR,                 /* vector 11 */
        UnimplementedISR,                 /* vector 10 */
        UnimplementedISR,                 /* vector 09 */
        UnimplementedISR,                 /* vector 08 */
        RTI_ISR,                          /* vector 07 */
        UnimplementedISR,                 /* vector 06 */
        UnimplementedISR,                 /* vector 05 */
        UnimplementedISR,                 /* vector 04 */
        UnimplementedISR,                 /* vector 03 */
        UnimplementedISR,                 /* vector 02 */
        UnimplementedISR,                 /* vector 01 */
        _Startup                          /* Reset vector */
   };

und dann die ISRs

#pragma CODE_SEG __NEAR_SEG NON_BANKED /* Interrupt section for this
module. Placement will be in NON_BANKED area. */
__interrupt void UnimplementedISR(void)
{
   /* Unimplemented ISRs trap.*/
   asm BGND;
}

#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void SCI0_ISR(void){
  static char command[5]; /* enough to hold "stop" or a single digit
number */
  static unsigned char i=0; /* index into command */
  unsigned char rc;
  rc = SCI0SR1; /* dummy read to clear flags */
  rc = SCI0DRL; /* data read */
  if (i >= sizeof(command)-1 || rc == 0x0D) {
    command[i] = '\0';
    i = 0;
    executeCommand(command);
  } else {
    command[i] = rc;
    i++;
  }
  SCI0DRL = rc;
}

#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void RTI_ISR(void) {
  absoluteTime++;
  /* clear RTIF bit */
  CRGFLG = 0x80;
}

De Vektoren sind hier von einem DP256, mußt D also ggf anpassen.

Eckhard

Autor: Sebastian Sobierajski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Erstmal danke. Ich werde mal schauen. Dieses Demo ist dabei.... nur ich
hab ja bei mir kein Array in dem Sinne. Sondern ein define Tabelle.
z.B. #define Vporth 0x0000200c....
ISt ja auch kein Problem....
OK erstmal danke.....das Wochenende ist gerettet:-)

PS:
Das mit dem Pragma kenn ich etwas anders in der Codewarrior Help
gelesen. #Pragma TRAP_PROC

Autor: Sebastian Sobierajski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ich bins nochmal hat sich alles geklärt....DANKE NOCHMALS

Autor: Sebastian Sobierajski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmals DANKE Eckhard. Dein Tip war genau richtig.
Das funktioniert jetzt soweit bestens mit der Interruptauslösung nur
hab ich da ein Problem mit einem bestimmten Interrupt. Ich möchte gern
ein Interrupt auslösen (XIRQ).
Das Problem:
Dieser wird nur ausgelöst wenn das X Bit im CCR Register gleich NULL
ist.

Gibt es eine Möglichkeit dieses CCR Register zusetzen.
Ich hab in der Doku gelesen es gibt eine Möglichkeit im BDM
Mode...diese Kann ich nicht nutzen da ich über RS232 flashe.

Gruss
Sebastian

Autor: Eckhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also direkt in C weiß ich jetzt nicht wie das geht. Kann sein das es da
irgendwas gibt. Sonst mußt Du da ein wenig Assembler einbinden.

Du kannst in das Satusregister auf diverse Arten Schreiben.

EXG ( Exchange mit dem Statusregister als Ziel )
TFR ( ebenso )
TAP ( TTransfer Akku to Status )
PULC ( Hole Statusregister vom Stack )

Das ganze könnet dann also so funktionieren.

asm {
tpa
anda #%10111111
tap
}


Eckhard

Autor: Sebastian Sobierajski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Danke nochmal für deine schnelle Antwort.
Du hast recht mit Assembler kann man das machen.
Ich hab das grade mit einem Assembler Befehl gelöst.

ADDCC #$00BF // Bitweise Und mit 0xBF

Nochmals Danke.

Schönes Wochenende noch

Sebastian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.