uint8_t MSPI_Write(uint8_t data) { SPI_I2S_ClearITPendingBit(SPIx, SPI_I2S_IT_RXNE); sema_clear(xSemaSpi); SPI_I2S_ITConfig(SPIx,SPI_I2S_IT_RXNE,ENABLE); SPI_I2S_SendData(SPIx, data); xSemaphoreTake(xSemaSpi,portMAX_DELAY); return spi_rxdata; }
void SPI2_IRQHandler(void) { OSIntEnter(); if(SPI_I2S_GetITStatus(SPI2, SPI_IT_CRCERR) == SET) { SPI_I2S_ClearITPendingBit(SPI2, SPI_IT_CRCERR); //MotorCommErr++; } if(SPI_I2S_GetITStatus(SPI2, SPI_I2S_IT_OVR) == SET) { SPI_I2S_ClearITPendingBit(SPI2, SPI_I2S_IT_OVR); //MotorCommErr++; } if(SPI_I2S_GetITStatus(SPI2, SPI_IT_MODF) == SET) { SPI_I2S_ClearITPendingBit(SPI2, SPI_IT_MODF); //MotorCommErr++; } OSIntExit(); }
void SPI1_IRQHandler()//ПРЕРЫВАНИЕ ПО SPI(НАДО ЕЩЕ ДОБАВИТЬ ОПРОСНЫЙ СИГНАЛ И СТРОКУ ОШИБКИ.ТАК ЖЕ НУЖНА ОБРАБОТКА КАЖДОГО БАЙТА) { if(SPI_I2S_GetITStatus(SPI1, SPI_I2S_IT_RXNE)==SET) read_spi(SPI1,SPIBuffer); //ЗДЕСЬ БУДЕТ НЕВЕДОМАЯ ФИГНЯ SPI_I2S_ClearITPendingBit(SPI1, SPI_I2S_IT_RXNE); }