返回列表 发新帖 本帖赏金 5.00元(功能说明)
查看: 222|回复: 10
收起左侧

求助GD32F150C8T6通过DMA方式配置DAC没反应

[复制链接]
     

1

主题

5

帖子

15

积分

实习生

 楼主| 发表于 2017-11-11 18:44 | 显示全部楼层 |返回版面|阅读模式
因为是刚接触32位的GD芯片,折腾了几天,GD的DAC通过DMA方式还没有工作,求助各位高手,帮忙看看是哪里配置的问题,或者帮忙提供一个带DMA传输数据到DAC输出的例子也行,多谢了
void  Audio_play(void)       
{
    /* Configure System Clocks */
    RCC_Configuration();
         /* NVIC configuration */
    NVIC_Configuration();
    /*Configure GPIO ports */
    GPIO_Configuration();
    /* Configure DAC */
          TIMER_Configuration();
          /*TIME Configuration*/
    DAC_Configuration();
          DACDMAConfig();
    /* Start DAC1 conversion by software */
    //DAC_SoftwareTrigger_Enable(DAC1,ENABLE);
          Delay_1ms(3000);         
}
void RCC_Configuration(void)
{   
    /* GPIOA Periph clock enable */
    RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOA, ENABLE);
    /* DAC Periph clock enable */
    RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_DAC, ENABLE);
}
void NVIC_Configuration(void)
{
    NVIC_InitPara NVIC_InitStructure;

    /* Enable DMA1 IRQ Channel */
    NVIC_InitStructure.NVIC_IRQ = DMA1_Channel1_IRQn;
    NVIC_InitStructure.NVIC_IRQPreemptPriority = 0;
    NVIC_InitStructure.NVIC_IRQSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
    NVIC_Init(&NVIC_InitStructure);  
    NVIC_InitStructure.NVIC_IRQ = DMA1_Channel2_3_IRQn;
    NVIC_Init(&NVIC_InitStructure);  
    NVIC_InitStructure.NVIC_IRQ = DMA1_Channel4_5_IRQn;
    NVIC_Init(&NVIC_InitStructure);  
    NVIC_InitStructure.NVIC_IRQ = DMA1_Channel6_7_IRQn;
    NVIC_Init(&NVIC_InitStructure);  
}
void GPIO_Configuration(void)
{
    GPIO_InitPara GPIO_InitStructure;       
            /* GPIOA Periph clock enable */
    RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin =  GPIO_PIN_4;
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void TIMER_Configuration(void)
{
    TIMER_BaseInitPara TIMER_TimeBaseStructure;
    //TIMER_OCInitPara  TIMER_OCInitStructure;  //not used now,qilei
    /* TIMERS clock enable */
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_TIMER1|RCC_APB2PERIPH_TIMER15|RCC_APB2PERIPH_TIMER16|RCC_APB2PERIPH_TIMER17,ENABLE);
    RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2|RCC_APB1PERIPH_TIMER3|RCC_APB1PERIPH_TIMER6|RCC_APB1PERIPH_TIMER14,ENABLE);

    /* TIMER1  configuration */
    TIMER_DeInit(TIMER6);
    TIMER_TimeBaseStructure.TIMER_Prescaler         = 1;
    TIMER_TimeBaseStructure.TIMER_CounterMode       = TIMER_COUNTER_UP;
    TIMER_TimeBaseStructure.TIMER_Period            = 0x8D0;
    TIMER_TimeBaseStructure.TIMER_ClockDivision     = TIMER_CDIV_DIV1;  //0
    //TIMER_TimeBaseStructure.TIMER_RepetitionCounter = 1;
    TIMER_BaseInit(TIMER6,&TIMER_TimeBaseStructure);
    /* TIMER1 Update DMA Request enable */
    TIMER_DMACmd( TIMER6, TIMER_DMA_UPDATE, ENABLE);                               
  TIMER_SelectOutputTrigger(TIMER6,TIMER_TRI_OUT_SRC_UPDATE);
    /* TIMER enable counter*/
    TIMER_Enable( TIMER6, ENABLE );
}
void DAC_Configuration(void)
{   
    DAC_InitPara   DAC_InitStructure;
    DAC_InitStructure.DAC_Trigger = DAC_TRIGGER_T6_TRGO;
    DAC_InitStructure.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;
    DAC_Init(DAC1,&DAC_InitStructure);
    /* Enable DAC1 */
    DAC_Enable(DAC1,ENABLE);
    /* Set DAC1_L8DHR register */
    DAC_SetDAC1Data(DAC_ALIGN_8B_R, 0x7FF0);
    DAC_DMA_Enable(DAC1,ENABLE);
}
void DACDMAConfig(void)
{
        DMA_InitPara  DMA_InitStructure;
        RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_DMA1, ENABLE);  //ÆôDMAʱÖÓ
       
        /* DMA channel3 configuration **************************************/
        DMA_DeInit(DMA1_CHANNEL3);
       
        //DMA_InitStructure.DMA_Channel = DMA_Channel_7;  
        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC1_R8DHR_ADDRESS; //DAC_DHR12R2_ADDRESS;
        DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&data; //wavedata2; //(uint32_t)&Sine12bit;
        DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERALSRC;//DMA_DIR_MemoryToPeripheral;
        DMA_InitStructure.DMA_BufferSize = sizeof(data); //8294 - 46; //6030 - 46; //32;
        DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;//DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PERIPHERALDATASIZE_BYTE;//DMA_PeripheralDataSize_HalfWord;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MEMORYDATASIZE_BYTE; //DMA_MemoryDataSize_HalfWord;
        DMA_InitStructure.DMA_Mode = DMA_MODE_CIRCULAR;//comfirm,DMA_Mode_Circular;
        DMA_InitStructure.DMA_Priority = DMA_PRIORITY_HIGH; //confirm,DMA_Priority_High;       
        DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE;
        DMA_Init(DMA1_CHANNEL3, &DMA_InitStructure);
       
  DAC_DMA_Enable(DAC1, ENABLE);
  DAC_INTConfig(DAC1, ENABLE);
  DMA_Enable(DMA1_CHANNEL3, ENABLE);
}

74

主题

3890

帖子

1万

积分

资深工程师

发表于 2017-11-13 13:52 | 显示全部楼层 |返回版面
这没有官方提供的例程么?
     

1

主题

5

帖子

15

积分

实习生

 楼主| 发表于 2017-11-14 03:44 | 显示全部楼层 |返回版面
官方提供的例程里面,我只看到通过软件触发的方式,没有DMA触发的方式

79

主题

3600

帖子

1万

积分

资深工程师

发表于 2017-11-16 22:13 | 显示全部楼层 |返回版面
DMA_InitStructure.DMA_Priority = DMA_PRIORITY_HIGH; //confirm,DMA_Priority_High;

DMA的优先级的设计为最高还是必要的。
     

3

主题

7

帖子

31

积分

实习生

发表于 2017-11-17 09:26 | 显示全部楼层 |返回版面
DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERALSRC; 改为 DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERALDST;试下

打赏榜单

PCBEMI 打赏了 5.00 元 2017-11-18

     

1

主题

5

帖子

15

积分

实习生

 楼主| 发表于 2017-11-18 18:59 | 显示全部楼层 |返回版面
hxh12345 发表于 2017-11-17 09:26
DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHERALSRC; 改为 DMA_InitStructure.DMA_DIR = DMA_DIR_PERIPHER ...

多谢hxh12345, 帮忙解决了这个问题,打赏5元意思下
     

3

主题

7

帖子

31

积分

实习生

发表于 2017-11-21 13:56 | 显示全部楼层 |返回版面
PCBEMI 发表于 2017-11-18 18:59
多谢hxh12345, 帮忙解决了这个问题,打赏5元意思下

不客气,刚好之前调过DMA

26

主题

1387

帖子

4165

积分

中级工程师

发表于 2017-11-24 20:55 | 显示全部楼层 |返回版面
这一部分的代码还是比较复杂的
     

22

主题

900

帖子

2687

积分

初级工程师

发表于 2017-11-24 21:03 | 显示全部楼层 |返回版面
/* TIMERS clock enable */
    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_TIMER1|RCC_APB2PERIPH_TIMER15|RCC_APB2PERIPH_TIMER16|RCC_APB2PERIPH_TIMER17,ENABLE);
    RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2|RCC_APB1PERIPH_TIMER3|RCC_APB1PERIPH_TIMER6|RCC_APB1PERIPH_TIMER14,ENABLE);
这个时钟总线的设计需要注意区分的

37

主题

322

帖子

966

积分

高级技术员

发表于 2017-11-27 18:03 | 显示全部楼层 |返回版面
DMA的速度怎么样

86

主题

3850

帖子

1万

积分

资深工程师

发表于 2017-11-30 19:45 | 显示全部楼层 |返回版面
这DMA的一下开了这么多的?
后来乍到,前辈们多多包涵了啊。。
您需要登录后才可以回帖 登录 | 注册 手机登录

本版积分规则

分享 快速回复 返回顶部 返回列表