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:
Thu Oct 29 17:15:20 2015 +0000
Revision:
2:3771b3195c7b
Parent:
1:f0a5690db73f
Child:
3:a85b742be262
Accessible Sample folder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
baxterja 2:3771b3195c7b 1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
baxterja 2:3771b3195c7b 2 *
baxterja 2:3771b3195c7b 3 * Pinout for FRDM-k64f
baxterja 2:3771b3195c7b 4 * J2
baxterja 2:3771b3195c7b 5 * X X
baxterja 2:3771b3195c7b 6 * X X
baxterja 2:3771b3195c7b 7 * X X
baxterja 2:3771b3195c7b 8 * J3 X X GND
baxterja 2:3771b3195c7b 9 * X X X X SCLK
baxterja 2:3771b3195c7b 10 * X X X X MISO
baxterja 2:3771b3195c7b 11 * X X X X MOSI
baxterja 2:3771b3195c7b 12 * X X X X CS
baxterja 2:3771b3195c7b 13 * X X GND X X
baxterja 2:3771b3195c7b 14 * GND X X X X
baxterja 2:3771b3195c7b 15 * GND X X
baxterja 2:3771b3195c7b 16 * 5Vin X X J1
baxterja 2:3771b3195c7b 17 * X X
baxterja 2:3771b3195c7b 18 * J4 X X motorA
baxterja 2:3771b3195c7b 19 * X X X X motorB
baxterja 2:3771b3195c7b 20 * mic1 X X X X
baxterja 2:3771b3195c7b 21 * mic2 X X X X
baxterja 2:3771b3195c7b 22 * X X X X
baxterja 2:3771b3195c7b 23 * X X quadA X X
baxterja 2:3771b3195c7b 24 * X X quadB X X
baxterja 2:3771b3195c7b 25 *
baxterja 2:3771b3195c7b 26 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
baxterja 2:3771b3195c7b 27 #include "mbed.h"
baxterja 2:3771b3195c7b 28 #include "pause.cpp"
baxterja 2:3771b3195c7b 29
baxterja 2:3771b3195c7b 30 // Sampling
baxterja 2:3771b3195c7b 31 #include "Sample/adc.h"
baxterja 2:3771b3195c7b 32 #include "Sample/pdb.h"
baxterja 2:3771b3195c7b 33 #include "Sample/quad.h"
baxterja 2:3771b3195c7b 34
baxterja 2:3771b3195c7b 35 #include "AngleEncoder.h"
baxterja 2:3771b3195c7b 36 #include "MotorControl.h"
baxterja 2:3771b3195c7b 37
baxterja 2:3771b3195c7b 38 // for debug purposes
baxterja 2:3771b3195c7b 39 Serial pc(USBTX, USBRX);
baxterja 2:3771b3195c7b 40 DigitalOut led_red(LED_RED);
baxterja 2:3771b3195c7b 41 DigitalOut led_green(LED_GREEN);
baxterja 2:3771b3195c7b 42 DigitalOut led_blue(LED_BLUE);
baxterja 2:3771b3195c7b 43 //DigitalIn switch1(PTA4);
baxterja 2:3771b3195c7b 44 //DigitalIn switch2(PTC6);
baxterja 2:3771b3195c7b 45 //DigitalOut TotalInd(PTC4);
baxterja 2:3771b3195c7b 46 //DigitalOut SampleInd(PTC5);
baxterja 2:3771b3195c7b 47
baxterja 2:3771b3195c7b 48 MotorControl motor(PTC2, PTA2, 2000, 25); // cw, ccw, period_us, safetyPeriod_us
baxterja 2:3771b3195c7b 49 AngleEncoder angle_encoder(PTD2, PTD3, PTD1, PTD0, 8, 0, 1000000); // mosi, miso, sclk, cs, bit_width, mode, hz
baxterja 2:3771b3195c7b 50
baxterja 2:3771b3195c7b 51 // defined in dma.cpp
baxterja 2:3771b3195c7b 52 extern int len;
baxterja 2:3771b3195c7b 53 extern uint16_t sample_array0[];
baxterja 2:3771b3195c7b 54 extern uint16_t sample_array1[];
baxterja 2:3771b3195c7b 55 extern uint16_t angle_array[];
baxterja 2:3771b3195c7b 56 extern bool dma_done;
baxterja 2:3771b3195c7b 57 extern bool dma_half_done;
baxterja 2:3771b3195c7b 58
baxterja 2:3771b3195c7b 59 int motorVal = 10;
baxterja 2:3771b3195c7b 60
baxterja 2:3771b3195c7b 61 // Declaration of functions
baxterja 2:3771b3195c7b 62 void output_data();
baxterja 2:3771b3195c7b 63
baxterja 2:3771b3195c7b 64 Timer t1;
baxterja 2:3771b3195c7b 65 using namespace std;
baxterja 2:3771b3195c7b 66
baxterja 2:3771b3195c7b 67 int main() {
baxterja 2:3771b3195c7b 68
baxterja 2:3771b3195c7b 69 led_blue = 1;
baxterja 2:3771b3195c7b 70 led_green = 1;
baxterja 2:3771b3195c7b 71 led_red = 1;
baxterja 2:3771b3195c7b 72
baxterja 2:3771b3195c7b 73 pc.baud(230400);
baxterja 2:3771b3195c7b 74 pc.printf("Starting...\r\n");
baxterja 2:3771b3195c7b 75
baxterja 2:3771b3195c7b 76 for(int i = 0; i < 86; i++)
baxterja 2:3771b3195c7b 77 {
baxterja 2:3771b3195c7b 78 if(NVIC_GetPriority((IRQn_Type) i) == 0) NVIC_SetPriority((IRQn_Type) i, 2);
baxterja 2:3771b3195c7b 79 }
baxterja 2:3771b3195c7b 80
baxterja 2:3771b3195c7b 81 // Give hardware associated with
baxterja 2:3771b3195c7b 82 // sampling the highest priority
baxterja 2:3771b3195c7b 83 NVIC_SetPriority(ADC1_IRQn,0);
baxterja 2:3771b3195c7b 84 NVIC_SetPriority(ADC0_IRQn,0);
baxterja 2:3771b3195c7b 85 NVIC_SetPriority(PDB0_IRQn,0);
baxterja 2:3771b3195c7b 86 NVIC_SetPriority(DMA0_IRQn,0);
baxterja 2:3771b3195c7b 87 NVIC_SetPriority(DMA1_IRQn,0);
baxterja 2:3771b3195c7b 88 NVIC_SetPriority(DMA2_IRQn,0);
baxterja 2:3771b3195c7b 89
baxterja 2:3771b3195c7b 90 NVIC_SetPriority(ENET_1588_Timer_IRQn,1);
baxterja 2:3771b3195c7b 91 NVIC_SetPriority(ENET_Transmit_IRQn,1);
baxterja 2:3771b3195c7b 92 NVIC_SetPriority(ENET_Receive_IRQn,1);
baxterja 2:3771b3195c7b 93 NVIC_SetPriority(ENET_Error_IRQn,1);
baxterja 2:3771b3195c7b 94
baxterja 2:3771b3195c7b 95 //quad_init(); // initialize FTM2 quadrature decoder
baxterja 2:3771b3195c7b 96 //quad_invert(); // invert the direction of counting
baxterja 2:3771b3195c7b 97 adc_init(); // initialize ADCs (always initialize adc before dma)
baxterja 2:3771b3195c7b 98 dma_init(); // initializes DMAs
baxterja 2:3771b3195c7b 99 pdb_init(); // initialize PDB0 as the timer for ADCs and DMA2
baxterja 2:3771b3195c7b 100
baxterja 2:3771b3195c7b 101 // flash green led indicating startup complete
baxterja 2:3771b3195c7b 102 led_red = 1;
baxterja 2:3771b3195c7b 103 led_blue = 1;
baxterja 2:3771b3195c7b 104 led_green = 0;
baxterja 2:3771b3195c7b 105 pause_ms(500);
baxterja 2:3771b3195c7b 106 led_green = 1;
baxterja 2:3771b3195c7b 107 pause_ms(200);
baxterja 2:3771b3195c7b 108 led_green = 0;
baxterja 2:3771b3195c7b 109 pause_ms(500);
baxterja 2:3771b3195c7b 110 led_green = 1;
baxterja 2:3771b3195c7b 111 pdb_start();
baxterja 2:3771b3195c7b 112 t1.start();
baxterja 2:3771b3195c7b 113 t1.reset();
baxterja 2:3771b3195c7b 114 int startAddress = (int)&sample_array0[0];
baxterja 2:3771b3195c7b 115 while (1)
baxterja 2:3771b3195c7b 116 {
baxterja 2:3771b3195c7b 117 if (t1.read()>2)
baxterja 2:3771b3195c7b 118 {
baxterja 2:3771b3195c7b 119 //pdb_start();
baxterja 2:3771b3195c7b 120 pc.printf("%i\t%i\t%i\r\n", sample_array0[1], sample_array1[1],(DMA_TCD0_DADDR-startAddress)/2);
baxterja 2:3771b3195c7b 121 t1.reset();
baxterja 2:3771b3195c7b 122 }
baxterja 2:3771b3195c7b 123 }
baxterja 2:3771b3195c7b 124 // while(1) {
baxterja 2:3771b3195c7b 125 // if(pc.readable() > 0) {
baxterja 2:3771b3195c7b 126 // char temp = pc.getc();
baxterja 2:3771b3195c7b 127 //
baxterja 2:3771b3195c7b 128 // switch(temp) {
baxterja 2:3771b3195c7b 129 // case '1': // run motor and sample
baxterja 2:3771b3195c7b 130 // {
baxterja 2:3771b3195c7b 131 // // wait for angle to set to zero
baxterja 2:3771b3195c7b 132 // led_blue = 0;
baxterja 2:3771b3195c7b 133 // while(!angle_encoder.set_zero()) {pc.printf("AngleNotSet");}
baxterja 2:3771b3195c7b 134 // quad_reset();
baxterja 2:3771b3195c7b 135 // led_blue = 1;
baxterja 2:3771b3195c7b 136 //
baxterja 2:3771b3195c7b 137 // // release mallet
baxterja 2:3771b3195c7b 138 // motor.releaseMallet();
baxterja 2:3771b3195c7b 139 //
baxterja 2:3771b3195c7b 140 // // wait for mallet to drop to certin point before beginning to sample
baxterja 2:3771b3195c7b 141 // /*
baxterja 2:3771b3195c7b 142 // led_red = 0;
baxterja 2:3771b3195c7b 143 // int angleVal;
baxterja 2:3771b3195c7b 144 // do {
baxterja 2:3771b3195c7b 145 // angleVal = angle_encoder.absolute_angle();
baxterja 2:3771b3195c7b 146 // }
baxterja 2:3771b3195c7b 147 // while(!(angleVal > 150 && angleVal < 400));
baxterja 2:3771b3195c7b 148 // led_red = 1;
baxterja 2:3771b3195c7b 149 // */
baxterja 2:3771b3195c7b 150 //
baxterja 2:3771b3195c7b 151 // // begin sampling
baxterja 2:3771b3195c7b 152 // pdb_start();
baxterja 2:3771b3195c7b 153 // //pause_us(TOTAL_SAMPLES*10);
baxterja 2:3771b3195c7b 154 // //while(!dma_done) {led_green = 0;}
baxterja 2:3771b3195c7b 155 // led_green = 1;
baxterja 2:3771b3195c7b 156 //
baxterja 2:3771b3195c7b 157 // // reset mallet
baxterja 2:3771b3195c7b 158 // motor.reset();
baxterja 2:3771b3195c7b 159 // output_data();
baxterja 2:3771b3195c7b 160 //
baxterja 2:3771b3195c7b 161 //
baxterja 2:3771b3195c7b 162 // led_red = 1;
baxterja 2:3771b3195c7b 163 // led_blue = 1;
baxterja 2:3771b3195c7b 164 // led_green = 1;
baxterja 2:3771b3195c7b 165 // }
baxterja 2:3771b3195c7b 166 // break;
baxterja 2:3771b3195c7b 167 //
baxterja 2:3771b3195c7b 168 // case '2':
baxterja 2:3771b3195c7b 169 // {
baxterja 2:3771b3195c7b 170 // motor.releaseMallet();
baxterja 2:3771b3195c7b 171 // pause(1);
baxterja 2:3771b3195c7b 172 //
baxterja 2:3771b3195c7b 173 // while(!angle_encoder.set_zero()) {}
baxterja 2:3771b3195c7b 174 // quad_reset();
baxterja 2:3771b3195c7b 175 //
baxterja 2:3771b3195c7b 176 // pdb_start();
baxterja 2:3771b3195c7b 177 // motor.clockwise(1);
baxterja 2:3771b3195c7b 178 // pause(1);
baxterja 2:3771b3195c7b 179 // motor.off();
baxterja 2:3771b3195c7b 180 // output_data();
baxterja 2:3771b3195c7b 181 //
baxterja 2:3771b3195c7b 182 // }
baxterja 2:3771b3195c7b 183 // break;
baxterja 2:3771b3195c7b 184 //
baxterja 2:3771b3195c7b 185 // case '3':
baxterja 2:3771b3195c7b 186 // {
baxterja 2:3771b3195c7b 187 // /*
baxterja 2:3771b3195c7b 188 // while(angleVar)
baxterja 2:3771b3195c7b 189 // {
baxterja 2:3771b3195c7b 190 // counter++;
baxterja 2:3771b3195c7b 191 // angleVar = angle_encoder.absolute_angle();
baxterja 2:3771b3195c7b 192 // angleVar -= motorVal;
baxterja 2:3771b3195c7b 193 // if(angleVar == 0x00ff0000) {} // do nothing
baxterja 2:3771b3195c7b 194 // //else if(angleVar > 340) motorB.pulsewidth_us(8000); // max speed
baxterja 2:3771b3195c7b 195 // else if(angleVar < 43) {
baxterja 2:3771b3195c7b 196 // angleVar = 0; // exit loop
baxterja 2:3771b3195c7b 197 // //motorB.pulsewidth_us(0);} // min speed
baxterja 2:3771b3195c7b 198 // //else motorB.pulsewidth_us(angleVar*800/34);
baxterja 2:3771b3195c7b 199 // }
baxterja 2:3771b3195c7b 200 // motor.off();
baxterja 2:3771b3195c7b 201 // */
baxterja 2:3771b3195c7b 202 // }
baxterja 2:3771b3195c7b 203 // break;
baxterja 2:3771b3195c7b 204 //
baxterja 2:3771b3195c7b 205 //
baxterja 2:3771b3195c7b 206 // /********************************************************************
baxterja 2:3771b3195c7b 207 // * The code below is for testing and troubleshooting. Don't delete. *
baxterja 2:3771b3195c7b 208 // ********************************************************************/
baxterja 2:3771b3195c7b 209 // case 'B':
baxterja 2:3771b3195c7b 210 // case 'b':
baxterja 2:3771b3195c7b 211 // led_blue = !led_blue;
baxterja 2:3771b3195c7b 212 // pc.printf("Blue LED\r\n");
baxterja 2:3771b3195c7b 213 // break;
baxterja 2:3771b3195c7b 214 // case 'R':
baxterja 2:3771b3195c7b 215 // case 'r':
baxterja 2:3771b3195c7b 216 // led_red = !led_red;
baxterja 2:3771b3195c7b 217 // pc.printf("Red LED\r\n");
baxterja 2:3771b3195c7b 218 // break;
baxterja 2:3771b3195c7b 219 //
baxterja 2:3771b3195c7b 220 // // test sampling
baxterja 2:3771b3195c7b 221 // case 'Q':
baxterja 2:3771b3195c7b 222 // case 'q':
baxterja 2:3771b3195c7b 223 // quad_reset();
baxterja 2:3771b3195c7b 224 // pdb_start();
baxterja 2:3771b3195c7b 225 //
baxterja 2:3771b3195c7b 226 // while(!dma_half_done) {
baxterja 2:3771b3195c7b 227 // pc.printf("first half\r\n");
baxterja 2:3771b3195c7b 228 // pause_ms(1);
baxterja 2:3771b3195c7b 229 // }
baxterja 2:3771b3195c7b 230 //
baxterja 2:3771b3195c7b 231 // while(!dma_done) {
baxterja 2:3771b3195c7b 232 // pc.printf("second half\r\n");
baxterja 2:3771b3195c7b 233 // pause_ms(1);
baxterja 2:3771b3195c7b 234 // }
baxterja 2:3771b3195c7b 235 // for(int i = 0; i < len; i++) pc.printf("%i\t %i\t %i\r\n", sample_array0[i],sample_array1[i], angle_array[i]);
baxterja 2:3771b3195c7b 236 // pc.printf("\r\n");
baxterja 2:3771b3195c7b 237 //
baxterja 2:3771b3195c7b 238 // led_red = 1;
baxterja 2:3771b3195c7b 239 // led_green = 1;
baxterja 2:3771b3195c7b 240 // led_blue = 1;
baxterja 2:3771b3195c7b 241 //
baxterja 2:3771b3195c7b 242 //
baxterja 2:3771b3195c7b 243 // /*
baxterja 2:3771b3195c7b 244 // while(!angle_encoder.set_zero()) {}
baxterja 2:3771b3195c7b 245 // quad_reset();
baxterja 2:3771b3195c7b 246 //
baxterja 2:3771b3195c7b 247 //
baxterja 2:3771b3195c7b 248 // pdb_start();
baxterja 2:3771b3195c7b 249 // pause_us(TOTAL_SAMPLES*10);
baxterja 2:3771b3195c7b 250 // output_data();*/
baxterja 2:3771b3195c7b 251 //
baxterja 2:3771b3195c7b 252 // break;
baxterja 2:3771b3195c7b 253 // case 'W':
baxterja 2:3771b3195c7b 254 // case 'w': // reads 0 unless the counter is running
baxterja 2:3771b3195c7b 255 // pc.printf("PDB: %i\r\n",PDB0_CNT);
baxterja 2:3771b3195c7b 256 // break;
baxterja 2:3771b3195c7b 257 //
baxterja 2:3771b3195c7b 258 // // test angle encoder
baxterja 2:3771b3195c7b 259 // case 'A':
baxterja 2:3771b3195c7b 260 // case 'a': // set zero
baxterja 2:3771b3195c7b 261 // if(angle_encoder.set_zero()) {
baxterja 2:3771b3195c7b 262 // pc.printf("Zero set\r\n");
baxterja 2:3771b3195c7b 263 // }
baxterja 2:3771b3195c7b 264 // else {
baxterja 2:3771b3195c7b 265 // pc.printf("Zero NOT set\r\n");
baxterja 2:3771b3195c7b 266 // }
baxterja 2:3771b3195c7b 267 // break;
baxterja 2:3771b3195c7b 268 // case 'S':
baxterja 2:3771b3195c7b 269 // case 's': // perform "no operation", which returns 0xa5
baxterja 2:3771b3195c7b 270 // {
baxterja 2:3771b3195c7b 271 // pc.printf("NOP: 0x%02x\r\n", angle_encoder.nop());
baxterja 2:3771b3195c7b 272 // break;
baxterja 2:3771b3195c7b 273 // }
baxterja 2:3771b3195c7b 274 // case 'D':
baxterja 2:3771b3195c7b 275 // case 'd': // read absolute and relative angles
baxterja 2:3771b3195c7b 276 // {
baxterja 2:3771b3195c7b 277 // pc.printf("Angle: %i %i\r\n", angle_encoder.absolute_angle(), quad_read());
baxterja 2:3771b3195c7b 278 // break;
baxterja 2:3771b3195c7b 279 // }
baxterja 2:3771b3195c7b 280 // case 'F':
baxterja 2:3771b3195c7b 281 // case 'f':
baxterja 2:3771b3195c7b 282 // pc.printf("Quad Cnt: %i\r\n", quad_read());
baxterja 2:3771b3195c7b 283 // break;
baxterja 2:3771b3195c7b 284 //
baxterja 2:3771b3195c7b 285 // // test motor
baxterja 2:3771b3195c7b 286 // case 'Z':
baxterja 2:3771b3195c7b 287 // case 'z': // release the mallet
baxterja 2:3771b3195c7b 288 // motor.releaseMallet();
baxterja 2:3771b3195c7b 289 // break;
baxterja 2:3771b3195c7b 290 // case 'X':
baxterja 2:3771b3195c7b 291 // case 'x':
baxterja 2:3771b3195c7b 292 // motor.hardReset(motorVal);
baxterja 2:3771b3195c7b 293 // break;
baxterja 2:3771b3195c7b 294 // case '+':
baxterja 2:3771b3195c7b 295 // case '=':
baxterja 2:3771b3195c7b 296 // motorVal++;
baxterja 2:3771b3195c7b 297 // if(motorVal > 8000) motorVal = 8000;
baxterja 2:3771b3195c7b 298 // pc.printf("MotorVal: %i\r\n", motorVal);
baxterja 2:3771b3195c7b 299 // break;
baxterja 2:3771b3195c7b 300 // case '-':
baxterja 2:3771b3195c7b 301 // {
baxterja 2:3771b3195c7b 302 // motorVal--;
baxterja 2:3771b3195c7b 303 // if(motorVal < 0) motorVal = 0;
baxterja 2:3771b3195c7b 304 // pc.printf("MotorVal: %i\r\n", motorVal);
baxterja 2:3771b3195c7b 305 // break;
baxterja 2:3771b3195c7b 306 // }
baxterja 2:3771b3195c7b 307 // }
baxterja 2:3771b3195c7b 308 // }
baxterja 2:3771b3195c7b 309 // }
baxterja 2:3771b3195c7b 310 }
baxterja 2:3771b3195c7b 311
baxterja 2:3771b3195c7b 312 void output_data()
baxterja 2:3771b3195c7b 313 {
baxterja 2:3771b3195c7b 314 for (int n = 0; n < len; n++) {
baxterja 2:3771b3195c7b 315 pc.printf("%i\t%i\r\n", sample_array0[n], sample_array1[n]);
baxterja 2:3771b3195c7b 316
baxterja 2:3771b3195c7b 317 }
baxterja 2:3771b3195c7b 318 }