AVR interuppr und rfm69

OP #5036626
Lesenswert?
• ▲
▼
Hallo,

ich habe ein atmega644p und ein rfm69 und will 2 interrupts mit int2 und 
int1 abfangen.

mit int2 lief immer alles gut damit sehe ich wenn meine daten bereit 
sind um abgeholt zu werden :)

aber irgendwie wird meine isr routine für int1 immer gleich 
mitaktiviert....

so aktiviere ich beide interupts
1
    //PD2 aka INT1 als eingang für interrupt
2
    EICRA |= (1<<ISC10)|(1<<ISC11);//steigende taktflanke
3

4

5
    //PB2 aka INT2 als eingang für interrupt
6
    EICRA |= (1<<ISC20)|(1<<ISC21);//steigende taktflanke
7

8
    EIMSK |= (1<<INT1); //aktiviere INt1
9
    EIMSK |= (1<<INT2); //aktiviere INt2
1
//code für den ISR von int_vect von DIO1
2
ISR(INT1_vect)
3
{
4
    uart_puts_P("int1");
5
    uart_puts_P("\n\r");
6
       cli();
7
       //rfm_switch_mode(0); //0 ist sleep
8
       //rfm_switch_mode(4); //4 ist rx mode
9
       rfm_reset_by_timer = true;
10
       sei();
11

12
}
13

14
//code für den ISR von int_vect von DIO0
15
ISR(INT2_vect)
16
{
17
    uart_puts_P("int2");
18
    uart_puts_P("\n\r");
19
    cli();
20
    uint8_t rfm_Mode_temp = rfm_Mode; //kopieren wegen votaile
21

22
    if (rfm_Mode_temp == 0)
23
    {
24

25
    }
26
    else if  (rfm_Mode_temp == 1)
27
    {
28

29
    }
30
    else if  (rfm_Mode_temp == 2)
31
    {
32

33
    }
34
    else if  (rfm_Mode_temp == 3)
35
    {
36

37
        //power boost auschalten
38
        if (rfm_dbi_boost_value)
39
        rfm_dbi_boost_aktivate(false);
40
        //TXmode nach dem senden in den RX mode
41
         rfm_switch_mode(4);
42
    }
43
    else if  (rfm_Mode_temp == 4)
44
    {
45
        rfm_paket_RSSI = rfm_read_rssi_value();
46
        rfm_paket_GAIN = rfm_read_langain();
47
        rfm_paket_AFC = rfm_read_afc_value();
48
        rfm_paket_CRC = rfm_read_CrcOk();
49
        rfm_spi_read_FIFO_burst();
50
    }
51
    sei();
52
}

jemand eien idee ?

MFG Matze

EDIT:
Kleiner nachtrag ich habe das RFM kurz umgestellt das nach int1 kein 
signal mehr kommt und in meiner debug serial console bekomme ich 
trotzdem noch die ausgabe int1 so als würde es jedes mal auslösen wenn 
int2 auslöst.....
#5036702
Lesenswert?
• ▲
▼
Hallo,

wie hast du die Ausgänge am RFM konfiguriert? Unter bestimmten 
Bedingungen (z.B. im Listenmode beim Wechsel zwischen Sleep und RX hab 
ich das schon gehabt) kommt da auch mal ein kurzer Spike obwohl kein 
Ereignis vorliegt.
Klemm dIe Verbindung mal ab, dann weißt du schon mal wo du suchen musst.
In den ISRs kannst du dir CLI/SEI sparen, während der Abarbeitung der 
ISR sind die Interrups sowieso gesperrt. Des weiteren sollten die ISRs 
so kurz wie möglich sein. UART-Ausgaben und die SPI-Kommunikation mit 
dem RFM brauchen auch Zeit.

Sascha

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.