Impedance Fast Circuitry Software

Dependencies:   mbed-dsp mbed

Fork of DSP_200kHz by Mazzeo Research Group

main.cpp

Committer:
timmey9
Date:
2015-01-31
Revision:
48:29f14bc30ba6
Parent:
47:54fafe151669
Child:
49:4dcf4717a8bb

File content as of revision 48:29f14bc30ba6:

#include "mbed.h"

#include "AngleEncoder.h"
#include "adc.h"
#include "pdb.h"
#include "quad.h"

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

AngleEncoder angle_encoder(PTD2, PTD3, PTD1, PTD0, 8, 0, 1000000); // mosi, miso, sclk, cs, bit_width, mode, hz
DigitalOut quadA(PTC17);
DigitalOut quadB(PTC16);
extern int len;
extern uint16_t sample_array0[];
extern uint16_t sample_array1[];
extern uint16_t angle_array[];

bool switcher = false;

using namespace std;
 
int main() {
    led_blue = 1;
    led_green = 1;
    led_red = 1;
    quadA = 0;
    quadB = 0;
    
    pc.baud(230400);
    pc.printf("Starting\r\n");
    
    quad_init();
    adc_init(); // always initialize adc before dma
    dma_init();
    pdb_init();
    
    led_green = 1;
    
    pc.printf("\r\n\r\n\r\n");
    
    while(1) {
        // creates signals for the quad decoder to read for testing
        quadA = !quadA;
        for(int i = 0; i < 65535; i++) asm("nop");
        quadB = !quadB;
        
        if(pc.readable() > 0) {
            char temp = pc.getc();
            
            switch(temp) {
                case 'G':
                case 'g':
                    pc.printf("Quad Cnt: %i\r\n", quad_read());
                    break;
                case 'A':
                case 'a': // needs debugging
                    adc_start();
                    for(int i = 0; i < 1500; i++) asm("nop");
                    adc_stop();
                    // then proceed to 's' to display the array
                case 'S':
                case 's':
                    for(int i = 0; i < len; i++) pc.printf("%i: %f\t %f\t %i\r\n",i,sample_array0[i]*3.3/65535,sample_array1[i]*3.3/65535, angle_array[i]);
                    pc.printf("\r\n");
                    break;
                case 'D':
                case 'd':
                    adc_single_sample(); // trigger ADCs, which trigger DMA
                    DMA_TCD2_CSR |= DMA_CSR_START_MASK; // trigger encoder DMA
                    break;
                case 'F':
                case 'f':
                    for(int i = 0; i < len; i++) {sample_array0[i] = 0; sample_array1[i] = 0; angle_array[i] = 0;}
                    pc.printf("Arrays cleared\r\n");
                    break;
                    
                // Programmable Delay Block debug
                case 'B':
                case 'b':
                    pdb_start();
                    break;
                case 'K':
                case 'k':
                    pc.printf("STOPPED\r\n");
                    pdb_stop();
                    break;
                case 'V':
                case 'v':
                    pc.printf("PDB: %i\r\n",PDB0_CNT);
                    break;
            }
        }
    }
}