Forum: Mikrocontroller und Digitale Elektronik UC3C SPI UNDES trotz master


von Denis (Gast)


Lesenswert?

Hallo,

ich verzweifle langsam bei dem Versuch den SPI meines AT32UC3C0512C als 
Master zum Laufen zu bekommen.

Ich verwende die Pins PB10-PB13 in ihre Peripheral function B:
spi_port->pmr2c = (1 << (AVR32_PIN_PB10 & 0x1F));
spi_port->pmr1c = (1 << (AVR32_PIN_PB10 & 0x1F));
spi_port->pmr0s = (1 << (AVR32_PIN_PB10 & 0x1F));
spi_port->gperc = (1 << (AVR32_PIN_PB10 & 0x1F));

und initialisiere den SPI0 als Master exakt so wie es der SPI Master 
driver des ASF es vorgibt:

//Reset SPI0
AVR32_SPI0.cr = AVR32_SPI_CR_SWRST_MASK;
//Set Master-Mote of SPI0
AVR32_SPI0.MR.mstr = 1;
//Disable Modfault of SPI0
AVR32_SPI0.MR.modfdis = 1;
//Disable Loopback
AVR32_SPI0.MR.llb = 0;
//Set Chip Select of SPI0
AVR32_SPI0.MR.pcs = 0b1111;
//Disable Variable Chip Select of SPI0
AVR32_SPI0.MR.ps = 0;
//Disable Chip Select Decoding of SPI0
AVR32_SPI0.MR.pcsdec = 0;
//Set Chip Select Delay of SPI0
AVR32_SPI0.MR.dlybcs = 0;
//Set Transfer-Delay of SPI0->NPCS0
AVR32_SPI0.CSR0.dlybct = 0;
//Set SPCK-Delay of SPI0->NPCS0
AVR32_SPI0.CSR0.dlybs = 0;
//Set 8Bit-Transfer of SPI0->NPCS0
AVR32_SPI0.CSR0.bits = 0;
//Set Serial Clock Baud Rate of SPI0->NPCS0
AVR32_SPI0.CSR0.scbr = 0b110;
//Set Active After Transfer of SPI0->NPCS0
AVR32_SPI0.CSR0.csaat = 1;
//Set SPI-Mode of SPI0->NPCS0
AVR32_SPI0.CSR0.cpol = 0;
AVR32_SPI0.CSR0.ncpha = 1;
//Enable SPI0
AVR32_SPI0.cr = AVR32_SPI_CR_SPIEN_MASK;

Auch der PBC treibt das SPI0 Modul korrekt an da das Statusregister 
werte enthält.

Jedoch leider die falschen.
Direkt nach der Aktivierung enthält das Statusregister des SPI0 
folgenden wert:
0x10202 ->
1 in SPIENS (SPI Enable Status)
1 in UNDES (Underrun Error Status (Slave Mode Only))
1 in TDRE (Transmit Data Register Empty)

Ich verstehe nicht weshalb UNDES gesetzt ist obwohl der SPI0 sich 
nachweislich im Master Mode befindet.
Selbstverständlich verweigert das Modul jegliche Kommunikation.

Ich gucke nun schon seit na Stunde auf den Code und finde den Fehler 
nicht.

Hat jemand eine Vorahnung woran es liegen könnte und was ich noch prüfen 
könnte?

Gruß Denis

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
Noch kein Account? Hier anmelden.