Forum: Mikrocontroller und Digitale Elektronik PIC32 EN-Starter Kit, Daten mit DMA über UART1 ausgeben


von Klatec (Gast)


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

von Klatec (Gast)


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.

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.