dma.c 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "bsp/dma.h"
  2. u16 pwm_timer_dma_buf[2];
  3. u16 adc_timer_dma_buf[3];
  4. static void pwm_timer_dma_init(void);
  5. static void adc_timer_dma_init(void);
  6. void dma0_init(void){
  7. pwm_timer_dma_buf[0] = FOC_PWM_Half_Period;
  8. pwm_timer_dma_buf[1] = FOC_PWM_Half_Period;
  9. adc_timer_dma_buf[0] = FOC_PWM_Half_Period;
  10. adc_timer_dma_buf[1] = FOC_PWM_period - 1;
  11. adc_timer_dma_buf[0] = FOC_PWM_Half_Period;
  12. pwm_timer_dma_init();
  13. adc_timer_dma_init();
  14. }
  15. static void pwm_timer_dma_init(void){
  16. dma_parameter_struct dma_init_struct;
  17. /* enable DMA clock */
  18. rcu_periph_clock_enable(PWM_TIMER_CC3_DMA_CLK);
  19. /* initialize DMA channel */
  20. dma_deinit(PWM_TIMER_CC3_DMA_DEV,PWM_TIMER_CC3_DMA_CHAN);
  21. /* DMA channel5 initialize */
  22. dma_init_struct.periph_addr = (uint32_t)TIMER_CH0CV(pwm_timer);//changed by foc later
  23. dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
  24. dma_init_struct.memory_addr = (uint32_t)pwm_timer_dma_buf;
  25. dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
  26. dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
  27. dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT;
  28. dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;
  29. dma_init_struct.number = 2;
  30. dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
  31. dma_init(PWM_TIMER_CC3_DMA_DEV,PWM_TIMER_CC3_DMA_CHAN,&dma_init_struct);
  32. dma_circulation_enable(PWM_TIMER_CC3_DMA_DEV,PWM_TIMER_CC3_DMA_CHAN);
  33. /* enable DMA channel */
  34. dma_channel_enable(PWM_TIMER_CC3_DMA_DEV,PWM_TIMER_CC3_DMA_CHAN);
  35. }
  36. static void adc_timer_dma_init(void){
  37. dma_parameter_struct dma_init_struct;
  38. /* enable DMA clock */
  39. rcu_periph_clock_enable(ADC_TIMER_CC0_DMA_CLK);
  40. /* initialize DMA channel */
  41. dma_deinit(ADC_TIMER_CC0_DMA_DEV,ADC_TIMER_CC0_DMA_CHAN);
  42. /* DMA channel5 initialize */
  43. dma_init_struct.periph_addr = (uint32_t)TIMER_CH0CV(adc_timer);
  44. dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
  45. dma_init_struct.memory_addr = (uint32_t)adc_timer_dma_buf;
  46. dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
  47. dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
  48. dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT;
  49. dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;
  50. dma_init_struct.number = 3;
  51. dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
  52. dma_init(ADC_TIMER_CC0_DMA_DEV,ADC_TIMER_CC0_DMA_CHAN,&dma_init_struct);
  53. dma_circulation_enable(ADC_TIMER_CC0_DMA_DEV,ADC_TIMER_CC0_DMA_CHAN);
  54. /* enable DMA channel */
  55. dma_channel_enable(ADC_TIMER_CC0_DMA_DEV,ADC_TIMER_CC0_DMA_CHAN);
  56. }