Forum: Mikrocontroller und Digitale Elektronik M16C + Interrupt


von Benedikt (Gast)


Lesenswert?

Ich habe wieder mal ein Problem:
Ich steuere ein Display an, die Sync Signale liegen P1.5 und P1.6 (INT3
und INT4) an.

Daher habe ich die beiden Interrupts in der sect30.inc eingetragen:

;---------------------------------------------------------------
; variable vector section
;---------------------------------------------------------------
  .section  vector    ; variable vector table
  .org  VECTOR_ADR
  .lword  dummy_int    ; vector 0 (BRK)

  .lword  dummy_int    ; Reserved (for user)
  .lword  dummy_int    ; Reserved (for user)
  .lword  dummy_int    ; Reserved (for user)
  .glb _int3
  .lword  _int3      ; INT3 (for user)
  .lword  dummy_int    ; TIMER B5 (for user)
  .lword  dummy_int    ; TIMER B4 (for user)
  .lword  dummy_int    ; TIMER B3 (for user)
  .lword  dummy_int    ; INT 5 (for user)

  .glb _int4
  .lword  _int4      ; INT4 (for user)

Im NC30 Compiler die Interrupts deklariert:

#pragma INTERRUPT int3
#pragma INTERRUPT int4

und aktiviert:
  ifsr=64;
  int4ic=6;
  int3ic=22;
  asm( "\tFSET  I");  /* Enable interrupt */

void int3(void)    //VSync
{
  Byte=0;
  return;
}

void int4(void)    //PixelClk
{
  p0 = FrameBuffer [Byte%16] [Byte/16];
  Byte++;
  while ((p1 & 64)== 64)
  {}
  p1=(p1 | 128);
  while ((p1 & 64)== 0)
  {}
  p1=(p1 & 127);
  return;
}

Int3 funktioniert, Int4 nicht, aber wiso ???

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.