PIC32 UART Interrupt oder Polling?

Gast #3513768
Lesenswert?

PIC32 UART Datenblatt:
Baud rates ranging from 76 bps to 20 Mbps at 80 MHz

Die sagen das hier satte 20 Mbps möglich sind, nun frage ich mich wie 
man
das hin bekommt das sowohl der TCPStack + Mein kram + Interrupts von IO 
ports zusammen sauber funzen.

Nimmt man hier einfach polling und nutzt den internen 8 Level Fifo und 
fertig?

oder fährt man besser wenn mans Interrupt gesteuert macht, nur das 
bedeutet dann z.B. bei jedem einzelnen Zeichen ein Interrupt auf zu 
rufen.

Und das soll bis 20 Mbps gut gehen?

Ich kann es auch so machen wie zu meinen Atmel zeiten und man baut sich 
in software einen größeren fifo und beschreibt den per Interrupt.

Doch das bedeutet wieder die Probleme mit volatile und fifos die von 
interrupts geaendert werden. (nein ich möchte kein interrupt an /aus 
schalten)

Ich habe nur Übertragungsraten <250 kbps.

Hat da jemand nen Tip?
Gast #3514659
Lesenswert?

Ich hab mir das mal angesehen aber noch ein paar Fragen zu.

Wenn ich per DMA (interrupt von UARTRX) mir byteweise wie in dem 
Beispiel gezeigt einen speicher bereich fülle, ist er irgendwan einmal 
voll (voll,pattern match,abort)

Jetzt würde ich beginnen die Daten zu nutzen und danach? ich setze den
dst pointer vom DMA wieder auf die start addr?

Was geschiet wenn wärend der Verarbeitung der Daten ein weiteres Zeichen 
per UART rein kommt? dann würde der DMA controller wieder anfangen auf 
meine variable zu schreiben die ich doch gerade verarbeite.


Ich kann doch nun nicht irgend nen quatsch machen wie den DMA controller 
abschalten und mir dann die daten in ne weitere variable kopieren.
#3514740
Lesenswert?

- du hast nicht gesagt, dass du dauernd ohne unterbruch so viel daten 
20Mbps verarbeiten willst.
- du schreibst nicht welcher PIC32 du nimmst. wenn du einen mit 200MHz 
nimmst, hast du reichlich zeit dazwischen
- du kannst nach erreichen des speicherendes (kommt halt darauf an, wie 
du deinen speicher einteilst) den DMA-pointer natürlich auf einen 
anderen speicher setzen; einen speicherbereich, den du zZ nicht 
bearbeitest.

grundsätzlich macht es null sinn, mehr daten in den PIC einzulesen, als 
er verarbeiten kann ;-) ...der DMA gibt dir einfach resourcen frei, die 
du für die abarbeitung nutzen kannst, anstatt für die datenbeschaffung 
verbrauchst.
Gast #3514849
Lesenswert?

Ich bin mir auch nicht sicher ob DMA nicht schon bisle zu oversized ist, 
wir reden von nem PIC32MX695 bei 80MHz und empfangen werden soll RS485 
stuff mit <250kbps

Läuft man da nicht gefahr das der DMA und das Haupt programm auf den 
selben Speicher zugreift?
#3515190
Lesenswert?

haha, du bist ja echt ein witzbold: zuerst fragen nach 20Mbps und jetzt 
<250kbps, ~100bytes !!!
das ist, wie wenn du fragst, wie weit du das gaspedal eines Ferraris 
runter drücken musst für 200km/h und nachher willst du aber nur zum 
dorfladen etwas einkaufen gehen ^^ ...rechne damit, wenn du nach 200km/h 
fragst, dass dir eine autobahn vorgeschlagen wird und nicht eine 
30er-zone.
Gast #3515331
Lesenswert?

Hier ist der Tipp:

Schau lieber danach, ob das, was du erreichen willst,
mit den Spezifikationen im Datenblatt machbar ist.

Wenn ein Port-Pin 50 mA liefern kann, bist du doch
(hoffentlich) nicht so blöd, 10 Port-Pins für 0,5 A zu
nutzen...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren