Dependencies:   mbed-dsp mbed

Fork of DSP_200kHz by Mazzeo Research Group

main.cpp

Committer:
bmazzeo
Date:
2017-05-05
Revision:
68:e5031c18fefb
Parent:
67:ec0c58490ce6
Child:
69:014d4bbd4e03

File content as of revision 68:e5031c18fefb:

#include "mbed.h"

// Sampling
#include "DMA_sampling/adc.h"
#include "DMA_sampling/dac.h"
#include "DMA_sampling/pdb.h"

// DSP
#include "dsp.h"


// for debug purposes
Serial pc(USBTX, USBRX);
DigitalOut led_red(LED_RED);
DigitalOut led_green(LED_GREEN);
DigitalOut led_blue(LED_BLUE);
DigitalOut status_0(D0);
DigitalOut status_1(D1);
DigitalIn sw2(SW2);
DigitalIn sw3(SW3);

// defined in dma.cpp
extern int len;
extern uint16_t static_input_array0[];
extern uint16_t static_input_array1[];
extern uint16_t static_output_array0[];
extern uint16_t sampling_status;

// To set up FIR filtering
#define TOTAL_TAPS 8
#define STATE_LENGTH  71
#define BUFFER_LENGTH 64
uint16_t numTaps = TOTAL_TAPS;
float State[STATE_LENGTH]= {0};
float Coeffs[TOTAL_TAPS] = {1, -1, 0, 0, 0, 0, 0, 0};
arm_fir_instance_f32 S = {numTaps, State, Coeffs};

float filter_input_array[BUFFER_LENGTH] = {0};
float filter_output_array[BUFFER_LENGTH] = {0};


int main() {
    led_blue = 1;
    led_green = 1;
    led_red = 1;
    
    pc.baud(230400);
    pc.printf("Starting\r\n");
    
    pdb_init(); // Initalize PDB   
    dac_init(); // initializes DAC   
    adc_init(); // always initialize adc before dma
    pc.printf("ADC Initialized\r\n");
    dma_init(); // initializes DMAs
    dma_reset(); // This clears any DMA triggers that may have gotten things into a different state
    pc.printf("Buffer Size: %i\r\n", len);
    
    led_green = 1;
    
    pc.printf("\r\n\r\n\r\n");
    
    pdb_start();
    while(1) 
        {
            while(sampling_status == 0)
            {   
                status_0 = 1;
            }
            
            sampling_status = 0;
            status_0 = 0;

            if(sw2)
                {
                    if(sw3)
                        {
                        //Default PASSTHROUGH Condition
                        status_1 = 1;
                        for(int i = 0; i < len; i++) 
                        {
                            static_output_array0[i] = static_input_array0[i] >> 4;                            
                        }
                        status_1 = 0;
                        }
                    else                    
                        {        
                        // Can show that buttons are active - Serial link working
                        status_1 = 1;
                        pc.printf("DSP\r\n");
                        for(int i = 0; i < len; i++) 
                        {
                            static_output_array0[i] = static_input_array0[i] >> 4;
                        }                    
                        status_1 = 0;
                        }
                }   
            else 
                {   
                    // Here we can really put our DSP blocks     
                    status_1 = 1;
                    for(int i = 0; i < len; i++) 
                    {
                        //static_output_array0[i] = static_input_array0[i] >> 4;                        
                        //filter_input_array[i] = (float) (((int) static_input_array0[i]) - 0x8000);
                        filter_input_array[i] = (float) (((int)static_input_array0[i]) - 0x8000);
                    }
                    
                    //filter_input_array[0] = (float) static_input_array0[0];
                    
                    arm_fir_f32(&S, filter_input_array, filter_output_array, len);
                    
                    
                    // Scale for output
                    /*
                    for(int i = 0; i < len; i++) 
                    {
                        //static_output_array0[i] = static_input_array0[i] >> 4;                        
                        //filter_output_array[i] = 0.25 * filter_input_array[i];
                        filter_output_array[i] = 0.0625 * filter_output_array[i];
                    }
                    */
                    
                    for(int i = 0; i < len; i++) 
                    {
                        //static_output_array0[i] = static_input_array0[i] >> 4;                        
                        //static_output_array0[i] = (uint16_t) (( (int) filter_output_array[i] ) + 0x800);
                        static_output_array0[i] = (uint16_t) (filter_output_array[i] + 0x8000) >> 4;
                        //static_output_array0[i] = (uint16_t) filter_input_array[i];
                        //static_output_array0[i] = static_input_array0[i] >> 4;
                    }                    
                    status_1 = 0;
                }
        }
}