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.