Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Interrupt wird wiederholt ausgelöst Kategorie: Programmierung C (von PeterS - 15.05.2006 12:40)
Als Antwort auf Interrupt wird wiederholt ausgelöst von Markus - 13.05.2006 19:43
Ich nutze:
C-Control Pro Mega32, C-Control Pro Mega128
Hallo Markus,

ich hasse es zu sagen, aber wir haben einen Bug in der ExtIntEnable Routine beim Mega128.
Allerdings funktioniert die Routine fĂĽr Interrupt 0 und 4. Die mode Werte sind:

0: a low level triggers the interrupt
1: every changing edge triggers the interrupt
2: a falling edge triggers the interrupt
3: a rising edge triggers the interrupt


Beispielproghramm das mit SW1 (IRQ 4) läuft:

void Ext_ISR(void)
{
    Port_WriteBit(PORT_LED1,0);
    AbsDelay(500);
    Port_WriteBit(PORT_LED1,1);
    Irq_GetCount(INT_4);
}

void main(void) {
    Port_DataDirBit(PORT_LED1, 1);
    Port_DataDirBit(PORT_SW1, 0);
    Port_WriteBit(PORT_SW1, 1);
    Irq_SetVect(INT_4, Ext_ISR);
    Ext_IntEnable(4, 3);
    while(1);
}

Gruss Peter


> Hallo,
>
> Ein kurzes Minimalbeispiel (ähnlich EXT_INT1.cc aus dem Beispielcode):
> ----
> void Ext_ISR(void)
> {
>     int i;
>     Ext_IntDisable(INT_6);
>     Port_WriteBit(LED2,0);
>     for (i=0; i<5000; i++);
>     Port_WriteBit(LED2,1);
>     Ext_IntEnable(6, 4);
>     Irq_GetCount(SW_INT);
> }
>
> void main(void) {
>     [...]
>     Port_DataDirBit(38, 0);
>     Port_WriteBit(38, 1);
>     Irq_SetVect(INT_6, Ext_ISR);
>     Ext_IntEnable(6, 4);
>     while(1);
> }
> ----
>
> Ein Druck auf den Taster SW2 soll LED2 kurz leuchten lassen. Unerwarteterweise leuchtet die LED aber
> dauerhaft, wenn man den Taster gedrückt lässt, obwohl der Interrupt flankengesteuert ausgelöst wird.
> Woran kann das liegen?
>
> GruĂ?,
> Markus


    Antwort schreiben


Antworten:

Re: Interrupt wird wiederholt ausgelöst (von Markus - 15.05.2006 22:05)
    Re: Interrupt wird wiederholt ausgelöst (von Markus - 15.05.2006 22:15)