void SPI1_IRQHandler(void) { uint32_t uiSpRegisterValue; uint16_t uiBuffer; uint8_t uiTemp; // ON // GPIOD->BSRRL = LED3_PIN; uiSpRegisterValue = SPI1->SR; // receive data if((uiSpRegisterValue & SPI_SR_RXNE) != 0) { // byte received uiBuffer = SPI1->DR; if(bRecCount_g == 0) { // shift data because MSB first uiRecData_g |= ((uiBuffer & 0x00FF) << 8); } else { uiRecData_g |= (uiBuffer & 0x00FF); // set CS signal to 1 GPIO_SetBits(GPIOA, GPIO_Pin_15); SPI_Cmd(SPI1, DISABLE); } bRecCount_g++; } // send data if((uiSpRegisterValue & SPI_SR_TXE) != 0) { if(bRecCount_g == 0) { SPI1->DR = bSendData_g; } } // check Errorinterrupt if((uiSpRegisterValue & 0x78) != 0) { // byte data uiBuffer = SPI1->DR; // read status register to clear interrupt uiSpRegisterValue = (uint8_t)SPI1->SR; // TODO: handle error???? } SPI_I2S_ClearITPendingBit(SPI1, 0xFF); // OFF // GPIOD->BSRRH = LED3_PIN; }