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?
https://www.roboternetz.de/wissen/in...Mit_Interrupts
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.
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?
https://www.roboternetz.de/wissen/in...Mit_Interrupts
Disclaimer: none. Sue me.
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
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.
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
-- 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.
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
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.
danke, ich teste noch ein wenig![]()
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!!
Lesezeichen