DCS_TEAM / Mbed 2 deprecated Chemical_Sensor_DMA

Dependencies:   mbed

Dependents:   DCS_FINAL_CODE

Fork of Chemical_Sensor_DMA by Jared Baxter

Committer:
baxterja
Date:
Fri Nov 06 03:33:09 2015 +0000
Revision:
4:9fd291254686
Parent:
3:a85b742be262
Child:
5:1b2dc43e8947
This is version 1 of the working filter

Who changed what in which revision?

UserRevisionLine numberNew contents of line
baxterja 2:3771b3195c7b 1 #include "mbed.h"
baxterja 2:3771b3195c7b 2 #include "pause.cpp"
baxterja 2:3771b3195c7b 3 #include "Sample/adc.h"
baxterja 2:3771b3195c7b 4 #include "Sample/pdb.h"
baxterja 3:a85b742be262 5 #include "SignalProcessing.h"
baxterja 2:3771b3195c7b 6 // for debug purposes
baxterja 2:3771b3195c7b 7 Serial pc(USBTX, USBRX);
baxterja 2:3771b3195c7b 8 DigitalOut led_red(LED_RED);
baxterja 2:3771b3195c7b 9 DigitalOut led_green(LED_GREEN);
baxterja 2:3771b3195c7b 10 DigitalOut led_blue(LED_BLUE);
baxterja 2:3771b3195c7b 11
baxterja 2:3771b3195c7b 12
baxterja 2:3771b3195c7b 13 void output_data();
baxterja 2:3771b3195c7b 14
baxterja 2:3771b3195c7b 15 Timer t1;
baxterja 2:3771b3195c7b 16 using namespace std;
baxterja 2:3771b3195c7b 17
baxterja 4:9fd291254686 18
baxterja 4:9fd291254686 19 // uint16_t out_val_pre[];
baxterja 4:9fd291254686 20 //
baxterja 4:9fd291254686 21 //
baxterja 4:9fd291254686 22 // uint16_t phase_counter2 = 0;
baxterja 4:9fd291254686 23 // #define pre_compute_length 2000
baxterja 4:9fd291254686 24 //
baxterja 4:9fd291254686 25 // void ISR_repeat() {
baxterja 4:9fd291254686 26 // WaveOut.write_u16(out_val_pre[phase_counter2]); //creates a wave that bounces between 0 & 3.3 V
baxterja 4:9fd291254686 27 //
baxterja 4:9fd291254686 28 // phase_counter2++;
baxterja 4:9fd291254686 29 // if (phase_counter2 >= pre_compute_length) phase_counter2 = 0;
baxterja 4:9fd291254686 30 //} //ISR_repeat
baxterja 4:9fd291254686 31 //
baxterja 4:9fd291254686 32 //Ticker timer0;
baxterja 4:9fd291254686 33 //
baxterja 4:9fd291254686 34
baxterja 4:9fd291254686 35
baxterja 4:9fd291254686 36
baxterja 4:9fd291254686 37 #define PDB_DACINTC0_TOE 0x01 // 0x01 -> PDB DAC interal trigger enabled
baxterja 4:9fd291254686 38
baxterja 4:9fd291254686 39 #define DAC0_DAT0 (uint16_t *)0x400CC000 // DAC word buffer base address
baxterja 4:9fd291254686 40
baxterja 4:9fd291254686 41 uint16_t *p1;
baxterja 4:9fd291254686 42 void setUpDac()
baxterja 4:9fd291254686 43 {
baxterja 4:9fd291254686 44 SIM_SCGC2 |= SIM_SCGC2_DAC0_MASK; // turn on clock to the DAC
baxterja 4:9fd291254686 45 SIM_SCGC6 |= SIM_SCGC6_DAC0_MASK; // turn on clock to the DAC
baxterja 4:9fd291254686 46 //DAC0_C0 = 0;
baxterja 4:9fd291254686 47 DAC0_C0 |= DAC_C0_DACEN_MASK ; // enable the DAC; must do before any of the following
baxterja 4:9fd291254686 48 //DAC0_C0 |= DAC_C0_REFSEL(0)
baxterja 4:9fd291254686 49 //DAC0_C0 &= 0x9f;
baxterja 4:9fd291254686 50 //DAC0_C0 |= DAC_C0_DACRFS_MASK; // 3.3V VDDA is DACREF_2
baxterja 4:9fd291254686 51 //DAC0_C2 =9;
baxterja 4:9fd291254686 52 //DAC0_C2 |= 0x9;
baxterja 4:9fd291254686 53 //DAC0_C2 |= DAC_C2_DACBFUP(9);
baxterja 4:9fd291254686 54 DAC0_C2 =9;
baxterja 4:9fd291254686 55 //DAC0_C2 |= DAC_C2_DACBFUP(9); // resets to 15 but setting it anyway...
baxterja 4:9fd291254686 56 DAC0_C1 = 1;
baxterja 4:9fd291254686 57 //DAC0_C1 |= (0x01); // 0x01 enables the DAC buffer! See note above
baxterja 4:9fd291254686 58
baxterja 4:9fd291254686 59 // prefill the DAC buffer with first 16 values from the lut
baxterja 4:9fd291254686 60
baxterja 4:9fd291254686 61 p1 = DAC0_DAT0;
baxterja 4:9fd291254686 62 for (int i = 0; i < 16; i++)
baxterja 4:9fd291254686 63 {
baxterja 4:9fd291254686 64 *p1++ = (uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * i) * 460.0 + 2870.0); // 3351.0
baxterja 4:9fd291254686 65 //printf("Pointer: %d\tValue: %d\n\r", (uint32_t)p1,(int) (cos(3.14159265359 * 2 * 10000 * .00001 * i) * 800.0 + 3103.0));
baxterja 4:9fd291254686 66 }
baxterja 4:9fd291254686 67 printf ("data Low: %d\tdata High: %d\tTotal: %d\n\r",DAC0_DAT0L,DAC0_DAT0H,DAC0_DAT0L|DAC0_DAT0H<<8);
baxterja 4:9fd291254686 68 printf ("data Low: %d\tdata High: %d\tTotal: %d\n\r",DAC0_DAT1L,DAC0_DAT1H,DAC0_DAT1L|DAC0_DAT1H<<8);
baxterja 4:9fd291254686 69 printf ("data Low: %d\tdata High: %d\tTotal: %d\n\r",DAC0_DAT2L,DAC0_DAT2H,DAC0_DAT2L|DAC0_DAT2H<<8);
baxterja 4:9fd291254686 70 printf ("data Low: %d\tdata High: %d\tTotal: %d\n\r",DAC0_DAT3L,DAC0_DAT3H,DAC0_DAT3L|DAC0_DAT3H<<8);
baxterja 4:9fd291254686 71 printf ("data Low: %d\tdata High: %d\tTotal: %d\n\r",DAC0_DAT4L,DAC0_DAT4H,DAC0_DAT4L|DAC0_DAT4H<<8);
baxterja 4:9fd291254686 72 printf ("data Low: %d\tdata High: %d\tTotal: %d\n\r",DAC0_DAT5L,DAC0_DAT5H,DAC0_DAT5L|DAC0_DAT5H<<8);
baxterja 4:9fd291254686 73 printf ("data Low: %d\tdata High: %d\tTotal: %d\n\r",DAC0_DAT6L,DAC0_DAT6H,DAC0_DAT6L|DAC0_DAT6H<<8);
baxterja 4:9fd291254686 74 printf ("data Low: %d\tdata High: %d\tTotal: %d\n\r",DAC0_DAT7L,DAC0_DAT7H,DAC0_DAT7L|DAC0_DAT7H<<8);
baxterja 4:9fd291254686 75 printf ("data Low: %d\tdata High: %d\tTotal: %d\n\r",DAC0_DAT8L,DAC0_DAT8H,DAC0_DAT8L|DAC0_DAT8H<<8);
baxterja 4:9fd291254686 76 printf ("data Low: %d\tdata High: %d\tTotal: %d\n\r",DAC0_DAT9L,DAC0_DAT9H,DAC0_DAT9L|DAC0_DAT9H<<8);
baxterja 4:9fd291254686 77 //printf ("data High: %d\n\r",DAC0_DAT0H);
baxterja 4:9fd291254686 78
baxterja 4:9fd291254686 79 //printf ("data Low: %d\n\r",DAC0_DAT1L);
baxterja 4:9fd291254686 80 //printf ("data High: %d\n\r",DAC0_DAT1H);
baxterja 4:9fd291254686 81 /*
baxterja 4:9fd291254686 82 p1 = DAC0_DAT0;
baxterja 4:9fd291254686 83 for (int i = 0; i < 16; i++)
baxterja 4:9fd291254686 84 {
baxterja 4:9fd291254686 85 *p1++;
baxterja 4:9fd291254686 86 printf("Pointer: %d\n\r", (uint32_t)*p1);
baxterja 4:9fd291254686 87 }
baxterja 4:9fd291254686 88
baxterja 4:9fd291254686 89 DAC0_DAT0L =(uint8_t)(((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 0) * 4965.0 + 49650.0))&0xFF);
baxterja 4:9fd291254686 90 DAC0_DAT1L =(uint8_t)(((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 1) * 4965.0 + 49650.0))&0xFF);
baxterja 4:9fd291254686 91 DAC0_DAT2L =(uint8_t)(((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 2) * 4965.0 + 49650.0))&0xFF);
baxterja 4:9fd291254686 92 DAC0_DAT3L =(uint8_t)(((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 3) * 4965.0 + 49650.0))&0xFF);
baxterja 4:9fd291254686 93 DAC0_DAT4L =(uint8_t)(((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 4) * 4965.0 + 49650.0))&0xFF);
baxterja 4:9fd291254686 94 DAC0_DAT5L =(uint8_t)(((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 5) * 4965.0 + 49650.0))&0xFF);
baxterja 4:9fd291254686 95 DAC0_DAT6L =(uint8_t)(((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 6) * 4965.0 + 49650.0))&0xFF);
baxterja 4:9fd291254686 96 DAC0_DAT7L =(uint8_t)(((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 7) * 4965.0 + 49650.0))&0xFF);
baxterja 4:9fd291254686 97 DAC0_DAT8L =(uint8_t)(((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 8) * 4965.0 + 49650.0))&0xFF);
baxterja 4:9fd291254686 98 DAC0_DAT9L =(uint8_t)(((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 9) * 4965.0 + 49650.0))&0xFF);
baxterja 4:9fd291254686 99
baxterja 4:9fd291254686 100 DAC0_DAT0H =(uint8_t)((((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 0) * 4965.0 + 49650.0))>>8)&0x0F);
baxterja 4:9fd291254686 101 DAC0_DAT1H =(uint8_t)((((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 1) * 4965.0 + 49650.0))>>8)&0x0F);
baxterja 4:9fd291254686 102 DAC0_DAT2H =(uint8_t)((((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 2) * 4965.0 + 49650.0))>>8)&0x0F);
baxterja 4:9fd291254686 103 DAC0_DAT3H =(uint8_t)((((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 3) * 4965.0 + 49650.0))>>8)&0x0F);
baxterja 4:9fd291254686 104 DAC0_DAT4H =(uint8_t)((((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 4) * 4965.0 + 49650.0))>>8)&0x0F);
baxterja 4:9fd291254686 105 DAC0_DAT5H =(uint8_t)((((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 5) * 4965.0 + 49650.0))>>8)&0x0F);
baxterja 4:9fd291254686 106 DAC0_DAT6H =(uint8_t)((((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 6) * 4965.0 + 49650.0))>>8)&0x0F);
baxterja 4:9fd291254686 107 DAC0_DAT7H =(uint8_t)((((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 7) * 4965.0 + 49650.0))>>8)&0x0F);
baxterja 4:9fd291254686 108 DAC0_DAT8H =(uint8_t)((((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 8) * 4965.0 + 49650.0))>>8)&0x0F);
baxterja 4:9fd291254686 109 DAC0_DAT9H =(uint8_t)((((uint16_t) (cos(3.14159265359 * 2 * 10000 * .00001 * 9) * 4965.0 + 49650.0))>>8)&0x0F);
baxterja 4:9fd291254686 110 */
baxterja 4:9fd291254686 111 /*
baxterja 4:9fd291254686 112 DAC0_SR = 0x00;
baxterja 4:9fd291254686 113 SIM_SCGC2 |= SIM_SCGC2_DAC0_MASK;
baxterja 4:9fd291254686 114 SIM_SCGC6 |= SIM_SCGC2_DAC0_MASK;
baxterja 4:9fd291254686 115 DAC0_C0 = 0;
baxterja 4:9fd291254686 116 //DAC0_C0 |= DAC_C0_DACTRGSEL_MASK;
baxterja 4:9fd291254686 117 DAC0_C0 |= DAC_C0_DACEN_MASK ; //The DAC system is enabled.
baxterja 4:9fd291254686 118
baxterja 4:9fd291254686 119 DAC0_C1 = 0;
baxterja 4:9fd291254686 120 //DAC0_C0 |= DAC_C0_DACTRGSEL_MASK;
baxterja 4:9fd291254686 121 DAC0_C0 |= 0x80;//DAC_C0_DMAEN_MASK ;
baxterja 4:9fd291254686 122 DAC0_DAT0L = 0xFF;
baxterja 4:9fd291254686 123 DAC0_DAT0H = 0x00;
baxterja 4:9fd291254686 124 */
baxterja 4:9fd291254686 125 }
baxterja 4:9fd291254686 126
baxterja 3:a85b742be262 127 int main()
baxterja 3:a85b742be262 128 {
baxterja 4:9fd291254686 129 //DAC0_C2 =0;
baxterja 4:9fd291254686 130
baxterja 2:3771b3195c7b 131 led_blue = 1;
baxterja 2:3771b3195c7b 132 led_green = 1;
baxterja 2:3771b3195c7b 133 led_red = 1;
baxterja 3:a85b742be262 134 pre_compute_tables();
baxterja 3:a85b742be262 135
baxterja 2:3771b3195c7b 136
baxterja 4:9fd291254686 137 // t1.reset();
baxterja 4:9fd291254686 138 // for (int t = 0; t<500000; t++)
baxterja 4:9fd291254686 139 // {
baxterja 4:9fd291254686 140 // int input1 = 5000*cos(3.14159265359 * 2*10000*t*.00001)+2500;
baxterja 4:9fd291254686 141 // int input2 = 2500*sin(3.14159265359 * 2*10000*t*.00001)+2500;
baxterja 4:9fd291254686 142 // t1.start();
baxterja 4:9fd291254686 143 // filter100K(input1, input2);
baxterja 4:9fd291254686 144 // t1.stop();
baxterja 4:9fd291254686 145 // }
baxterja 4:9fd291254686 146 // printf("FINAL TIME: %f\n\r",t1.read());
baxterja 4:9fd291254686 147
baxterja 4:9fd291254686 148
baxterja 4:9fd291254686 149
baxterja 4:9fd291254686 150 // pc.baud(230400);
baxterja 2:3771b3195c7b 151 pc.printf("Starting...\r\n");
baxterja 4:9fd291254686 152
baxterja 2:3771b3195c7b 153
baxterja 2:3771b3195c7b 154 for(int i = 0; i < 86; i++)
baxterja 2:3771b3195c7b 155 {
baxterja 2:3771b3195c7b 156 if(NVIC_GetPriority((IRQn_Type) i) == 0) NVIC_SetPriority((IRQn_Type) i, 2);
baxterja 2:3771b3195c7b 157 }
baxterja 2:3771b3195c7b 158
baxterja 2:3771b3195c7b 159 // Give hardware associated with
baxterja 2:3771b3195c7b 160 // sampling the highest priority
baxterja 2:3771b3195c7b 161 NVIC_SetPriority(ADC1_IRQn,0);
baxterja 2:3771b3195c7b 162 NVIC_SetPriority(ADC0_IRQn,0);
baxterja 2:3771b3195c7b 163 NVIC_SetPriority(PDB0_IRQn,0);
baxterja 2:3771b3195c7b 164 NVIC_SetPriority(DMA0_IRQn,0);
baxterja 2:3771b3195c7b 165 NVIC_SetPriority(DMA1_IRQn,0);
baxterja 2:3771b3195c7b 166 NVIC_SetPriority(DMA2_IRQn,0);
baxterja 2:3771b3195c7b 167
baxterja 2:3771b3195c7b 168 NVIC_SetPriority(ENET_1588_Timer_IRQn,1);
baxterja 2:3771b3195c7b 169 NVIC_SetPriority(ENET_Transmit_IRQn,1);
baxterja 2:3771b3195c7b 170 NVIC_SetPriority(ENET_Receive_IRQn,1);
baxterja 2:3771b3195c7b 171 NVIC_SetPriority(ENET_Error_IRQn,1);
baxterja 2:3771b3195c7b 172
baxterja 2:3771b3195c7b 173 //quad_init(); // initialize FTM2 quadrature decoder
baxterja 2:3771b3195c7b 174 //quad_invert(); // invert the direction of counting
baxterja 2:3771b3195c7b 175 adc_init(); // initialize ADCs (always initialize adc before dma)
baxterja 4:9fd291254686 176 setUpDac();
baxterja 4:9fd291254686 177 // DAC0_C1 |= 0x80;
baxterja 4:9fd291254686 178 // DAC0_DAT0L = 0xFF;
baxterja 4:9fd291254686 179 // DAC0_DAT0H = 0xFF;
baxterja 4:9fd291254686 180 // printf("Dac should be 3.3V");
baxterja 2:3771b3195c7b 181 dma_init(); // initializes DMAs
baxterja 2:3771b3195c7b 182 pdb_init(); // initialize PDB0 as the timer for ADCs and DMA2
baxterja 2:3771b3195c7b 183
baxterja 2:3771b3195c7b 184 // flash green led indicating startup complete
baxterja 2:3771b3195c7b 185 led_red = 1;
baxterja 2:3771b3195c7b 186 led_blue = 1;
baxterja 2:3771b3195c7b 187 led_green = 0;
baxterja 2:3771b3195c7b 188 pause_ms(500);
baxterja 2:3771b3195c7b 189 led_green = 1;
baxterja 2:3771b3195c7b 190 pause_ms(200);
baxterja 2:3771b3195c7b 191 led_green = 0;
baxterja 4:9fd291254686 192 pause_ms(500);
baxterja 2:3771b3195c7b 193 led_green = 1;
baxterja 2:3771b3195c7b 194 pdb_start();
baxterja 4:9fd291254686 195
baxterja 4:9fd291254686 196 //timer0.attach_us(&ISR_repeat, 10);
baxterja 2:3771b3195c7b 197 int startAddress = (int)&sample_array0[0];
baxterja 4:9fd291254686 198 //timer0.attach_us(&ISR_repeat, 100);
baxterja 4:9fd291254686 199 int destinationIndex = (DMA_TCD0_DADDR-startAddress)/2;
baxterja 4:9fd291254686 200 int currentIndex;
baxterja 4:9fd291254686 201 /*
baxterja 4:9fd291254686 202 printf("Dac Control0 Register: %X\n\r",DAC0_C0);
baxterja 4:9fd291254686 203 printf("Dac Control2 Register: %X\n\r",DAC0_C2);
baxterja 4:9fd291254686 204 printf("Dac Control1 Register: %X\n\r",DAC0_C1);
baxterja 4:9fd291254686 205 printf("Dac Control2 Register: %X\n\r\n\r",DAC0_C2);
baxterja 4:9fd291254686 206 //PDB0_DACINT0 = 0x257;
baxterja 4:9fd291254686 207 printf("Dac intc Register: %X\n\r",PDB0_DACINTC0);
baxterja 4:9fd291254686 208 printf("Dac int Register: %X\n\r",PDB0_DACINT0);
baxterja 4:9fd291254686 209 */
baxterja 2:3771b3195c7b 210 while (1)
baxterja 2:3771b3195c7b 211 {
baxterja 4:9fd291254686 212
baxterja 4:9fd291254686 213
baxterja 4:9fd291254686 214 destinationIndex = (DMA_TCD0_DADDR-startAddress)/2;
baxterja 4:9fd291254686 215 while (currentIndex!=destinationIndex)
baxterja 2:3771b3195c7b 216 {
baxterja 4:9fd291254686 217 filter100K(sample_array0[currentIndex], sample_array1[currentIndex]);
baxterja 4:9fd291254686 218 currentIndex++;
baxterja 4:9fd291254686 219 if (currentIndex>=2000)
baxterja 4:9fd291254686 220 currentIndex = 0;
baxterja 4:9fd291254686 221
baxterja 2:3771b3195c7b 222 }
baxterja 2:3771b3195c7b 223
baxterja 2:3771b3195c7b 224 }
baxterja 4:9fd291254686 225
baxterja 4:9fd291254686 226
baxterja 4:9fd291254686 227 }