LotadaC hat ja bereits alles beantwortet, Danke
Jan,
ach ich sehe du nutzt SS auf Pin4 vom PORTF.
FlashSPI.SS = 4
In Spi_Master_USARTD0_Init wird der Pin von PORTF als Ausgang geschaltet.
Später schaltest du den Pin mit Position SS_bp, das ist eine Definition von den SPI Modulen.
SS_bp ist auch 4, soweit ich weiss. Muss es auch, sonst klappt dein Code nicht. Das ist also so in Ordnung, ist allerdings auch eine mögliche Fehlerquelle.
CodeBox C
// ...
FlashSPI.SS = 4;
Spi_Master_USARTD0_Init(&FlashSPI,1000,3,0);
// ...
void Spi_Master_USARTD0_Init(spi_t *SPI, uint16_t baud, uint8_t mode, uint8_t dataOrder)
{
// ...
PORTF.DIR |= 1<<SPI->SS;
// ...
}
void Spi_USARTD0_Slave_Select_Low(void)
{
PORTF.OUTCLR = (1<<SS_bp);
}
void Spi_USARTD0_Slave_Select_High(void)
{
PORTF.OUTSET = (1<<SS_bp);
}
In meinem obigen Code Beispiel verwende ich SPI Mode 0
USARTE0.CTRLC = USART_CMODE_MSPI_gc; // MasterSPI, UDORD=0, UCPHA=0
Teste mal mit Mode 0.
Falls es immer noch nicht funktioniert, könnte ich meinen Code für dein Board anpassen, falls du Schwierigkeiten damit hast.
Dirk