Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.21 KB | None | 0 0
  1. /* Буферы приема/передачи данных АЦП */
  2. uint32_t ADC_TX_BUF;
  3. uint32_t ADC_RX_BUF;
  4.  
  5. /* Флаги завершения операций */
  6. bool tx_cmpl = false;
  7. bool rx_cmpl = false;
  8.  
  9. /* Количество тактов в циклах записи/чтения данных в/из АЦП */
  10. #define WR_TICKS_COUNT      24
  11. #define RD_TICKS_COUNT      24
  12.  
  13. /* Счетчик тактов */
  14. uint8_t ticks = 0;
  15. void Timer3_IRQHandler(void) {
  16.     ticks++;
  17.     /* ЗАПИСЬ */
  18.     if(TIMER_GetITStatus(MDR_TIMER3, TIMER_STATUS_CNT_ARR) == SET) { /* NEGEDGE REF */
  19.         TIMER_ClearFlag(MDR_TIMER3, TIMER_STATUS_CNT_ARR);         
  20.        
  21.             /* SDATA - PB10  */
  22.             PORT_Write(MDR_PORTB, ((ADC_TX_BUF >> 21) & SDATA) | (MDR_PORTB->RXTX & ~SDATA));
  23.             ADC_TX_BUF = ADC_TX_BUF << 1;
  24.        
  25.         if(ticks == WR_TICKS_COUNT) {
  26.             ticks = 0;
  27.             tx_cmpl = true;
  28.         }
  29.     }
  30.     /* ЧТЕНИЕ */ 
  31.     else if(TIMER_GetITStatus(MDR_TIMER3, TIMER_STATUS_CCR_REF_CH3) == SET) { /* POSEDGE REF */
  32.         TIMER_ClearFlag(MDR_TIMER3, TIMER_STATUS_CCR_REF_CH3);
  33.          
  34.         ADC_RX_BUF |= (uint32_t)PORT_ReadInputDataBit(MDR_PORTB, SDATA);
  35.         ADC_RX_BUF = ADC_RX_BUF << 1;
  36.        
  37.         if(ticks == RD_TICKS_COUNT) {
  38.             ticks = 0;
  39.             rx_cmpl = true;
  40.         }
  41.     }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement