PIC32 EN-Starter Kit, Daten mit DMA über UART1 ausgeben

Gast #2796822
Lesenswert?
• ▲
▼
Hallo Zusammen


Ich habe leider noch immer das Problem das bei der Ausgabe von Daten mit 
DMA-Puffer CHANNEL1 über UART1, unterschiedlich je nach Board (habe drei 
Stück,)Zeichen einfach verschluckt werden. Ich verwende vorerst einmal 
das Ethernet Starter Kit und werde mir dann einen eigenen Print machen 
wenn alle Funktionen getestet sind. Ich sende immer max 16 Byte's und 
z.B. bei einem Board wird die 191 nicht gesendet, d.h. es werden auch 
alle nachfolgenden Zeichen verworfen. Nun dachte ich das die Baud von 
4MBPS zu hoch sei, war es nicht, auch mit 57600 verschluckt er die 191. 
Dann habe ich es einfach nur mit der UART1 ohne DMA versucht und hier 
werden alle 256 Zeichen die 8 Bit so hergeben gesendet. Interessant ist 
das jedes Board andere Zeichen ausläßt.
Hatte jemand schon so ein Problem?
Mit der nachfolgenden Routine (habe ich aus einem Beispiel von 
Microchip) sende ich die Zeichen.

Lg.

Johann K.


void vWriteDmaPb(unsigned char ucDataSize){
/*******************************************************************
 erstellt am : 22.06.2012

 Funktionsname: vWriteDmaPb

 Beschreibung:  Diese Function schreibt über den DMA auf die UART1 zum 
Peripheriebus.



 PARAMETER:

 letzte Änderung:
 ******************************************************************/
   DmaChannel  chn=DMA_CHANNEL1;  // DMA channel to use for our example
  ucModePb=1;    //Mode schreiben
  DmaChnOpen(chn, DMA_CHN_PRI1, DMA_OPEN_MATCH);    // reconfigure the 
channel
  // set the events: now the start event is the UART tx being empty
  // we maintain the pattern match mode
  DmaChnSetEventControl(chn, 
DMA_EV_START_IRQ_EN|DMA_EV_MATCH_EN|DMA_EV_START_IRQ(_UART1_TX_IRQ));
  // set the transfer source and dest addresses, source and dest size 
and cell size
  DmaChnSetTxfer(chn, ucDmaBuffPbOut, (void*)&U1TXREG, ucDataSize, 1, 
1);
  DmaChnSetEvEnableFlags(chn, DMA_EV_BLOCK_DONE);    // enable the 
transfer done interrupt: pattern match or all the characters transferred
  INTEnable(INT_SOURCE_DMA(chn), INT_ENABLED);    // enable the chn 
interrupt in the INT controller
  DmaChnStartTxfer(chn, DMA_WAIT_NOT, 0);  // force the DMA transfer: 
the UART1 tx flag it's already been active

} //vWriteDmaPb
Gast #2797358
Lesenswert?
• ▲
▼
Hallo Nochmals

Anders gefragt hat jemand DMA und UART erfolgreich benutzt?
Ich habe bei den Code-Beispiel von Microchip (z.B. uart_echo) das 
gleiche erfahren wie oben beschrieben, beim Senden und Empfangen.

Bitte, bitte um eure Hilfe. Danke.

Lg.
Johann K.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.