2 channel generator

Hi
One channel is working PA8, the other is not PA3, it is stm32f103.
Where is the error and how to fix it.

#define SAMPLES 100  // 6.9 kHz
#include <libmaple/dma.h>

dma_tube_config  dma_cfg2, dma_cfg4;

int   flag2 = 0 ,  flag4 = 0;
int  out2 = PA8,  out4 = PA3;
int  val2[SAMPLES], val4[SAMPLES];

//============================================ timers  =======================
int amp = 50;
int cnt = 0;
int time_track = 0;
float stp = 6.2831 / SAMPLES;
int ret = 17;

timer_dev *dev2 = PIN_MAP[out2].timer_device;
timer_dev *dev4 = PIN_MAP[out4].timer_device;
uint8 cc_channel2 = PIN_MAP[out2].timer_channel;
uint8 cc_channel4 = PIN_MAP[out4].timer_channel;

void fun2()
{
  flag2++;
}

void fun4()
{
  flag4++;
}

void timer_conf()
{

  //PA8, TT1C1
  timer_dma_set_base_addr(dev2, TIMER_DMA_BASE_CCR1);        //+++++++++++++++++++++
  timer_dma_set_burst_len(dev2, 1);
  timer_dma_enable_req(dev2, cc_channel2);
  timer_set_reload(dev2, 102);
  timer_set_prescaler(dev2, 0);
  // PB1 TIM3_CH4 DMA CH3

  //++++++++++++++++++++++++++++++++++
  // PA# TIM2_CH4 DMA
  timer_dma_set_base_addr(dev4, TIMER_DMA_BASE_CCR3);         //+++++++++++++++++++++++
  timer_dma_set_burst_len(dev4, 1);
  timer_dma_enable_req(dev4, PIN_MAP[out4].timer_channel);
  timer_set_reload(dev4, 102);
  timer_set_prescaler(dev4, 0);
  //++++++++++++++++++++++++++++++++
}

void dma_conf()
{
  dma_init(DMA1);

  //PA8 T1C1 DMA C2
  dma_cfg2.tube_dst = &(dev2->regs.gen->DMAR);
  dma_cfg2.tube_dst_size = DMA_SIZE_32BITS;
  dma_cfg2.tube_src = val2;
  dma_cfg2.tube_src_size = DMA_SIZE_32BITS;
  dma_cfg2.tube_nr_xfers = SAMPLES;
  dma_cfg2.tube_flags = DMA_CFG_SRC_INC | DMA_CFG_CIRC | DMA_CFG_CMPLT_IE;
  dma_cfg2.tube_req_src = DMA_REQ_SRC_TIM1_CH1;
  dma_cfg2.target_data = 0;
  ret = dma_tube_cfg(DMA1, DMA_CH2, &dma_cfg2);


  //+++++++++++++++++++++
  // PA3 TIM2_CH4 DMA CH1
  dma_cfg4.tube_dst = &(dev4->regs.gen->DMAR);
  dma_cfg4.tube_dst_size = DMA_SIZE_32BITS;
  dma_cfg4.tube_src = val4;
  dma_cfg4.tube_src_size = DMA_SIZE_32BITS;
  dma_cfg4.tube_nr_xfers = SAMPLES;
  dma_cfg4.tube_flags = DMA_CFG_SRC_INC | DMA_CFG_CIRC;
  dma_cfg4.tube_req_src = DMA_REQ_SRC_TIM2_CH4;             
  dma_cfg4.target_data = 0;
  ret = dma_tube_cfg(DMA1, DMA_CH1, &dma_cfg4);          
  //+++++++++++++++++++++

}

void dma_start()
{

  //PA8 T1C1 DMA C2
  dma_attach_interrupt(DMA1, DMA_CH2, fun2);
  dma_enable(DMA1, DMA_CH2);
  timer_resume(dev2);

  //PA3 TIM2C4
  dma_attach_interrupt(DMA1, DMA_CH1, fun4);
  dma_enable(DMA1, DMA_CH1);
  timer_resume(dev4);
 

}
//============================================ end timers  =======================
void init_wave()
{
  int i;
  for (i = 0; i < SAMPLES; i++)
  {

    val2[i] = 50 + amp * sin(stp * i);    // PA8
    val4[i] = 50 + amp * sin(stp * i );   // PA3
  }
}

//+++++++++++++++++++++++++++++++++++++++++++ setup  ++++++++++++++++++++++++++++++
void setup()
{

  int i;

  pinMode(out2, PWM);                     //  PA8
  pinMode(out4, PWM);                     //  PA3

  timer_conf();
  dma_conf();
  dma_start();
  init_wave();

}

//=========================================== end setup  ===========================
void loop()

{
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.