Problem LPC2136 mit mehreren Interrupts

Gast #443114
Lesenswert?
• ▲
▼
Hallo!

Ich habe ein Problem mit meinem Code, sobald zwei Interrupts gehandelt 
werden sollen..
Hardware: LPC2136
Umgebung: Cross Works 1.6
OS: FreeRTOS

Ich verwende zwei Interrupts (Vectored IRQs): Timer mit 22kHz und I2C 
als Slave, der jede 50ms 3Byte empfaengt und 1Byte sendet. Beide 
Komponenten laufen einzeln problemlos, zusammen steigt jedoch I2C 
irgendwann aus. Der Flag SI (I2C Int-Flag) in I2C0STAT wird zwar 
gesetzt, der Handler aber nicht aufgerufen.

Hier die entsprechenden Codestueckchen:

//Part fuer Timer
static void Timer1_Isr(void) __attribute__((naked));

void InitIRQTimer()
{
  VICIntSelect &= ~(TIMER1_VIC_CHANNEL_BIT);
  VICIntEnable |= TIMER1_VIC_CHANNEL_BIT;
  VICVectAddr3 = (unsigned int) &Timer1_Isr;
  VICVectCntl3 = TIMER1_VIC_CHANNEL | TIMER1_VIC_ENABLE;
}

static void Timer1_Isr(void)
{

  portSAVE_CONTEXT();

  T1IR |= T1IR_MR0; // clear TI
  .
  .
  .
  VICVectAddr = CLEAR_VIC_INTERRUPT;
  portRESTORE_CONTEXT();
}

//Und jetzt I2C
void I2C0_Isr(void) _attribute_ ((naked));
static void I2C_Init(void)
{
    //I2C-Init
    PINSEL0 |= 0x50; // P0.3 = SDA, P0.2 = SCL
    I2C0ADR = I2C_SLAVE_ADDR<<1; // set I2C slave address
    I2C0CONSET = 0x44; // enable I2C hardwar and set AA (ack)
    VICVectAddr4 = (unsigned int) &I2C0_Isr;
    VICVectCntl4 = 0x29; // Channel1 on Source#9 ... enabled
    VICIntEnable |= 0x200; // 9th bit is the I2C
}

void I2C0_Isr(void)
{
  portSAVE_CONTEXT();
  I2C0CONCLR = 0x08; // clear SI
  .
  .
  .
  VICVectAddr = CLEAR_VIC_INTERRUPT;
  portRESTORE_CONTEXT();
}

Irgendwie habe ich das Gefuehl, dass etwas fehlt.. Ich gehe davon aus, 
dass sobald ein I2C-Int waehrend der Ausfuehrung des Timer-Ints 
auftritt, dieser vergessen wird..

Bin fuer jeden Hinweis dankbar!

Gruss,
Th.Kusch

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.