Dependencies:   mbed-dsp mbed

Fork of DSP_200kHz by Mazzeo Research Group

Committer:
bmazzeo
Date:
Thu Feb 18 23:05:07 2016 +0000
Revision:
56:7e08cbc3a4f1
Parent:
55:2526b3317bc8
Child:
57:7b8c49e1c1f6
DMA ADC and DAC working;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:bb128f0e952f 1 #include "mbed.h"
timmey9 22:523e316cbe70 2
timmey9 52:5a40cc58c4c2 3 // Sampling
bmazzeo 53:83a90a47c1fd 4 #include "DMA_sampling/adc.h"
bmazzeo 54:1697dc574b96 5 #include "DMA_sampling/dac.h"
bmazzeo 55:2526b3317bc8 6 #include "DMA_sampling/pdb.h"
timmey9 22:523e316cbe70 7
timmey9 22:523e316cbe70 8 // for debug purposes
timmey9 18:b17ddeeb1c09 9 Serial pc(USBTX, USBRX);
timmey9 18:b17ddeeb1c09 10 DigitalOut led_red(LED_RED);
timmey9 18:b17ddeeb1c09 11 DigitalOut led_green(LED_GREEN);
timmey9 18:b17ddeeb1c09 12 DigitalOut led_blue(LED_BLUE);
timmey9 51:43143a3fc2d7 13
timmey9 52:5a40cc58c4c2 14 // defined in dma.cpp
timmey9 45:d591d138cdeb 15 extern int len;
timmey9 45:d591d138cdeb 16 extern uint16_t sample_array0[];
timmey9 45:d591d138cdeb 17 extern uint16_t sample_array1[];
timmey9 41:3e0623d81b9a 18
bmazzeo 54:1697dc574b96 19 extern uint16_t static_input_array0[];
bmazzeo 54:1697dc574b96 20 extern uint16_t static_input_array1[];
bmazzeo 54:1697dc574b96 21
bmazzeo 55:2526b3317bc8 22 extern uint16_t static_output_array0[];
bmazzeo 56:7e08cbc3a4f1 23 extern uint16_t output_array0[];
bmazzeo 55:2526b3317bc8 24
timmey9 22:523e316cbe70 25 using namespace std;
timmey9 17:2f978f823020 26
emilmont 7:65188f4a8c25 27 int main() {
timmey9 22:523e316cbe70 28 led_blue = 1;
timmey9 35:df40c4566826 29 led_green = 1;
timmey9 18:b17ddeeb1c09 30 led_red = 1;
timmey9 34:44cc9b76a507 31
timmey9 18:b17ddeeb1c09 32 pc.baud(230400);
timmey9 34:44cc9b76a507 33 pc.printf("Starting\r\n");
timmey9 27:8c2b30c855d1 34
bmazzeo 55:2526b3317bc8 35 pdb_init(); // Initalize PDB
bmazzeo 55:2526b3317bc8 36
bmazzeo 54:1697dc574b96 37 dac_init(); // initializes DAC
bmazzeo 54:1697dc574b96 38
timmey9 45:d591d138cdeb 39 adc_init(); // always initialize adc before dma
bmazzeo 53:83a90a47c1fd 40
bmazzeo 53:83a90a47c1fd 41 pc.printf("ADC Initialized\r\n");
bmazzeo 53:83a90a47c1fd 42
timmey9 51:43143a3fc2d7 43 dma_init(); // initializes DMAs
bmazzeo 55:2526b3317bc8 44 dma_reset(); // This clears any DMA triggers that may have gotten things into a different state
timmey9 45:d591d138cdeb 45
bmazzeo 54:1697dc574b96 46
timmey9 46:a015ebf4663b 47 led_green = 1;
timmey9 38:ec3b16c130d7 48
timmey9 40:bd6d8c35e822 49 pc.printf("\r\n\r\n\r\n");
timmey9 37:8bdc71f3e874 50
timmey9 34:44cc9b76a507 51 while(1) {
bmazzeo 54:1697dc574b96 52 //DMA_TCD2_CSR
bmazzeo 54:1697dc574b96 53 //int counter = 0;
bmazzeo 54:1697dc574b96 54 //pc.printf("Sample_array0[1]:%d\r\n",sample_array0[counter]);
bmazzeo 54:1697dc574b96 55 //ADC0_SC1A = 0x0C; //AIEN = 0, DIFF = 0, Channel = AD12 (PTB2)
bmazzeo 54:1697dc574b96 56 //ADC1_SC1A = 0x0E; //AIEN = 0, DIFF = 0, Channel = AD14 (PTB10)
bmazzeo 54:1697dc574b96 57 //while( (ADC0_SC1A&ADC_SC1_COCO_MASK)) {}
bmazzeo 54:1697dc574b96 58 //while( (ADC1_SC1A&ADC_SC1_COCO_MASK)) {}
bmazzeo 54:1697dc574b96 59 //pc.printf("ADC0_RA:%d\r\n", ADC0_RA);
bmazzeo 54:1697dc574b96 60 //pc.printf("ADC1_RA:%d\r\n", ADC1_RA);
bmazzeo 54:1697dc574b96 61
bmazzeo 54:1697dc574b96 62 //for(int i = 0; i < len; i++) pc.printf("A%i: %d\t %d\r\n",i,sample_array0[i],sample_array1[i]);
bmazzeo 54:1697dc574b96 63 //for(int i = 0; i < len; i++) pc.printf("B%i: %d\t %d\r\n",i,static_input_array0[i],static_input_array1[i]);
bmazzeo 54:1697dc574b96 64
bmazzeo 54:1697dc574b96 65 //wait_ms(1000);
bmazzeo 55:2526b3317bc8 66 /* int store_var = DMA_TCD2_CSR;
bmazzeo 54:1697dc574b96 67 if (store_var == 0x220)
bmazzeo 54:1697dc574b96 68 {
bmazzeo 54:1697dc574b96 69 DAC0_DAT0H = 0x0F;
bmazzeo 54:1697dc574b96 70 wait_us(10);
bmazzeo 54:1697dc574b96 71 //DMA_TCD0_CSR = 0x260;
bmazzeo 54:1697dc574b96 72 }
bmazzeo 54:1697dc574b96 73 if (store_var == 0x260)
bmazzeo 54:1697dc574b96 74 {
bmazzeo 54:1697dc574b96 75 DAC0_DAT0H = 0x00;
bmazzeo 54:1697dc574b96 76 wait_us(10);
bmazzeo 54:1697dc574b96 77 }
bmazzeo 54:1697dc574b96 78
bmazzeo 54:1697dc574b96 79 //int store_var = DMA_TCD0_CSR;
bmazzeo 55:2526b3317bc8 80 //pc.printf("DMA0: %x\r\n", DMA_TCD0_CSR);
bmazzeo 55:2526b3317bc8 81 //pc.printf("DMA1: %x\r\n", DMA_TCD1_CSR);
bmazzeo 55:2526b3317bc8 82 //pc.printf("DMA2: %x\r\n", DMA_TCD2_CSR);
bmazzeo 55:2526b3317bc8 83 //pc.printf("DMA3: %x\r\n", DMA_TCD3_CSR);
bmazzeo 55:2526b3317bc8 84
bmazzeo 55:2526b3317bc8 85 //for(int i = 0; i < len; i++) pc.printf("B%i: %d\t %d\r\n",i,static_input_array0[i],static_input_array1[i]);
bmazzeo 55:2526b3317bc8 86 for (int i = 0: i < len; i++)
bmazzeo 55:2526b3317bc8 87 {
bmazzeo 55:2526b3317bc8 88 static_output_array[i] = static_input_array0[i] >> 4;
bmazzeo 55:2526b3317bc8 89 }
bmazzeo 54:1697dc574b96 90
bmazzeo 54:1697dc574b96 91 //wait_us(100);
bmazzeo 55:2526b3317bc8 92 */
bmazzeo 55:2526b3317bc8 93 if(pc.readable() > 0) {
bmazzeo 55:2526b3317bc8 94 char temp = pc.getc();
bmazzeo 55:2526b3317bc8 95
bmazzeo 55:2526b3317bc8 96 switch(temp) {
bmazzeo 55:2526b3317bc8 97 case 'F': // clear the samples
bmazzeo 55:2526b3317bc8 98 case 'f':
bmazzeo 55:2526b3317bc8 99 for(int i = 0; i < len; i++) {sample_array0[i] = 0; sample_array1[i] = 0;}
bmazzeo 55:2526b3317bc8 100 pc.printf("Arrays cleared\r\n");
bmazzeo 55:2526b3317bc8 101 // then display the samples
bmazzeo 55:2526b3317bc8 102 break;
bmazzeo 55:2526b3317bc8 103 case 'S': // display what's been sampled
bmazzeo 55:2526b3317bc8 104 case 's':
bmazzeo 56:7e08cbc3a4f1 105 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]);
bmazzeo 55:2526b3317bc8 106 pc.printf("\r\n");
bmazzeo 55:2526b3317bc8 107 break;
bmazzeo 56:7e08cbc3a4f1 108
bmazzeo 56:7e08cbc3a4f1 109 case 'L': // Load output array
bmazzeo 56:7e08cbc3a4f1 110 case 'l':
bmazzeo 56:7e08cbc3a4f1 111 for(int i = 0; i < len; i++)
bmazzeo 56:7e08cbc3a4f1 112 {
bmazzeo 56:7e08cbc3a4f1 113 static_output_array0[i] = (uint32_t) i + 10;
bmazzeo 56:7e08cbc3a4f1 114 pc.printf("%i\r\n", static_output_array0[i]);
bmazzeo 56:7e08cbc3a4f1 115 }
bmazzeo 56:7e08cbc3a4f1 116 break;
bmazzeo 55:2526b3317bc8 117
bmazzeo 56:7e08cbc3a4f1 118 case 'D': // debug
bmazzeo 55:2526b3317bc8 119 case 'd':
bmazzeo 55:2526b3317bc8 120 pc.printf("DMA Status:\r\n");
bmazzeo 55:2526b3317bc8 121 pc.printf("DMA_TCD0_SOFF: %x\r\n", DMA_TCD0_SOFF);
bmazzeo 55:2526b3317bc8 122 pc.printf("DMA_TCD1_SOFF: %x\r\n", DMA_TCD1_SOFF);
bmazzeo 55:2526b3317bc8 123 pc.printf("DMA_TCD0_CITER_ELINKNO: %x\r\n", DMA_TCD0_CITER_ELINKNO);
bmazzeo 55:2526b3317bc8 124 pc.printf("DMA_TCD0_BITER_ELINKNO: %x\r\n", DMA_TCD0_BITER_ELINKNO);
bmazzeo 55:2526b3317bc8 125 pc.printf("DMA_TCD1_CITER_ELINKNO: %x\r\n", DMA_TCD1_CITER_ELINKNO);
bmazzeo 55:2526b3317bc8 126 pc.printf("DMA_TCD1_BITER_ELINKNO: %x\r\n", DMA_TCD1_BITER_ELINKNO);
bmazzeo 55:2526b3317bc8 127 pc.printf("DMA_TCD2_CITER_ELINKNO: %x\r\n", DMA_TCD2_CITER_ELINKNO);
bmazzeo 55:2526b3317bc8 128 pc.printf("DMA_TCD2_BITER_ELINKNO: %x\r\n", DMA_TCD2_BITER_ELINKNO);
bmazzeo 55:2526b3317bc8 129 pc.printf("DMA_TCD3_CITER_ELINKNO: %x\r\n", DMA_TCD3_CITER_ELINKNO);
bmazzeo 55:2526b3317bc8 130 pc.printf("DMA_TCD3_BITER_ELINKNO: %x\r\n", DMA_TCD3_BITER_ELINKNO);
bmazzeo 56:7e08cbc3a4f1 131 pc.printf("DMA_TCD4_CITER_ELINKNO: %x\r\n", DMA_TCD4_CITER_ELINKNO);
bmazzeo 56:7e08cbc3a4f1 132 pc.printf("DMA_TCD4_BITER_ELINKNO: %x\r\n", DMA_TCD4_BITER_ELINKNO);
bmazzeo 56:7e08cbc3a4f1 133 pc.printf("DMA_TCD5_CITER_ELINKNO: %x\r\n", DMA_TCD5_CITER_ELINKNO);
bmazzeo 56:7e08cbc3a4f1 134 pc.printf("DMA_TCD5_BITER_ELINKNO: %x\r\n", DMA_TCD5_BITER_ELINKNO);
bmazzeo 56:7e08cbc3a4f1 135 pc.printf("\r\n");
bmazzeo 56:7e08cbc3a4f1 136 //pc.printf("DAC0_DAT0H: %x\r\n", DAC0_DAT0H);
bmazzeo 56:7e08cbc3a4f1 137 //pc.printf("DAC0_DAT0L: %x\r\n", DAC0_DAT0L);
bmazzeo 56:7e08cbc3a4f1 138 pc.printf("DAC0_DAT0: %i\r\n", (DAC0_DAT0H << 8) | DAC0_DAT0L);
bmazzeo 56:7e08cbc3a4f1 139 pc.printf("DMA_TCD2_SADDR: %i\r\n", DMA_TCD2_SADDR);
bmazzeo 56:7e08cbc3a4f1 140 pc.printf("DMA_TCD2_DADDR: %i\r\n", DMA_TCD2_DADDR);
bmazzeo 56:7e08cbc3a4f1 141 pc.printf("DAC0_DAT0H: %i\r\n", (uint32_t) &DAC0_DAT0H);
bmazzeo 56:7e08cbc3a4f1 142 pc.printf("DAC0_DAT0L: %i\r\n", (uint32_t) &DAC0_DAT0L);
bmazzeo 56:7e08cbc3a4f1 143 //int ptr;
bmazzeo 56:7e08cbc3a4f1 144 //ptr = DMA_TCD2_SADDR;
bmazzeo 56:7e08cbc3a4f1 145 //ptr = DMA_TCD2_SADDR;
bmazzeo 56:7e08cbc3a4f1 146 //ptr = DMA_TCD2_SADDR;
bmazzeo 56:7e08cbc3a4f1 147 pc.printf("Value at SADDR: %i\r\n", *((uint32_t *)DMA_TCD2_SADDR));
bmazzeo 55:2526b3317bc8 148 break;
bmazzeo 54:1697dc574b96 149
bmazzeo 56:7e08cbc3a4f1 150 case 'A': // analog out
bmazzeo 56:7e08cbc3a4f1 151 case 'a':
bmazzeo 56:7e08cbc3a4f1 152 DAC0_DAT0H = 0x01;
bmazzeo 56:7e08cbc3a4f1 153 DAC0_DAT0L = 0x10;
bmazzeo 56:7e08cbc3a4f1 154 break;
bmazzeo 55:2526b3317bc8 155
bmazzeo 55:2526b3317bc8 156 // Programmable Delay Block debug
bmazzeo 55:2526b3317bc8 157 case 'B':
bmazzeo 55:2526b3317bc8 158 case 'b':
bmazzeo 55:2526b3317bc8 159 pc.printf("Started PDB...samples being taken\r\n");
bmazzeo 55:2526b3317bc8 160 pdb_start();
bmazzeo 55:2526b3317bc8 161 break;
bmazzeo 55:2526b3317bc8 162 case 'K':
bmazzeo 55:2526b3317bc8 163 case 'k':
bmazzeo 55:2526b3317bc8 164 pc.printf("Stopped PDB\r\n");
bmazzeo 55:2526b3317bc8 165 pdb_stop();
bmazzeo 55:2526b3317bc8 166 break;
bmazzeo 55:2526b3317bc8 167 case 'V':
bmazzeo 55:2526b3317bc8 168 case 'v':
bmazzeo 55:2526b3317bc8 169 pc.printf("PDB: %i\r\n",PDB0_CNT);
bmazzeo 55:2526b3317bc8 170 break;
bmazzeo 55:2526b3317bc8 171 }
bmazzeo 55:2526b3317bc8 172 }
bmazzeo 55:2526b3317bc8 173
bmazzeo 55:2526b3317bc8 174
timmey9 17:2f978f823020 175 }
timmey9 42:52a92a8d2cc7 176 }