Hallo zusammen PIC32MX795F512L Ich habe ein Problem beim Senden von Daten über UART1 DMA Cannel 1. Ich Sende ein Telegramm mit 48 Byte's in drei Blöcken zu je 16 Byte. Die Blöcke 1 und 2 werden problemlos übertragen aber beim Block 3 werden nur 14 Byte gesendet. Komischerweise hat es schon funktioniert das auch beim dritten Block alle 16 Byte übertragen wurden. Im DMA-Puffer stehen alle 16 Byte. Wenn ich beim Block drei mitschaue ist die Variable 'ucDataSize' mit 16 beschrieben. Wenn ich nur 1 reinschreibe dann wird auch nur 1 Byte übertragen. Ich bin ratlos, hat jemand eine Idee. Bitte Danke. 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, ucDmaBuffPb, (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
Hallo nochmals Ich habe das Problem inzwischen eingrenzen können. Um Werte einfach änderun zukönnen habe ich nachfolgende Art der Beschreibung des DMA-Puffers verwendet. Immer wenn der Wert 38 (0x26h)(ucDmaBuffPbOut[5]=38) zu übertragen ist werden die nachfolgenden Byte nicht mehr gesendet obwohl sie im DMA Puffer stehen. Hat jemand eine Erklärung hiefür. Bitte Danke. Lg. Johann K. ******************** ucDmaBuffPbOut[0]=0x68; ucDmaBuffPbOut[1]=42; ucDmaBuffPbOut[2]=42; ucDmaBuffPbOut[3]=0x68; ucDmaBuffPbOut[4]=23; ucDmaBuffPbOut[5]=38; ucDmaBuffPbOut[6]=0; ucDmaBuffPbOut[7]=0; ucDmaBuffPbOut[8]=1; ucDmaBuffPbOut[9]=2; ucDmaBuffPbOut[10]=3; ucDmaBuffPbOut[11]=4; ucDmaBuffPbOut[12]=5; ucDmaBuffPbOut[13]=6; ucDmaBuffPbOut[14]=7; ucDmaBuffPbOut[15]=8;
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.