PWM modulator

Generic boards that are not Maple or Maple mini clones, and don't contain the additional USB reset hardware
Post Reply
ted
Posts: 62
Joined: Sun Jul 16, 2017 9:57 pm

PWM modulator

Post by ted » Tue Jan 16, 2018 4:48 am

This is a program for sine wave generator, to my understanding PWM is modulated by sine wave generator - part of the program. What changes need to be done to have PWM modulated by signal applayed to pin PA6 not by generator. Looking for help.

Code: Select all

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

dma_tube_config dma_cfg, dma_cfg2;

int flag1 = 0;
//int flag2 = 0;

int out1 = PB7;  
int input=analogRead(PA6);         
//int out2 = PA8; 
//float input=analogRead(PA6);
int val1[SAMPLES];

int16 shift = 0;

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

timer_dev *dev1 = PIN_MAP[out1].timer_device;
uint8 cc_channel1 = PIN_MAP[out1].timer_channel;

void fun()
{
    flag1++;
}


void timer_conf()
{
  
  timer_dma_set_base_addr(dev1, TIMER_DMA_BASE_CCR2);
  timer_dma_set_burst_len(dev1, 1);
  timer_dma_enable_req(dev1, cc_channel1);
  timer_set_reload(dev1, 102);
  timer_set_prescaler(dev1, 0);

}

void dma_conf()
{
    dma_init(DMA1);
    /* T4C2 DMA C4 */
    dma_cfg.tube_dst = &(dev1->regs.gen->DMAR);
    dma_cfg.tube_dst_size = DMA_SIZE_32BITS;
    dma_cfg.tube_src = val1;
    dma_cfg.tube_src_size = DMA_SIZE_32BITS;
    
    dma_cfg.tube_nr_xfers = SAMPLES;
    dma_cfg.tube_flags = DMA_CFG_SRC_INC | DMA_CFG_CIRC | DMA_CFG_CMPLT_IE;
    
    dma_cfg.tube_req_src = DMA_REQ_SRC_TIM4_CH2;
    dma_cfg.target_data = 0;
    
    ret = dma_tube_cfg(DMA1, DMA_CH4, &dma_cfg);
    
 
}

void dma_start()
{
  dma_attach_interrupt(DMA1, DMA_CH4, fun);
    
  dma_enable(DMA1, DMA_CH4);
  timer_resume(dev1);
  

    
  dma_enable(DMA1, DMA_CH2);

}

void init_wave()
{
  int i;
  for(i=0;i<SAMPLES;i++)
  {
      val1[i] = 50 + amp * sin(stp * i);
    
  }
}

void setup() {
  int i;
  pinMode(out1, PWM);
//  pinMode(out2, PWM);
 
  Serial.begin(9600);
timer_conf();
  dma_conf();
  dma_start();
  init_wave();
 
}

void loop() {

}




Post Reply