-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Uart senden empfangen Interrups

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2005
    Beiträge
    25

    Uart senden empfangen Interrups

    Anzeige

    Hallo,
    ich möchte mit dem ganz einfachen Programm folgendes machen:
    daten empfangen und senden per interrupt

    meiner meinung wird das rxcie-bit gesetzt, wenn daten da sind --> also INT_gChar muss doch auslösen, oder?

    und wenn TXCIE-bit gesetzt ist löst der senden Interrupt aus, oder?

    Wahrscheinlich verstehe ich hier was grundlegendes nicht. Wäre super, wenn mir jemand helfen kann.
    Danke schon mal.
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Das asm auseinander zu klabüstern ist mit jetzt etwas zu viel. Vielleicht gibt dir ja eine C-Routine den richtigen Hinweis, wie die ISRs zu machen sind?

    http://www.roboternetz.de/wissen/ind...Mit_Interrupts
    Disclaimer: none. Sue me.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2005
    Beiträge
    25
    habe rausgefunden, dass ich der tx int nur auslöst, wenn daten gesendet wurden. deshalb habe ich das senden jetzt mit in den rx int gelegt.
    geht aber immer noch nicht.

    es wäre super, wenn sich das mal einer ansehen könnte und mir sagen kann, was ich falsch mache bzw. falsch verstanden habe.
    danke schon einmal.
    ronald
    Angehängte Dateien Angehängte Dateien

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Es gibt zwei IRQs, die mit dem Senden zusammenhängen:
    Der TX-IRQ wird getriggert, wenn eine Übertragung komplett ist.
    Und der Data-IRQ, der wird getriggert, wenn UDR leer ist und was neues aufnehmen kann (auch wenn der Transmit noch nicht fertig ist).

    -- Du musst die Übertragungsart einstellen, also wieviele datenbits, Stop, Parity...
    -- Die IRQs, die du haben willst, musst du aktivieren (RXIE, TXIE oder so)
    -- Interrupts müssen global aktiviert sein (I in SREG via sei)
    -- Die ISRs brauchst du nicht in cli/sei zu fassen, die AVR-Hardware deaktiviert IRQs beim Betreten einer ISR und reaktiviert danach. Das AVR-Handbuch beschreibt das ganz schön
    -- r17 hat keinen definierten Wert und überschreibt alles , was auf PORTB passiert.
    Disclaimer: none. Sue me.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2005
    Beiträge
    25
    danke für deine antwort,

    den port 17 habe ich zum testen für die leds gemacht. d.h. wenn er in den int springen würde, würde dann die rote leuchten und wenn er es zum senden schafft, auch die gelbe. das sollte schon so richtig sein.
    die baudrate ist eingestellt.

    ich möchte folgendes:
    wenn daten ankommen, soll der int auslösen. ich möchte mir also die polling abfrage sparen (sbis usr,7), so dass der µC auch noch was anderes machen kann.
    also die art der übertragung muss ich glaube nicht einstellen, denn wenn ich es ohne int programmiere, dann gehts ja auch.
    danke

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    -- wo werden INTs global aktiviert?
    -- wo wird RX-Interrupt aktiviert?
    -- die Übertragiunsart muss eingestellt werden, die Befehle dazu sind keine Dekoration. Stimmt die Einstellung nicht, empfängst du Müll.
    -- wie gesagt, R17 überheinert alles, was du an PORTB machst, und zwar so fix, daß du die LEDs noch nichtmal zucken siehst
    Disclaimer: none. Sue me.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2005
    Beiträge
    25
    1.) die ints sind automatisch aktiviert, ich habe sie nur am anfang des ints deaktiviert, das dieser empfangsint nicht unterbrochen wird, am ende lasse ich sie wieder zu
    2.) in der vektortab verweise ich auf den int, welcher durch das gesetzte bit 7 im usr aufgerufen wird (so zumind. mein Kenntnisstand)
    3.) die baudrate habe ich eingestellt (9600)
    4.) dadurch, dass ich nur ein bit setze und kein überschreibe, müssten alle leds leuchten, wenn der int einmal durchgelaufen ist

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    ad 1) Interupts sind ab Reset deaktiviert bei AVR. Wenn man sie nicht aktiviert (und das tust du nicht, jedenfalls nicht in der obigen Quelle), dann gibts auch keine Interrupts
    ad 2) Indem ISRs in die VecTab eingetragen werden, werden diese NICHT automatisch aktiviert RXCIE=?, TXCIE=?, UDRIE=?
    ad 3) UCSZ1=?, UCSZ0=?
    ad 4) Mit "out PORTB, r17" überschreibst du ALLE Bits von PortB.
    Disclaimer: none. Sue me.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2005
    Beiträge
    25
    danke, ich teste noch ein wenig

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2005
    Beiträge
    25
    ich habe das ucsrc reg versucht zu setzen, allerdings kommt da ein fehler, das ein konst. wert benötigt wird.
    ich habe das zuvor nicht eingestellt.
    es wäre super, wenn du dir das nochmal ansehen könntest - danke!!
    Angehängte Dateien Angehängte Dateien

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •