G
Gelöschtes Mitglied 16444
Guest
Moin HABO,
ich bin, was Mikrocontroller angeht, ziemlich ins kalte Wasser geworfen worden und bekomme deshalb immer wieder Probleme, sobald es etwas komplexer wird
So auch dieses mal.
Ich sitze hier vor einem Problem mit meinem AT91SAM7X512, dass
ich nicht gelöst bekomme. Ich möchte über SPI pro Frame 7 mal 2
Bytes übertragen. Das ganze mit SCC/PDC. Grundsätzlich funktioniert das auch, allerdings sind die einzelnen Datenblöcke um je 2 Bytes verschoben. Das heißt wenn ich mir anschaue, was empfangen wurde, dann habe ich WERT7, WERT1, WERT2 WERT3, WERT4, WERT5, WERT6 statt WERT1, WERT2, WERT3, WERT4, WERT5, WERT6, WERT7. Ich denke ich habe da an einer Stelle noch nicht ganz durchschaut, wie das funktioniert, obwohl ich die entsprechenden Stellen im Datenblatt nun schon mehrmals gelesen habe. Hat hier vielleicht jemand einen Tipp für mich?
ich bin, was Mikrocontroller angeht, ziemlich ins kalte Wasser geworfen worden und bekomme deshalb immer wieder Probleme, sobald es etwas komplexer wird

Ich sitze hier vor einem Problem mit meinem AT91SAM7X512, dass
ich nicht gelöst bekomme. Ich möchte über SPI pro Frame 7 mal 2
Bytes übertragen. Das ganze mit SCC/PDC. Grundsätzlich funktioniert das auch, allerdings sind die einzelnen Datenblöcke um je 2 Bytes verschoben. Das heißt wenn ich mir anschaue, was empfangen wurde, dann habe ich WERT7, WERT1, WERT2 WERT3, WERT4, WERT5, WERT6 statt WERT1, WERT2, WERT3, WERT4, WERT5, WERT6, WERT7. Ich denke ich habe da an einer Stelle noch nicht ganz durchschaut, wie das funktioniert, obwohl ich die entsprechenden Stellen im Datenblatt nun schon mehrmals gelesen habe. Hat hier vielleicht jemand einen Tipp für mich?
Code:
// Enable clock for SSC controller
*AT91C_PMC_PCER = (1 << AT91C_ID_SSC);
// SPI software reset
*AT91C_SSC_CR = AT91C_SSC_SWRST;
// Clock divider
*AT91C_SSC_CMR = 3;
// Configure receive clock
// TK Clock signal
// START: Detection of a low level on RF input
// Receive/Transmit Clock Inversion
// The data inputs (Data and Frame Sync signals) are sampled on
// Receive Clock rising edge. The Frame Sync signal output
// is shifted out on Receive Clock falling edge.
*AT91C_SSC_RCMR = AT91C_SSC_CKS_TK | AT91C_SSC_START_LOW_RF | AT91C_SSC_CKI;
// Configure receive frame
*AT91C_SSC_RFMR = (6 << 8) | // DATNB = 6 => 7 data words per frame
(15) | // DATLEN = 15 => half-words are transfered (16 bit)
AT91C_SSC_MSBF; // MSB first
// Enables Receive
*AT91C_SSC_CR = AT91C_SSC_RXEN;
Code:
if (*AT91C_SSC_RNCR == 0 && *AT91C_SSC_RCR == 0)
{
*AT91C_SSC_RPR = (unsigned int)&data;
*AT91C_SSC_RCR = sizeof(data) / 2;
*AT91C_SSC_RNCR = 0;
*AT91C_SSC_PTCR = AT91C_PDC_RXTEN;
}
Code:
typedef struct _data {
unsigned short value1;
unsigned short value2;
short value3;
short value4;
short value5;
short value6;
unsigned short value7;
} data, *pData;