TMS320VC55 Interrupt Problem

OP #428044
Lesenswert?

Hi,

ich habe ein Board mit dem TMS320VC5509A. Ich will jetzt das auf einen 
externen Interrupt eine Reaktion erfolgt. Zu Testzwecken ziehe ich den 
Interrupteingang INT3 auf Masse der sonst über nen PULL UP Wiederstand 
auf Versorgungsspannung liegt.

Es passiert gar nix.


Ausschnitte aus meinem Code:

#include <stdio.h>
#include <csl.h>
#include <csl_mcbsp.h>
#include <csl_irq.h>

static void mcbsp1_init(void);
interrupt void myIsr(void);

void main() {

CSL_init();

IRQ_plug(IRQ_EVT_INT2, &myIsr);
IRQ_enable(IRQ_EVT_INT2);
IRQ_globalEnable();

...
}


interrupt void myIsr(void) {
mcbsp1_init();
}


Im spru433j.pdf von TI steht u.a im Bsp. noch die Zeilen:

extern Uint32 myVec;

....

IRQ_setVecs((Uint32)(&myvec) << 1));

mit denen ich nix anzufangen weiß.

Muss ich da noch diese Asambler "einbinden" die manchmal in den 
Beispielen dabei ist (vectors.s55 o.ä.)?

Wenn ja wie mache ich das und wie muss diese Datei aussehen?

Ich hab überhaupt keinen Plan wie das hinhauen soll. Für Hilfe wäre ich 
sehr Dankbar.

mfg
Franz

#432037
Lesenswert?

Hi,

am Anfang, aus deinem Code:
es ist merkwuerdig, dass mcbsp1_init
im interrupt steht - wie soll der mcbsp
die Funktion einfach starten?
Es soll am Anfang im main() stehen.ich habe ganz aenliches Problem.
Es ist zwar anderes Board/DSP - TMS320C54CST.
Wollte einfach den McBSP einschalten
und etwas hin und her schicken.

Nachdem ich die alle IRQ_ Funktionen eingefuegt,
dann die myIsr geschreieben, geht es so:
1. Wenn ich in zyklisch etwas in den port schreibe
oder lese, geht die ISR ok.
2. Wenn die Loop aber leer ist - kommen keine Interrupts.

Hast Du so etwas aenliches?
Geht es richtig oder habe ich Fehler gemacht?
Es soll ohne DSP/BIOS funktionieren.


void main(void) {
  CSL_init();
  MCBSP_init();
  IRQ_plug(   IRQ_EVT_XINT1, &intMCBSP1_write );
  IRQ_clear(  IRQ_EVT_XINT1 );
  IRQ_enable( IRQ_EVT_XINT1 );
  IRQ_plug(   IRQ_EVT_RINT1, &intMCBSP1_read );
  IRQ_clear(  IRQ_EVT_RINT1 );
  IRQ_enable( IRQ_EVT_RINT1 );
  IRQ_globalEnable();
  MCBSP_write16( McbspDataHandle, 0 );  // start to generate first int
  MCBSP_read16( McbspDataHandle );

for ( ; ;  ) {
//   MCBSP_write16( McbspDataHandle, 0 );
//   MCBSP_read16( McbspDataHandle );
   }

}

interrupt void intMCBSP1_write() {
  MCBSP_write16( McbspDataHandle, sample );
}

interrupt void intMCBSP1_read(void) {
  sample = MCBSP_read16( McbspDataHandle );
}

--
Lukasz

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