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

Re: Interrupt 2, INT_2 Kategorie: Programmierung Basic (von PeterS - 22.09.2010 12:04)
Als Antwort auf Re: Interrupt 2, INT_2 von Joerg - 22.09.2010 8:08

> > Peter
> >
> > Ein Nachtrag. Da ich keinen USB AnschluÃ? habe, kann ich Msg_WriteText nicht
> > benutzen. Ich habe aber eine Warteschleife in dem Interrupt Programm eingebaut:
> > Do
> >     k = k + 1
> > Loop While k
> >
> > so da� erst nach dem Zählen aller Integer Zahlen die Schleife verlassen
> > wird und dann im Hauptprogramm den Interrupt Zähler ausgegeben.
> >
> > Es wurde immer 1 ausgegeben. Ich verstehe das so, da� während der Wartezeit
> > kein weiterer Interrupt angekommen ist.
> >
> > Klaus
>
> Hallo Klaus, Hallo Peter,
>
> ich habe das folgende Testprogramm auf meinem MEGA128 mit IDE 2.12.02 getestet,
> und es funktioniert ohne Probleme. Nach 10s kommen keine Interupts mehr durch.
> Den IRQ Eingang habe ich mit einem Taster belegt.
>
>
> Das Testprogramm ist im wesentlichen ein Kopie des Beispiels EXT_INT1.cc.
> Was mir bei dem Beispiel aufgefallen ist, ist das der IRQ Eingang nicht mit
> Port_DataDirBit als Eingang definiert wurde.
>
> Diese Frage geht an Peter. Ist dies bei Ext_IntEnable nicht nötig?
>
> Grü�e Jörg
>
>
>
> #define LF        0x0A
> #define CR        0x0D
> // ExtInt Quelle definieren
> #define EXTINT INT_2
> // IntMode: 0= Interrupt bei 0 Pegel; 2=fallende Flanke; 3=steigende Flanke
> #define INTMODE 2
>
>
>
> void Ext_ISR(void)
> {
>     byte i;
>     int irqcnt;
>
>     Msg_WriteText("Ext IRQ  ");
>     Msg_WriteChar(CR);
>
>     irqcnt=Irq_GetCount(EXTINT);         // Interrupt Request Counter
>  }
> //------------------------------------------------------------------------------
> // Hauptprogramm
> //
> void main(void)
> {
>     Msg_WriteText("Ext IRQ Test");
>     Msg_WriteChar(CR);
>
>     Irq_SetVect(EXTINT,Ext_ISR);         // Interrupt Service Routine definieren
>
>
>     Ext_IntEnable(EXTINT,INTMODE);      // Interrupt aktivieren
>
>     Thread_Delay(1000);
>
>     Msg_WriteText("Disable");
>     Msg_WriteChar(CR);
>     Ext_IntDisable(EXTINT);
>
>     while (1)
>     {
>     }
>
> }
>
>

In meinen Tests funktioniert Ext_IntDisable() auch, da kann ich keine Probleme erkennen. Wenn
die externen Interrupts eingeschaltet werden, dann können die Pins als Eingang oder Ausgang
geschaltet worden sein, danach arbeiten Sie als Interrupt Eingänge.

Gruss Peter


    Antwort schreiben


Antworten:

Re: Interrupt 2, INT_2 (von Torsten - 22.09.2010 18:33)
    Re: Interrupt 2, INT_2 (von PeterS - 22.09.2010 19:40)
        Re: Interrupt 2, INT_2 (von Jörg - 22.09.2010 21:42)
            Re: Interrupt 2, INT_2 (von PeterS - 23.09.2010 9:38)