Dependencies:   mbed-dsp mbed

Fork of DSP_200kHz by Mazzeo Research Group

main.cpp

Committer:
bmazzeo
Date:
2016-02-18
Revision:
57:7b8c49e1c1f6
Parent:
56:7e08cbc3a4f1
Child:
58:4bee89daccff

File content as of revision 57:7b8c49e1c1f6:

#include "mbed.h"

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

// for debug purposes
Serial pc(USBTX, USBRX);
DigitalOut led_red(LED_RED);
DigitalOut led_green(LED_GREEN);
DigitalOut led_blue(LED_BLUE);

// defined in dma.cpp
extern int len;
extern uint16_t sample_array0[];
extern uint16_t sample_array1[];

extern uint16_t static_input_array0[];
extern uint16_t static_input_array1[];

extern uint16_t static_output_array0[];
extern uint16_t output_array0[];

extern uint16_t sampling_status;

using namespace std;
 
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
    
    
    led_green = 1;
    
    pc.printf("\r\n\r\n\r\n");
    
    while(1) {
        
        if(pc.readable() > 0) {
            char temp = pc.getc();
            
            switch(temp) {
                case 'F': // clear the samples
                case 'f':
                    for(int i = 0; i < len; i++) {sample_array0[i] = 0; sample_array1[i] = 0;}
                    pc.printf("Arrays cleared\r\n");
                    sampling_status = 0;
                    pc.printf("Sampling status cleared\r\n");
                    // then display the samples
                    break;
                case 'S': // display what's been sampled
                case 's':
                    for(int i = 0; i < len; i++) pc.printf("%i: %f\t %f\t %f\t %f\t %i\t %i\r\n",i,sample_array0[i]*3.3/65535,sample_array1[i]*3.3/65535,static_input_array0[i]*3.3/65535,static_input_array1[i]*3.3/65535, static_output_array0[i], output_array0[i]);
                    pc.printf("\r\n");
                    break;
                    
                case 'L': // Load output array
                case 'l':
                    for(int i = 0; i < len; i++) 
                        {
                            static_output_array0[i] = (uint32_t) i + 10;
                            pc.printf("%i\r\n", static_output_array0[i]);
                        }
                    break;

                case 'D': // debug
                case 'd':
                    pc.printf("DMA Status:\r\n");
                    pc.printf("DMA_TCD0_SOFF: %x\r\n", DMA_TCD0_SOFF);
                    pc.printf("DMA_TCD1_SOFF: %x\r\n", DMA_TCD1_SOFF);
                    pc.printf("DMA_TCD0_CITER_ELINKNO: %x\r\n", DMA_TCD0_CITER_ELINKNO);
                    pc.printf("DMA_TCD0_BITER_ELINKNO: %x\r\n", DMA_TCD0_BITER_ELINKNO);
                    pc.printf("DMA_TCD1_CITER_ELINKNO: %x\r\n", DMA_TCD1_CITER_ELINKNO);
                    pc.printf("DMA_TCD1_BITER_ELINKNO: %x\r\n", DMA_TCD1_BITER_ELINKNO);
                    pc.printf("DMA_TCD2_CITER_ELINKNO: %x\r\n", DMA_TCD2_CITER_ELINKNO);
                    pc.printf("DMA_TCD2_BITER_ELINKNO: %x\r\n", DMA_TCD2_BITER_ELINKNO);
                    pc.printf("DMA_TCD3_CITER_ELINKNO: %x\r\n", DMA_TCD3_CITER_ELINKNO);
                    pc.printf("DMA_TCD3_BITER_ELINKNO: %x\r\n", DMA_TCD3_BITER_ELINKNO);
                    pc.printf("DMA_TCD4_CITER_ELINKNO: %x\r\n", DMA_TCD4_CITER_ELINKNO);
                    pc.printf("DMA_TCD4_BITER_ELINKNO: %x\r\n", DMA_TCD4_BITER_ELINKNO);
                    pc.printf("DMA_TCD5_CITER_ELINKNO: %x\r\n", DMA_TCD5_CITER_ELINKNO);
                    pc.printf("DMA_TCD5_BITER_ELINKNO: %x\r\n", DMA_TCD5_BITER_ELINKNO);
                    pc.printf("\r\n");
                    //pc.printf("DAC0_DAT0H: %x\r\n", DAC0_DAT0H);
                    //pc.printf("DAC0_DAT0L: %x\r\n", DAC0_DAT0L);
                    pc.printf("DAC0_DAT0: %i\r\n", (DAC0_DAT0H << 8) | DAC0_DAT0L);
                    pc.printf("DMA_TCD2_SADDR: %i\r\n", DMA_TCD2_SADDR);
                    pc.printf("DMA_TCD2_DADDR: %i\r\n", DMA_TCD2_DADDR);
                    pc.printf("DAC0_DAT0H: %i\r\n", (uint32_t) &DAC0_DAT0H);
                    pc.printf("DAC0_DAT0L: %i\r\n", (uint32_t) &DAC0_DAT0L);
                    //int ptr;
                    //ptr = DMA_TCD2_SADDR;
                    //ptr = DMA_TCD2_SADDR;
                    //ptr = DMA_TCD2_SADDR;
                    pc.printf("Value at SADDR: %i\r\n", *((uint32_t *)DMA_TCD2_SADDR));
                    
                    pc.printf("Value of sampling_status: %i\r\n", sampling_status);                    
                    break;
                
                case 'A': // analog out
                case 'a':
                    DAC0_DAT0H = 0x01;
                    DAC0_DAT0L = 0x10;
                    break;
                    
                // Programmable Delay Block debug
                case 'B':
                case 'b':
                    pc.printf("Started PDB...samples being taken\r\n");
                    pdb_start();
                    break;
                case 'K':
                case 'k':
                    pc.printf("Stopped PDB\r\n");
                    pdb_stop();
                    break;
                case 'V':
                case 'v':
                    pc.printf("PDB: %i\r\n",PDB0_CNT);
                    break;
            }
        }
    
        
    }
}