Hallo allerseits,
ich sitze hier vor einem kleinen Problem mit meinem AT91SAM7X512, dass
ich alleine 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
Ganze funktioniert, obwohl ich die entsprechenden Stellen im Datenblatt
nun schon mehrmals gelesen habe. Hat hier vielleicht jemand einen Tipp
für mich?
1 | *AT91C_PMC_PCER = (1 << AT91C_ID_SSC);
|
2 | *AT91C_SSC_CR = AT91C_SSC_SWRST;
|
3 | *AT91C_SSC_CMR = 3;
|
4 | *AT91C_SSC_TCMR = AT91C_SSC_CKO_DATA_TX;
|
5 | *AT91C_SSC_TFMR = AT91C_SSC_FSOS_LOW |
|
6 | (15) |
|
7 | (6 << 8) |
|
8 | AT91C_SSC_MSBF;
|
9 | *AT91C_PIOA_PDR = (1 << 22) | (1 << 21) | (1 << 23);
|
10 | *AT91C_SSC_CR = AT91C_SSC_TXEN;
|
1 | if (*AT91C_SSC_TNCR == 0 && *AT91C_SSC_TCR == 0)
|
2 | {
|
3 | if (*AT91C_SSC_RNCR == 0 && *AT91C_SSC_RCR == 0)
|
4 | {
|
5 | *AT91C_SSC_RPR = (unsigned int)&data;
|
6 | *AT91C_SSC_RCR = sizeof(data) / 2;
|
7 | *AT91C_SSC_RNCR = 0;
|
8 | *AT91C_SSC_PTCR = AT91C_PDC_RXTEN;
|
9 | }
|
10 | }
|
1 | typedef struct _data {
|
2 | unsigned short value1;
|
3 | unsigned short value2;
|
4 | short value3;
|
5 | short value4;
|
6 | short value5;
|
7 | short value6;
|
8 | unsigned short value7;
|
9 | } data, *pData;
|