Respeaker Test Code

Dependencies:   BufferedSerial mbed

Committer:
Arkadi
Date:
Mon Jun 05 14:29:43 2017 +0000
Revision:
0:bfac05b2d50f
Respeaker Test Code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Arkadi 0:bfac05b2d50f 1 ////////////////////////////////////////
Arkadi 0:bfac05b2d50f 2 // Tau_ReSpeaker_DSP_Test //
Arkadi 0:bfac05b2d50f 3 // Arkadiraf@gmail.com - 29/05/2017 //
Arkadi 0:bfac05b2d50f 4 ////////////////////////////////////////
Arkadi 0:bfac05b2d50f 5 /*
Arkadi 0:bfac05b2d50f 6 If button pressed --> generate sine wave else analog output = analog input
Arkadi 0:bfac05b2d50f 7 */
Arkadi 0:bfac05b2d50f 8
Arkadi 0:bfac05b2d50f 9 /*
Arkadi 0:bfac05b2d50f 10 Board : Nucleo STM32F446RE
Arkadi 0:bfac05b2d50f 11 Power Source : USB
Arkadi 0:bfac05b2d50f 12 */
Arkadi 0:bfac05b2d50f 13
Arkadi 0:bfac05b2d50f 14 /*
Arkadi 0:bfac05b2d50f 15 Pinout:
Arkadi 0:bfac05b2d50f 16 PC - Serial 2
Arkadi 0:bfac05b2d50f 17 PA_2 (Tx) --> STLINK
Arkadi 0:bfac05b2d50f 18 PA_3 (Rx) --> STLINK
Arkadi 0:bfac05b2d50f 19
Arkadi 0:bfac05b2d50f 20 Switch - Serial 3
Arkadi 0:bfac05b2d50f 21 PC_10 (Tx) --> SW_Rx
Arkadi 0:bfac05b2d50f 22 PC_11 (Rx) --> SW_Tx
Arkadi 0:bfac05b2d50f 23
Arkadi 0:bfac05b2d50f 24 I2C_Bus
Arkadi 0:bfac05b2d50f 25 PB_8 --> SCL
Arkadi 0:bfac05b2d50f 26 PB_9 --> SDA
Arkadi 0:bfac05b2d50f 27
Arkadi 0:bfac05b2d50f 28 Digital output
Arkadi 0:bfac05b2d50f 29 PA_5 --> led (DigitalOut)
Arkadi 0:bfac05b2d50f 30
Arkadi 0:bfac05b2d50f 31 Digital Input
Arkadi 0:bfac05b2d50f 32 PA_10 --> SW_Trigger
Arkadi 0:bfac05b2d50f 33 PC_13 --> BTN (Blue)
Arkadi 0:bfac05b2d50f 34
Arkadi 0:bfac05b2d50f 35 Analog Input
Arkadi 0:bfac05b2d50f 36 PA_0 --> SIG_IN_DSP
Arkadi 0:bfac05b2d50f 37
Arkadi 0:bfac05b2d50f 38 Analog Output
Arkadi 0:bfac05b2d50f 39 PA_4 --> SIG_OUT_DSP
Arkadi 0:bfac05b2d50f 40
Arkadi 0:bfac05b2d50f 41 */
Arkadi 0:bfac05b2d50f 42
Arkadi 0:bfac05b2d50f 43 ///////////////
Arkadi 0:bfac05b2d50f 44 // Libraries //
Arkadi 0:bfac05b2d50f 45 ///////////////
Arkadi 0:bfac05b2d50f 46 #include "mbed.h"
Arkadi 0:bfac05b2d50f 47 #include "BufferedSerial.h" // solves issues of loosing data. alternative doing it yourself
Arkadi 0:bfac05b2d50f 48
Arkadi 0:bfac05b2d50f 49 ///////////////
Arkadi 0:bfac05b2d50f 50 // #defines //
Arkadi 0:bfac05b2d50f 51 ///////////////
Arkadi 0:bfac05b2d50f 52
Arkadi 0:bfac05b2d50f 53 #define DEBUG_MOD1
Arkadi 0:bfac05b2d50f 54
Arkadi 0:bfac05b2d50f 55 // Sine generator
Arkadi 0:bfac05b2d50f 56 #define PI (3.141592653589793238462)
Arkadi 0:bfac05b2d50f 57 #define AMPLITUDE (1.0) // x * 3.3V
Arkadi 0:bfac05b2d50f 58 #define PHASE (PI * 1) // 2*pi is one period
Arkadi 0:bfac05b2d50f 59 #define RANGE (0x7FFF)
Arkadi 0:bfac05b2d50f 60 #define OFFSET (0x7FFF)
Arkadi 0:bfac05b2d50f 61 #define BUFFER_SIZE (360)
Arkadi 0:bfac05b2d50f 62
Arkadi 0:bfac05b2d50f 63 /////////////
Arkadi 0:bfac05b2d50f 64 // Objects //
Arkadi 0:bfac05b2d50f 65 /////////////
Arkadi 0:bfac05b2d50f 66
Arkadi 0:bfac05b2d50f 67 // uart
Arkadi 0:bfac05b2d50f 68 BufferedSerial pc(USBTX, USBRX);
Arkadi 0:bfac05b2d50f 69
Arkadi 0:bfac05b2d50f 70 // digital
Arkadi 0:bfac05b2d50f 71 DigitalIn user_button(PC_13);
Arkadi 0:bfac05b2d50f 72 DigitalIn sw_trigger(PA_10);
Arkadi 0:bfac05b2d50f 73 DigitalOut led(PA_5);
Arkadi 0:bfac05b2d50f 74
Arkadi 0:bfac05b2d50f 75 // analog
Arkadi 0:bfac05b2d50f 76 AnalogOut dsp_output(PA_4);
Arkadi 0:bfac05b2d50f 77 AnalogIn dsp_input(PA_0);
Arkadi 0:bfac05b2d50f 78
Arkadi 0:bfac05b2d50f 79 ///////////////
Arkadi 0:bfac05b2d50f 80 // variables //
Arkadi 0:bfac05b2d50f 81 ///////////////
Arkadi 0:bfac05b2d50f 82
Arkadi 0:bfac05b2d50f 83 // analog input
Arkadi 0:bfac05b2d50f 84 uint16_t adc_in=0;
Arkadi 0:bfac05b2d50f 85
Arkadi 0:bfac05b2d50f 86 // sin wave buffer
Arkadi 0:bfac05b2d50f 87 uint16_t buffer[BUFFER_SIZE];
Arkadi 0:bfac05b2d50f 88 uint16_t buffer_index=0;
Arkadi 0:bfac05b2d50f 89 ///////////////
Arkadi 0:bfac05b2d50f 90 // Functions //
Arkadi 0:bfac05b2d50f 91 ///////////////
Arkadi 0:bfac05b2d50f 92
Arkadi 0:bfac05b2d50f 93 // Create the sinewave buffer
Arkadi 0:bfac05b2d50f 94 void calculate_sinewave(void);
Arkadi 0:bfac05b2d50f 95
Arkadi 0:bfac05b2d50f 96 ////////////////////////
Arkadi 0:bfac05b2d50f 97 // Main Code Setup : //
Arkadi 0:bfac05b2d50f 98 ////////////////////////
Arkadi 0:bfac05b2d50f 99 int main()
Arkadi 0:bfac05b2d50f 100 {
Arkadi 0:bfac05b2d50f 101 pc.baud(57600);
Arkadi 0:bfac05b2d50f 102 #ifdef DEBUG_MOD1
Arkadi 0:bfac05b2d50f 103 pc.printf("ReSpeaker Test \r\n");
Arkadi 0:bfac05b2d50f 104 #endif
Arkadi 0:bfac05b2d50f 105 // calculate sine wave buffer
Arkadi 0:bfac05b2d50f 106 calculate_sinewave();
Arkadi 0:bfac05b2d50f 107
Arkadi 0:bfac05b2d50f 108 ///////////////////////
Arkadi 0:bfac05b2d50f 109 // Main Code Loop : //
Arkadi 0:bfac05b2d50f 110 ///////////////////////
Arkadi 0:bfac05b2d50f 111 while(1) {
Arkadi 0:bfac05b2d50f 112 // check button state
Arkadi 0:bfac05b2d50f 113 if (user_button) {
Arkadi 0:bfac05b2d50f 114 //adc_in=dsp_input.read_u16();
Arkadi 0:bfac05b2d50f 115 dsp_output.write_u16(dsp_input.read_u16()); //adc_in
Arkadi 0:bfac05b2d50f 116 } else {
Arkadi 0:bfac05b2d50f 117 // sinewave output
Arkadi 0:bfac05b2d50f 118 buffer_index++;
Arkadi 0:bfac05b2d50f 119 if (buffer_index>=BUFFER_SIZE) buffer_index=0;
Arkadi 0:bfac05b2d50f 120 dsp_output.write_u16(buffer[buffer_index]);
Arkadi 0:bfac05b2d50f 121 wait_us(1);
Arkadi 0:bfac05b2d50f 122 }
Arkadi 0:bfac05b2d50f 123 }
Arkadi 0:bfac05b2d50f 124 }
Arkadi 0:bfac05b2d50f 125
Arkadi 0:bfac05b2d50f 126 ///////////////
Arkadi 0:bfac05b2d50f 127 // Functions //
Arkadi 0:bfac05b2d50f 128 ///////////////
Arkadi 0:bfac05b2d50f 129
Arkadi 0:bfac05b2d50f 130 // Create the sinewave buffer
Arkadi 0:bfac05b2d50f 131 void calculate_sinewave(void)
Arkadi 0:bfac05b2d50f 132 {
Arkadi 0:bfac05b2d50f 133 for (int i = 0; i < BUFFER_SIZE; i++) {
Arkadi 0:bfac05b2d50f 134 double rads = (PI * i)/180.0; // Convert degree in radian
Arkadi 0:bfac05b2d50f 135 buffer[i] = (uint16_t)(AMPLITUDE * (RANGE * (cos(rads + PHASE))) + OFFSET);
Arkadi 0:bfac05b2d50f 136 }
Arkadi 0:bfac05b2d50f 137 }