Forum: Digitale Signalverarbeitung / DSP / Machine Learning TMS320VC55 Interrupt Problem


von Franz S. (franz)


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


von Franz S. (franz)


Lesenswert?

Naja hab wohl meinen Fehler gefunden...

man muß sich im DSP/BIOS config GUI sein Zeug noch zusammenklicken und 
das ganze muss auch noch passen ;-) naja klicki bunti halt...

betet das Ihr nie so ein Teil programmieren müsst

Franz

von Lukasz B. (lukaszb)


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

von Daniel N. (belzebub)


Lesenswert?

Hi Jungs,

sag mal wo gebt ihr eigentlich an wo die einsprungmarke der 
Interruptvektortabelle ist. Ich denke wenn ihr das einfügt ( vor der 
Initallisierung der CSL !!!, steht in irgenteiner Doc datei) sollte es 
gehen.

Gruss

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.