Advertisement
Guest User

stm8 dma interrupt

a guest
Oct 23rd, 2012
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.79 KB | None | 0 0
  1. INTERRUPT_HANDLER(DMA1_CHANNEL2_3_IRQHandler,3)
  2. {
  3.     static uint8_t i=0;
  4.   extern uint8_t dac_buf[4][dac_buf_size/4];
  5.   extern uint8_t half_buf;
  6.  
  7.     GPIOA->ODR|=(uint8_t)(GPIO_Pin_4);
  8.  
  9.     //remaining half of last buf part, 64 bytes
  10.     if ((DMA1_Channel3->CSPR & DMA_CSPR_HTIF)&&(i==3))
  11.     half_buf=1;
  12.  
  13.     if (DMA1_Channel3->CSPR & DMA_CSPR_TCIF) {//if bufpart ended
  14.         DMA1_Channel3->CCR &= (uint8_t)(~DMA_CCR_CE);//dma disable
  15.       DMA1_Channel3->CM0ARH = (uint8_t)((uint16_t)&(dac_buf[i]) >> (uint8_t)8);
  16.         DMA1_Channel3->CM0ARL = (uint8_t)((uint16_t)&(dac_buf[i]));
  17.         DMA1_Channel3->CNBTR=dac_buf_size/4;
  18.         DMA1_Channel3->CCR |= (uint8_t)(DMA_CCR_CE);//dma enable
  19.         i++;
  20.         i&=0x03;
  21.     }
  22.  
  23.   DMA1_Channel3->CSPR&=(uint8_t)(~(DMA_CSPR_TCIF|DMA_CSPR_HTIF));
  24.  
  25.     GPIOA->ODR&=(uint8_t)(~GPIO_Pin_4);
  26. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement