saken är att jag kör två separata kort med en STM32 på varje, ena agerar master och den andra slav.
Från början körde jag ren överföring utan någon inblandning av ChipSelect. detta funka utmärkt.
Men så fort det är något som stör, "tex när jag slår på min fina Weller lödstation" så blir det en ordentlig störning på MOSI och SCK signalen
"20cm kabel som SPI signalen går mellan korten med".
Och efter störningen inträffat så tolkar slaven allt efter störningen som skräp, den hittar alltså inte tillbaka till synkningen
så då vart det ett måste med ChipSelect hantering, och lite felhantering.
Som kanske några vet så har STM32 en fulvariant av CS funktionalitet på Master sidan, den funkar helt enkelt inte riktigt som den borde.
den är låg hela tiden ist för att gå låg när data skickas.
Slaven använder den inbyggda NSS "ChipSelect" funktionen, vilket funkar fint.
Men på Master sidan så måste jag manuellt höja och sänka CS pinnen.
Nu till det som blev en udda lösning.
i huvud loopen
Kod: Markera allt
/* Disable SPI ChipSelect high=disable*/
SPI_EN_HI();
/* Enable SPI_MASTER TXE interrupt */
SPI_I2S_ITConfig(SPI_MASTER, SPI_I2S_IT_TXE, ENABLE);
/* Send SPI Data */
SPI_I2S_SendData(SPI_MASTER, SPIDATA);
Kod: Markera allt
void SPI2_IRQHandler(void)
{
if (SPI_I2S_GetITStatus(SPI_MASTER, SPI_I2S_IT_TXE) != RESET)
{
/* Enable SPI_ChipSelect Low = Enable*/
SPI_EN_LO();
/* Disable SPI_MASTER TXE interrupt */
SPI_I2S_ITConfig(SPI_MASTER, SPI_I2S_IT_TXE, DISABLE);
}
}
Kort förklarat så Deaktiverar jag CS precis innan jag akteverar SPI TXE interrupten och sedan matar in data i SPI bufferten.
då SPI hanterar datan så triggas Interrupten och där så aktiverar jag CS
och därefter deaktiverar jag SPI Interrupten så att den inte triggas fören nästa gång jag måste sända.
detta är resultatet, gula SCK och blå är CS
Det konstiga "vilket jag tycker " är att SPI TXE Interrupten triggas innan SCK börjar mata ut data.

har nu länge försökt att hitta en lösning på hur man variferar när all data är skickad så man bara håller CS låg under själva data överföringen.
Någon som har någon koll ??