Hallo zusammen,
ich grübel seit einigen Tagen an folgendem Problem:
Irgendwie funktioniert der USART-Datenversand mittels DMA nicht.
Habe folgenden Code verwendet:
1 | u_pUSART0->US_TPR = (AT91_REG)buff; // address of DMA output buffer
|
2 | u_pUSART0->US_TCR = length; //we'll transmit length bytes via DMA
|
3 |
|
4 | // enable transmit DMA transfers, disable receive DMA transfers
|
5 | u_pUSART0->US_PTCR = AT91C_PDC_TXTEN;
|
6 |
|
7 | // just wait for end of transmission
|
8 | while(! (u_pUSART0->US_CSR & AT91C_US_ENDTX));
|
Es gehen aber keine Daten raus und dementsprechend bleibt er auch in der
While-Schleife hängen.
Woran kann das liegen? Also buff und length sind an der Stelle definitiv
richtig belegt. Die USART Clock habe ich auch vorher aktiviert:
1 | //enable the clock of USART
|
2 | u_pPMC->PMC_PCER = 1<<AT91C_ID_US0;
|
3 |
|
4 | //Reset receiver and transmitter
|
5 | u_pUSART0->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS;
|
6 |
|
7 | //set baud rate divisor register
|
8 | u_pUSART0->US_BRGR = 3003428/baudrate; // 3003428 = 48Mhz / 16
|
Irgendwelche Ideen? Danke!
Gruß
Florian