Перейти к содержанию
    

Проблема в DMA DAC в GD32F470

Подскажите пожалуйста, кто то реализовывал передачу данных по DMA в DAC на GD32F470 в 16 битном режиме? Попробовал пример от Gigadevice в 8 битном режиме, работает, как только переделал в 16 битный режим, то началась какафония на выходе, хотя должен быть меандр

Spoiler
#define DAC1_R12DH_ADDRESS      0x40007414
const uint16_t dataDAC[8] = {0x00, 0x00, 0x00, 0x00, 0x0FF, 0x0FF, 0x0FF, 0x0FF};


void timer5_config(void)
{
        rcu_periph_clock_enable(RCU_TIMER5);
    
    timer_prescaler_config(TIMER5, 0xF, TIMER_PSC_RELOAD_UPDATE);
    timer_autoreload_value_config(TIMER5, 0xFF);
    timer_master_output_trigger_source_select(TIMER5, TIMER_TRI_OUT_SRC_UPDATE);
    
    timer_enable(TIMER5);
}


void dac_config(void)
{
        rcu_periph_clock_enable(RCU_DAC);
    dac_deinit();
    dac_trigger_source_config(DAC1, DAC_TRIGGER_T5_TRGO);
    dac_trigger_enable(DAC1);
    dac_wave_mode_config(DAC1, DAC_WAVE_DISABLE);
    dac_output_buffer_enable(DAC1);
    dac_enable(DAC1);
    dac_dma_enable(DAC1);
}


void dma_config(void)
{
    
    dma_single_data_parameter_struct dma_struct;
    
        rcu_periph_clock_enable(RCU_DMA0);    
    

    dma_flag_clear(DMA0, DMA_CH6, DMA_INTF_FEEIF);
    dma_flag_clear(DMA0, DMA_CH6, DMA_INTF_SDEIF);
    dma_flag_clear(DMA0, DMA_CH6, DMA_INTF_TAEIF);
    dma_flag_clear(DMA0, DMA_CH6, DMA_INTF_HTFIF);
    dma_flag_clear(DMA0, DMA_CH6, DMA_INTF_FTFIF);
    

    dma_channel_subperipheral_select(DMA0, DMA_CH6, DMA_SUBPERI7);
    dma_struct.periph_addr         = DAC1_R12DH_ADDRESS;
    dma_struct.memory0_addr        = (uint32_t)dataDAC;
    dma_struct.direction           = DMA_MEMORY_TO_PERIPH;
    dma_struct.number              = 8;
    dma_struct.periph_inc          = DMA_PERIPH_INCREASE_DISABLE;
    dma_struct.memory_inc          = DMA_MEMORY_INCREASE_ENABLE;
    dma_struct.periph_memory_width = DMA_PERIPH_WIDTH_16BIT;
    dma_struct.priority            = DMA_PRIORITY_ULTRA_HIGH;
    dma_struct.circular_mode       = DMA_CIRCULAR_MODE_ENABLE;
    dma_single_data_mode_init(DMA0, DMA_CH6, &dma_struct);
    
    dma_channel_enable(DMA0, DMA_CH6);
}

 

Изменено пользователем haker_fox
Код следует помещать в теги <>, а длинный код спрятать под сойлер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...