Hallo, in der Quartus Version 9.0 war es noch möglich das ein Interrupt einen anderen Interrupt mit einer niedrigeren Prioriotät unterbricht(alt_irq_interruptible, alt_irq_non_interruptible). Bei Versio 12.0 ist dies nicht mehr möglich. Warum nicht und wie kann ich das jetzt bewerkstelligen? Habt ihr da eine Idee. Gruß Andreas
Andreas M. schrieb: > Habt ihr da eine Idee. Mach die Interruptroutine so kurz, dass die nicht unterbrochen werden muss... Was konkret macht dir Probleme? Warum brauchst du unterbrochene Unterbrechungen?
Derzeit bekomme ich sie nicht kürzer. Das Problem ist, dass während des Interrupts Zeichen über die RS232 kommen. Die können dann nicht verarbeitet werden und dadurch verloren gehen. Ich habe schon daran gedacht die RS232 auf DMA um zu stellen. Was hältst du davon?
Andreas Müller schrieb: > Das Problem ist, dass während des Interrupts Zeichen über die RS232 > kommen. Welche Baudrate? > auf DMA um zu stellen. Was hältst du davon? DMA wurde genau für solche Sachen gemacht: Datentransfer ohne CPU-Belastung. Und das ist es, was du hier willst...
:
Bearbeitet durch Moderator
Andreas Müller schrieb: > Ich habe schon daran gedacht die RS232 auf DMA um zu stellen. Probier's doch erstmal mit einem FIFO, 16 Werte sollten für's erst reichen. Der Interrupt kann ja schon beim ersten Zeichen ausgelöst werden.
Für die Uart im C-code gibt es schon ein Fifo. Der wird aber nur bei einem Interrupt gefüllt. Und dies ist dann das Problem. Oder meinst du einen Fifo im VHDL?
Andreas Müller schrieb: > Oder meinst du > einen Fifo im VHDL? Ja, denn ein SW-FIFO müsste per IRQ-Routine gefüllt werden, und das ist ja gerade Dein Problem. Ich kenne jetzt nicht Deine QSYS-IP zur UART-Behandlung, schau mal in den zugeh. Docs nach, evtl. lässt sich da eine FIFO aktivieren bzw. die Anz. Elemente einstellen. Btw.: Q9.0 hat SOPC, Q11? und höher Qsys, d.h. Du hast andere IRQ-Komponenten. Liess Dir mal die Docs zu IIC und VIC durch, evtl. findest Du da eine bessere Lösung.
Derzeit benutze ich noch den sopc builder in v12.0. Dort gibt es ja einen on-chip fifo memory? Könnte ich den dafür nehmen und wenn ja wie mache ich das dann? Danke.
Habe mal kurz in die Docs geschaut: Leider besitzt der Std.UART keinen internen FIFO, was die Sache wesentlich komplizierter macht. Leider ist es mit OnChip-FIFO nicht ganz so einfach. Du bräuchtest neben UART und FIFO auch noch eine Komponente, die RX-Daten aus dem UART ins FIFO schreibt, dazu noch die UART-Register wrappt/kappselt. Ob's da eine fertige Komponente gibt weiss ich jetzt nicht. Bevor Du Dich da reinsteigest, versuch nochmal den Weg über den VectorIrqController. Der reagiert auf Irqs wesentlich schneller. Und bei 115200 Baud hast Du 10KBytes Daten, d.h max. 10.000 IRQs. Bei 100MHz-Nios sollte das machbar sein.
Hallo Leute, nach etwas suchen habe ich dann ein UART mit FIFO gefunden. Hier findet man den und er funktioniert und man kann eine Menge einstellen. http://www.alterawiki.com/wiki/FIFOed_Avalon_Uart Ein Problem habe ich nur noch. Beim einschalten des Gerätes sendet der UART das Zeichen "~" einfach raus. Warum? Habt ihr da eine Idee?
Andreas M. schrieb: > Beim einschalten des Gerätes sendet der > UART das Zeichen "~" einfach raus. Warum? Habt ihr da eine Idee? Mal mit dem Oszi geschaut, was da auf der Leitung los ist? Eine Tilde ist im ASCII-Code 0x7E und das sieht binär so aus: 0b01111110 Im Anhang ist ein Bildchen, wie das dann mit Start- und Stoppbit auf der Leitung aussieht. Da beim Einschalten die FPGA-Konfiguration erst geladen wird, kann es - unbeabsichtigt - zu einem solchen Signal kommen. Abhilfe schafft hier evtl. ein externer Pull-Up oder eine veränderte Pin-Konfiguration. Duke
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.