unkwntech

STM8s SPI Interrupt Handler

Apr 12th, 2013
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.02 KB | None | 0 0
  1. //SPI Interrupt
  2. #pragma vector = 0x0C
  3. __interrupt void SPI_Interrupt()
  4. {
  5.   if(SPI_SR_RXNE)
  6.   {
  7.     //Recieve buffer not empty
  8.     return;
  9.   }
  10.   if(SPI_SR_TXE)
  11.   {
  12.     //Transmit Buffer Empty
  13.     return;
  14.   }
  15.   if(SPI_SR_WKUP)
  16.   {
  17.     //Wakeup from halt by SPI SCK
  18.    
  19.     //Flag must be cleared by software
  20.     SPI_SR_WKUP = 0;
  21.     return;
  22.   }
  23.   if(SPI_SR_CRCERR)
  24.   {
  25.     //CRC error
  26.    
  27.     //Flag must be cleared by software
  28.     SPI_SR_CRCERR = 0;
  29.     return;
  30.   }
  31.   if(SPI_SR_MODF)
  32.   {
  33.     //Mode Fault
  34.    
  35.     //Must be cleared by Software
  36.     //Both steps are required to clear this flag
  37.     //See reference manual section 20.3.9 (page 269)
  38.     (void)SPI_SR; //Read SPI_SR register
  39.     //SPI_CR1 = ?; //Reset SPI_CR1
  40.     //Todo: reset SPI_CR1
  41.     return;
  42.   }
  43.   if(SPI_SR_OVR)
  44.   {
  45.     //Overrun
  46.    
  47.     //Must be cleared by software
  48.     //Both reads are required to clear the flag
  49.     //See reference manual section 20.3.9 (Page 270)
  50.     (void)SPI_DR;
  51.     (void)SPI_SR;
  52.     return;
  53.   }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment