Hallo,
ich versuche mich gerade in den o.g. Xmega einzuarbeiten, und möchte ein
dataflash AT45DB041D ansteuern.
Dieses hat über die SPI Schnittstelle auch problemlos funktioniert, aber
nun möchte ich auf den USART Master SPI Mode umsteigen, und kann keine
Daten richtig empfangen. Das Statusregister läßt sich wiederholt
auslesen -> 0b1001100, auf dem Scope sieht soweit auch alles ordentlich
aus. Wenn der µC neu gestartet / initialisiert wird empfange ich beim
ersten mal genau das erwartete Datenpaket, und ab dem zweiten Mal
empfange ich nur noch Müll. Dann sind während des gesamten Protokolls
schon Daten auf der SI Leitung.
Die Initialisierung sieht wie folgt aus:
USARTD1.BAUDCTRLA = 200;
USARTD1.BAUDCTRLB = 0;
USARTD1.CTRLC = USART_CMODE_MSPI_gc | 0b00000010; //UCPHA
USARTD1.CTRLA = 0;
USARTD1.CTRLB = USART_TXEN_bm | USART_RXEN_bm;
//////////////////////
unsigned char DF_SPI_RW (unsigned char output)
{
unsigned char input;
USARTD1.DATA = output;
while (! (USARTD1.STATUS & USART_DREIF_bm));
input = USARTD1.DATA;
return input;
}
//////////////////////
unsigned char Buffer_Read_Byte (unsigned char BufferNo, unsigned int
IntPageAdr)
{
unsigned char data = 0;
unsigned char opcode;
flash_cs_off;
if (1 == BufferNo) opcode = Buf1Read; else opcode = Buf2Read;
DF_SPI_RW(opcode); //op-code
DF_SPI_RW(0x00); //don't cares
DF_SPI_RW((unsigned char)(IntPageAdr>>8));
DF_SPI_RW((unsigned char)(IntPageAdr));
DF_SPI_RW(0x00); //don't cares
data = DF_SPI_RW(0x00); //read byte
flash_cs_on;
return data; //return the read data byte
}
Ich würde mich über Hilfe sehr freuen, viele Grüße
Michael
Hallo, ich denke, ich habe den Fehler selber gefunden. Falsch: while (! (USARTD1.STATUS & USART_DREIF_bm)); Richtig: while ( !(USARTD1.STATUS & USART_RXCIF_bm)); viele Grüße Michael
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.