Forum: Mikrocontroller und Digitale Elektronik PIC32 UART Interrupt oder Polling?


von Simon (Gast)


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?

von Master S. (snowman)


Lesenswert?

per DMA!
ein beispiel findest du in deinem installations-pfad wie "C:\Program 
Files (x86)\Microchip\xc32\v1.22\examples\plib_examples\dma\uart_echo" 
oder so ähnlich

von Simon (Gast)


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.

von Master S. (snowman)


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.

von Simon (Gast)


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?

von Simon (Gast)


Lesenswert?

Ich denke da an sowas wie modbus mit einer maximalen nachrichten größe 
von ~100bytes. also er soll das Zeug wirklich nur vom urat abholen, 
speichern, und danach verarbeiten

von Master S. (snowman)


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.

von Master S. (snowman)


Lesenswert?

wenn du 250kbps verarbeiten willst, mach es per interrupt, der 
ausgelösst wird, wenn dein buffer voll ist. dann leerst du im unterrupt 
den buffer und trödelst etwas im hauptprogramm weiter.

von Erwin (Gast)


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...

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
Noch kein Account? Hier anmelden.