DCS_TEAM / Mbed 2 deprecated Chemical_Sensor_DMA

Dependencies:   mbed

Dependents:   DCS_FINAL_CODE

Fork of Chemical_Sensor_DMA by Jared Baxter

main.cpp

Committer:
baxterja
Date:
2015-11-06
Revision:
5:1b2dc43e8947
Parent:
4:9fd291254686

File content as of revision 5:1b2dc43e8947:

#include "mbed.h"
#include "pause.cpp"
#include "Sample/adc.h"
#include "Sample/pdb.h"
#include "SignalProcessing.h"
// for debug purposes
Serial pc(USBTX, USBRX);
DigitalOut led_red(LED_RED);
DigitalOut led_green(LED_GREEN);
DigitalOut led_blue(LED_BLUE);

Timer t1;
using namespace std;
 
 
 
 
#define PDB_DACINTC0_TOE 0x01 // 0x01 -> PDB DAC interal trigger enabled

#define DAC0_DAT0 (uint16_t *)0x400CC000 // DAC word buffer base address

uint16_t *p1;
void setUpDac()
{
    SIM_SCGC2 |= SIM_SCGC2_DAC0_MASK;  // turn on clock to the DAC
    SIM_SCGC6 |= SIM_SCGC6_DAC0_MASK;  // turn on clock to the DAC
    DAC0_C0 |= DAC_C0_DACEN_MASK ;   // enable the DAC; must do before any of the following
    DAC0_C2 =9;//cycle through the first 10 values in the buffer
    DAC0_C1 = 1;//enable the dac buffer
    p1 = DAC0_DAT0;
    for (int i = 0; i < 16; i++)//fill the buffer 
    {
        *p1++ = (uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * i) * 460.0 + 2870.0); // 3351.0
        //printf("Pointer: %d\tValue: %d\n\r", (uint32_t)p1,(int) (cos(3.14159265359 * 2 * 10000 * .00001 * i) * 800.0 + 3103.0));
    } 

}
 
int main()
{
    
    led_blue = 1;
    led_green = 1;
    led_red = 1;
    pre_compute_tables();
    
    
//    t1.reset();
//    for (int t  = 0; t<500000; t++)
//    {
//        int input1 = 5000*cos(3.14159265359 * 2*10000*t*.00001)+2500;
//        int input2 = 2500*sin(3.14159265359 * 2*10000*t*.00001)+2500;
//        t1.start();
//        filter100K(input1, input2);
//        t1.stop();
//    }
//    printf("FINAL TIME: %f\n\r",t1.read());
   
    pc.printf("Starting...\r\n");    
    for(int i = 0; i < 86; i++) 
    {
        if(NVIC_GetPriority((IRQn_Type) i) == 0) NVIC_SetPriority((IRQn_Type) i, 2);
    }
    
    // Give hardware associated with 
    // sampling the highest priority
    NVIC_SetPriority(ADC1_IRQn,0);
    NVIC_SetPriority(ADC0_IRQn,0);
    NVIC_SetPriority(PDB0_IRQn,0);
    NVIC_SetPriority(DMA0_IRQn,0);
    NVIC_SetPriority(DMA1_IRQn,0);
    NVIC_SetPriority(DMA2_IRQn,0);
    
    NVIC_SetPriority(ENET_1588_Timer_IRQn,1);
    NVIC_SetPriority(ENET_Transmit_IRQn,1);
    NVIC_SetPriority(ENET_Receive_IRQn,1);
    NVIC_SetPriority(ENET_Error_IRQn,1);
    
    adc_init(); // initialize ADCs (always initialize adc before dma)
    setUpDac();
    dma_init(); // initializes DMAs
    pdb_init(); // initialize PDB0 as the timer for ADCs and DMA2 
    
    // flash green led indicating startup complete
    led_red = 1;
    led_blue = 1;
    led_green = 0;
    pause_ms(500);
    led_green = 1;
    pause_ms(200);
    led_green = 0;
    pause_ms(500); 
    led_green = 1;
    pdb_start();
    int startAddress = (int)&sample_array0[0];
    int destinationIndex = (DMA_TCD0_DADDR-startAddress)/2;
    int currentIndex;
    while (1)
    {
        
    
        destinationIndex = (DMA_TCD0_DADDR-startAddress)/2;//-1;
        //if (destinationIndex<0)
        //    destinationIndex = 1999;
        while (currentIndex!=destinationIndex)
        {
            filter100K(sample_array0[currentIndex], sample_array1[currentIndex]);
            currentIndex++;
            if (currentIndex>=2000)
                currentIndex = 0;
            
        }
        
    }
    
    
}