Gast
#2796822
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