[综合信息] N32G4FR芯片DAC的DMA开不起来,请帮忙看看

[复制链接]
 楼主| dopod577w 发表于 2023-7-12 11:25 | 显示全部楼层 |阅读模式
芯片是N32G4FRKEQ7,改了4x4的封装,重新做好了板子,开始调试了。


DAC直接用DAC_SetCh1Data是可以输出不同的数据的,但是改用DMA,始终无法输出波形,相关代码如下,请帮忙看看
  1. //DAC DMA IRQ
  2. void DMA2_Channel3_IRQHandler(void)
  3. {
  4.         //DAC DMA full transfer IRQ
  5. //这个中断始终进不来       
  6. ....
  7. }

  8. // --------------------------------------------------------------------------------
  9. void dac_gpio_config(void)
  10. {
  11.         GPIO_InitType gpio_init_struct;

  12.         // PA4 = DAC1
  13.         gpio_init_struct.GPIO_Mode  = GPIO_Mode_AIN;
  14.         gpio_init_struct.Pin        = GPIO_PIN_4;
  15.         GPIO_InitPeripheral(GPIOA, &gpio_init_struct);
  16. }

  17. static void nvic_config(IRQn_Type irq)
  18. {
  19.     NVIC_InitType NVIC_InitStructure;

  20.     /* Enable the Interrupt */
  21.     NVIC_InitStructure.NVIC_IRQChannel                   = irq;
  22.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  23.     NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;
  24.     NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
  25.     NVIC_Init(&NVIC_InitStructure);
  26. }

  27. void dac_dma_config(void)
  28. {
  29.     DMA_InitType DMA_InitStructure;

  30.     DMA_DeInit(DMA2_CH3);
  31.     DMA_InitStructure.PeriphAddr     = (uint32_t)DAC->DR12CH1;
  32.     DMA_InitStructure.MemAddr        = (uint32_t)dac_Wave;
  33.     DMA_InitStructure.Direction      = DMA_DIR_PERIPH_DST;
  34.     DMA_InitStructure.BufSize        = TUNE_LEN_DAC;
  35.     DMA_InitStructure.PeriphInc      = DMA_PERIPH_INC_DISABLE;
  36.     DMA_InitStructure.DMA_MemoryInc  = DMA_MEM_INC_ENABLE;
  37.     DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_SIZE_HALFWORD;
  38.     DMA_InitStructure.MemDataSize    = DMA_MemoryDataSize_HalfWord;
  39.     DMA_InitStructure.CircularMode   = DMA_MODE_CIRCULAR;
  40.     DMA_InitStructure.Priority       = DMA_PRIORITY_HIGH;
  41.     DMA_InitStructure.Mem2Mem        = DMA_M2M_DISABLE;
  42.     DMA_Init(DMA2_CH3, &DMA_InitStructure);

  43.     DMA_EnableChannel(DMA2_CH3, ENABLE);

  44.         DMA_ConfigInt(DMA2_CH3, DMA_INT_TXC | DMA_INT_HTX, ENABLE);

  45.         /* dma1 channel1 interrupt nvic init */
  46.         nvic_config(DMA2_Channel3_IRQn);
  47. }

  48. void TIM2_TrgoInit(void)
  49. {
  50.     TIM_TimeBaseInitType TIM_TimeBaseStructure;

  51.     /* TIM2 Configuration */
  52.     /* Time base configuration */
  53.     TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
  54.     TIM_TimeBaseStructure.Period    = 108-1;//108MHz/108=1MHz
  55.     TIM_TimeBaseStructure.Prescaler = 0x0;
  56.     TIM_TimeBaseStructure.ClkDiv    = 0x0;
  57.     TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;
  58.     TIM_InitTimeBase(TIM2, &TIM_TimeBaseStructure);

  59.     /* TIM2 TRGO selection */
  60.     TIM_SelectOutputTrig(TIM2, TIM_TRGO_SRC_UPDATE);
  61. }

  62. void dac_config(void)
  63. {
  64.         DAC_InitType dac_init_struct;

  65.         TIM2_TrgoInit();
  66.        
  67.         /* dac1 configuration */
  68.         DAC_ClearStruct(&dac_init_struct);
  69.     dac_init_struct.Trigger      = DAC_TRG_T2_TRGO;
  70.     dac_init_struct.WaveGen      = DAC_WAVEGEN_NONE;
  71.     dac_init_struct.BufferOutput = DAC_BUFFOUTPUT_DISABLE;
  72.     DAC_Init(DAC_CHANNEL_1, &dac_init_struct);

  73.         dac_dma_config();

  74.         DAC_Enable(DAC_CHANNEL_1, ENABLE);
  75. }

  76. void dac_setup(void)
  77. {
  78.         dac_gpio_config();
  79.         dac_config();
  80. }

  81. void dac_start(void)
  82. {
  83.         DAC_DmaEnable(DAC_CHANNEL_1, ENABLE); // DAC

  84.         /* enable tmr2 */
  85.         TIM_Enable(TIM2, ENABLE);
  86. }


 楼主| dopod577w 发表于 2023-7-12 14:07 | 显示全部楼层
好了,少了一个&:
DMA_InitStructure.PeriphAddr     = (uint32_t)DAC->DR12CH1;
DMA_InitStructure.PeriphAddr     = (uint32_t)&DAC->DR12CH1;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

26

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部