Respeaker Test Code
Dependencies: BufferedSerial mbed
main.cpp@0:bfac05b2d50f, 2017-06-05 (annotated)
- Committer:
- Arkadi
- Date:
- Mon Jun 05 14:29:43 2017 +0000
- Revision:
- 0:bfac05b2d50f
Respeaker Test Code
Who changed what in which revision?
User | Revision | Line number | New 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 | } |