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()
{
}