M16C + Interrupt

Gast #94394
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 ???

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