Gast
#441215
Hallo zusammen!
Ich möchte mittels UART DMA zwischen PC und EZ-Kit Daten austauschen.
Im Folgenden die Initialisierung der DMA-Register (siehe Code). tx_buf
enthält die zu sendenden Daten, in rx_buf sollen die empfangenen Werte
abgelegt werden:
unsigned char tx_buf[BUFLEN];
unsigned char rx_buf[BUFLEN];
void init_dma_tx (void)
{
*pDMA7_CONFIG = 0x1080;
*pDMA7_PERIPHERAL_MAP = 0x7000;
*pDMA7_X_COUNT = BUFLEN;
*pDMA7_X_MODIFY = 0x01;
*pDMA7_START_ADDR = (void*)&tx_buf;
asm("ssync;");
}
void init_dma_rx (void)
{
*pDMA6_CONFIG = 0x1082;
*pDMA6_PERIPHERAL_MAP = 0x6000;
*pDMA6_X_COUNT = BUFLEN;
*pDMA6_X_MODIFY = 0x01;
*pDMA6_START_ADDR = (void*)&rx_buf;
asm("ssync;");
}
Die entsprechenden UART-Einstellungen (Datenformat, TX und RX-Interrupt)
hab ich vorgenommen.
Was funktioniert, ist die Empfangsroutine. D.h. ich sende einen Wert,
und dieser wird auf rx_buf[0] abgelegt, DMA6_CURR_ADDR wird entsprechend
erhöht, so dass der nächste Wert an rx_buf[1] kommt.
Nun zum Problem:
Obwohl ich keine Daten lese, inkrementiert sich der Counter
DMA7_CURR_ADDR selbstständig, d.h. er zeigt ständig auf einen anderen
Wert in tx_buf.
Das Lesen an sich funktioniert, ich kann Werte aus tx_buf lesen, Problem
ist nur, dass duch die "verselbstständigung" des Counters jeglicher
Bezug verloren geht: Erstes lesen bringt tx_buf[3], das nächste lesen
einen wahllosen anderen Wert.
Mein Ziel ist es aber, die Werte schrittweise in geordneter Reihenfolge
vom Index 0 an auszulesen.
Jemand eine Idee, wo mein Fehler liegt?!