打印
[综合信息]

N32G4FR芯片DAC的DMA开不起来,请帮忙看看

[复制链接]
507|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dopod577w|  楼主 | 2023-7-12 11:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
芯片是N32G4FRKEQ7,改了4x4的封装,重新做好了板子,开始调试了。


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

// --------------------------------------------------------------------------------
void dac_gpio_config(void)
{
        GPIO_InitType gpio_init_struct;

        // PA4 = DAC1
        gpio_init_struct.GPIO_Mode  = GPIO_Mode_AIN;
        gpio_init_struct.Pin        = GPIO_PIN_4;
        GPIO_InitPeripheral(GPIOA, &gpio_init_struct);
}

static void nvic_config(IRQn_Type irq)
{
    NVIC_InitType NVIC_InitStructure;

    /* Enable the Interrupt */
    NVIC_InitStructure.NVIC_IRQChannel                   = irq;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

void dac_dma_config(void)
{
    DMA_InitType DMA_InitStructure;

    DMA_DeInit(DMA2_CH3);
    DMA_InitStructure.PeriphAddr     = (uint32_t)DAC->DR12CH1;
    DMA_InitStructure.MemAddr        = (uint32_t)dac_Wave;
    DMA_InitStructure.Direction      = DMA_DIR_PERIPH_DST;
    DMA_InitStructure.BufSize        = TUNE_LEN_DAC;
    DMA_InitStructure.PeriphInc      = DMA_PERIPH_INC_DISABLE;
    DMA_InitStructure.DMA_MemoryInc  = DMA_MEM_INC_ENABLE;
    DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_SIZE_HALFWORD;
    DMA_InitStructure.MemDataSize    = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.CircularMode   = DMA_MODE_CIRCULAR;
    DMA_InitStructure.Priority       = DMA_PRIORITY_HIGH;
    DMA_InitStructure.Mem2Mem        = DMA_M2M_DISABLE;
    DMA_Init(DMA2_CH3, &DMA_InitStructure);

    DMA_EnableChannel(DMA2_CH3, ENABLE);

        DMA_ConfigInt(DMA2_CH3, DMA_INT_TXC | DMA_INT_HTX, ENABLE);

        /* dma1 channel1 interrupt nvic init */
        nvic_config(DMA2_Channel3_IRQn);
}

void TIM2_TrgoInit(void)
{
    TIM_TimeBaseInitType TIM_TimeBaseStructure;

    /* TIM2 Configuration */
    /* Time base configuration */
    TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
    TIM_TimeBaseStructure.Period    = 108-1;//108MHz/108=1MHz
    TIM_TimeBaseStructure.Prescaler = 0x0;
    TIM_TimeBaseStructure.ClkDiv    = 0x0;
    TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;
    TIM_InitTimeBase(TIM2, &TIM_TimeBaseStructure);

    /* TIM2 TRGO selection */
    TIM_SelectOutputTrig(TIM2, TIM_TRGO_SRC_UPDATE);
}

void dac_config(void)
{
        DAC_InitType dac_init_struct;

        TIM2_TrgoInit();
       
        /* dac1 configuration */
        DAC_ClearStruct(&dac_init_struct);
    dac_init_struct.Trigger      = DAC_TRG_T2_TRGO;
    dac_init_struct.WaveGen      = DAC_WAVEGEN_NONE;
    dac_init_struct.BufferOutput = DAC_BUFFOUTPUT_DISABLE;
    DAC_Init(DAC_CHANNEL_1, &dac_init_struct);

        dac_dma_config();

        DAC_Enable(DAC_CHANNEL_1, ENABLE);
}

void dac_setup(void)
{
        dac_gpio_config();
        dac_config();
}

void dac_start(void)
{
        DAC_DmaEnable(DAC_CHANNEL_1, ENABLE); // DAC

        /* enable tmr2 */
        TIM_Enable(TIM2, ENABLE);
}


使用特权

评论回复
沙发
dopod577w|  楼主 | 2023-7-12 14:07 | 只看该作者
好了,少了一个&:
DMA_InitStructure.PeriphAddr     = (uint32_t)DAC->DR12CH1;
DMA_InitStructure.PeriphAddr     = (uint32_t)&DAC->DR12CH1;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

25

帖子

2

粉丝