ReSpeaker Switch V02
Dependencies: mbed MbedJSONValue
main.cpp@0:f65ba5fb350e, 2017-06-05 (annotated)
- Committer:
- Arkadi
- Date:
- Mon Jun 05 14:30:13 2017 +0000
- Revision:
- 0:f65ba5fb350e
- Child:
- 1:2b61ae8e6f94
Respeaker Test Code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Arkadi | 0:f65ba5fb350e | 1 | //////////////////////////////////////// |
Arkadi | 0:f65ba5fb350e | 2 | // Tau_ReSpeaker_DSP_Test // |
Arkadi | 0:f65ba5fb350e | 3 | // Arkadiraf@gmail.com - 05/06/2017 // |
Arkadi | 0:f65ba5fb350e | 4 | //////////////////////////////////////// |
Arkadi | 0:f65ba5fb350e | 5 | /* |
Arkadi | 0:f65ba5fb350e | 6 | Receive byte from pc to reroute input outputs |
Arkadi | 0:f65ba5fb350e | 7 | b1xxxxxxx - define input port; b10000000 - port 0, b10000001 - port 1, b10000010 - port 2 etc , b10000011 - port 3 etc. |
Arkadi | 0:f65ba5fb350e | 8 | b0xxxxxxx - define output ports; b10000001 - port 1, b10000011 - port 1&2, b10000000 - non. |
Arkadi | 0:f65ba5fb350e | 9 | */ |
Arkadi | 0:f65ba5fb350e | 10 | |
Arkadi | 0:f65ba5fb350e | 11 | /* |
Arkadi | 0:f65ba5fb350e | 12 | Board : Nucleo STM32F446RE |
Arkadi | 0:f65ba5fb350e | 13 | Power Source : USB || Jumper 5V source from STM32 DSP board |
Arkadi | 0:f65ba5fb350e | 14 | */ |
Arkadi | 0:f65ba5fb350e | 15 | |
Arkadi | 0:f65ba5fb350e | 16 | /* |
Arkadi | 0:f65ba5fb350e | 17 | Nucleo board modification: |
Arkadi | 0:f65ba5fb350e | 18 | to use PH_0 as IO modify boards as followed: |
Arkadi | 0:f65ba5fb350e | 19 | SB54 and SB55 ON |
Arkadi | 0:f65ba5fb350e | 20 | SB16 and SB50 (MCO) OFF |
Arkadi | 0:f65ba5fb350e | 21 | http://www.st.com/content/ccc/resource/technical/document/user_manual/98/2e/fa/4b/e0/82/43/b7/DM00105823.pdf/files/DM00105823.pdf/jcr:content/translations/en.DM00105823.pdf |
Arkadi | 0:f65ba5fb350e | 22 | */ |
Arkadi | 0:f65ba5fb350e | 23 | |
Arkadi | 0:f65ba5fb350e | 24 | /* |
Arkadi | 0:f65ba5fb350e | 25 | Pinout: |
Arkadi | 0:f65ba5fb350e | 26 | PC - Serial 2 |
Arkadi | 0:f65ba5fb350e | 27 | PA_2 (Tx) --> STLINK |
Arkadi | 0:f65ba5fb350e | 28 | PA_3 (Rx) --> STLINK |
Arkadi | 0:f65ba5fb350e | 29 | |
Arkadi | 0:f65ba5fb350e | 30 | Switch - Serial 3 |
Arkadi | 0:f65ba5fb350e | 31 | PC_10 (Tx) --> SW_Rx |
Arkadi | 0:f65ba5fb350e | 32 | PC_11 (Rx) --> SW_Tx |
Arkadi | 0:f65ba5fb350e | 33 | |
Arkadi | 0:f65ba5fb350e | 34 | I2C_Bus |
Arkadi | 0:f65ba5fb350e | 35 | PB_8 --> SCL |
Arkadi | 0:f65ba5fb350e | 36 | PB_9 --> SDA |
Arkadi | 0:f65ba5fb350e | 37 | |
Arkadi | 0:f65ba5fb350e | 38 | Digital output : |
Arkadi | 0:f65ba5fb350e | 39 | PA_5 --> led (DigitalOut) |
Arkadi | 0:f65ba5fb350e | 40 | PA_10 --> SW_Trigger |
Arkadi | 0:f65ba5fb350e | 41 | |
Arkadi | 0:f65ba5fb350e | 42 | MUX: CD74HC4067 |
Arkadi | 0:f65ba5fb350e | 43 | PC_12 --> MUX_S0 |
Arkadi | 0:f65ba5fb350e | 44 | PD_2 --> MUX_S1 |
Arkadi | 0:f65ba5fb350e | 45 | PH_0 --> MUX_S2 |
Arkadi | 0:f65ba5fb350e | 46 | PH_1 --> MUX_S3 |
Arkadi | 0:f65ba5fb350e | 47 | |
Arkadi | 0:f65ba5fb350e | 48 | Speaker Switch : SN74LVC1G3157 |
Arkadi | 0:f65ba5fb350e | 49 | PB_2 --> EN_SPK_1 |
Arkadi | 0:f65ba5fb350e | 50 | PB_1 --> EN_SPK_2 |
Arkadi | 0:f65ba5fb350e | 51 | PB_15 --> EN_SPK_3 |
Arkadi | 0:f65ba5fb350e | 52 | PB_14 --> EN_SPK_4 |
Arkadi | 0:f65ba5fb350e | 53 | PB_13 --> EN_SPK_5 |
Arkadi | 0:f65ba5fb350e | 54 | |
Arkadi | 0:f65ba5fb350e | 55 | MIC Interrupts: |
Arkadi | 0:f65ba5fb350e | 56 | PC_15 --> INTER_1 |
Arkadi | 0:f65ba5fb350e | 57 | PC_14 --> INTER_2 |
Arkadi | 0:f65ba5fb350e | 58 | PA_15 --> INTER_3 |
Arkadi | 0:f65ba5fb350e | 59 | PA_14 --> INTER_4 |
Arkadi | 0:f65ba5fb350e | 60 | PA_13 --> INTER_5 |
Arkadi | 0:f65ba5fb350e | 61 | |
Arkadi | 0:f65ba5fb350e | 62 | Digital Input |
Arkadi | 0:f65ba5fb350e | 63 | PC_13 --> BTN (Blue) |
Arkadi | 0:f65ba5fb350e | 64 | |
Arkadi | 0:f65ba5fb350e | 65 | Analog Input |
Arkadi | 0:f65ba5fb350e | 66 | PA_0 --> A_DATA_1 |
Arkadi | 0:f65ba5fb350e | 67 | PA_1 --> A_DATA_2 |
Arkadi | 0:f65ba5fb350e | 68 | PA_4 --> A_DATA_3 |
Arkadi | 0:f65ba5fb350e | 69 | PB_0 --> A_DATA_4 |
Arkadi | 0:f65ba5fb350e | 70 | PC_1 --> A_DATA_5 |
Arkadi | 0:f65ba5fb350e | 71 | |
Arkadi | 0:f65ba5fb350e | 72 | Analog Output |
Arkadi | 0:f65ba5fb350e | 73 | |
Arkadi | 0:f65ba5fb350e | 74 | |
Arkadi | 0:f65ba5fb350e | 75 | */ |
Arkadi | 0:f65ba5fb350e | 76 | |
Arkadi | 0:f65ba5fb350e | 77 | /////////////// |
Arkadi | 0:f65ba5fb350e | 78 | // Libraries // |
Arkadi | 0:f65ba5fb350e | 79 | /////////////// |
Arkadi | 0:f65ba5fb350e | 80 | #include "mbed.h" |
Arkadi | 0:f65ba5fb350e | 81 | #include "BufferedSerial.h" // solves issues of loosing data. alternative doing it yourself |
Arkadi | 0:f65ba5fb350e | 82 | |
Arkadi | 0:f65ba5fb350e | 83 | /////////////// |
Arkadi | 0:f65ba5fb350e | 84 | // #defines // |
Arkadi | 0:f65ba5fb350e | 85 | /////////////// |
Arkadi | 0:f65ba5fb350e | 86 | |
Arkadi | 0:f65ba5fb350e | 87 | #define DEBUG_MOD1 |
Arkadi | 0:f65ba5fb350e | 88 | |
Arkadi | 0:f65ba5fb350e | 89 | ///////////// |
Arkadi | 0:f65ba5fb350e | 90 | // Objects // |
Arkadi | 0:f65ba5fb350e | 91 | ///////////// |
Arkadi | 0:f65ba5fb350e | 92 | |
Arkadi | 0:f65ba5fb350e | 93 | // uart |
Arkadi | 0:f65ba5fb350e | 94 | BufferedSerial pc(USBTX, USBRX); |
Arkadi | 0:f65ba5fb350e | 95 | |
Arkadi | 0:f65ba5fb350e | 96 | // digital input |
Arkadi | 0:f65ba5fb350e | 97 | DigitalIn user_button(PC_13); |
Arkadi | 0:f65ba5fb350e | 98 | |
Arkadi | 0:f65ba5fb350e | 99 | // digital output |
Arkadi | 0:f65ba5fb350e | 100 | DigitalOut led(PA_5); |
Arkadi | 0:f65ba5fb350e | 101 | DigitalOut sw_trigger(PA_10); |
Arkadi | 0:f65ba5fb350e | 102 | |
Arkadi | 0:f65ba5fb350e | 103 | // MUX: CD74HC4067 |
Arkadi | 0:f65ba5fb350e | 104 | DigitalOut mux_s0(PC_12); |
Arkadi | 0:f65ba5fb350e | 105 | DigitalOut mux_s1(PD_2); |
Arkadi | 0:f65ba5fb350e | 106 | DigitalOut mux_s2(PH_0); |
Arkadi | 0:f65ba5fb350e | 107 | DigitalOut mux_s3(PH_1); |
Arkadi | 0:f65ba5fb350e | 108 | |
Arkadi | 0:f65ba5fb350e | 109 | // speaker switch |
Arkadi | 0:f65ba5fb350e | 110 | DigitalOut en_spk_1(PB_2); |
Arkadi | 0:f65ba5fb350e | 111 | DigitalOut en_spk_2(PB_1); |
Arkadi | 0:f65ba5fb350e | 112 | DigitalOut en_spk_3(PB_15); |
Arkadi | 0:f65ba5fb350e | 113 | DigitalOut en_spk_4(PB_14); |
Arkadi | 0:f65ba5fb350e | 114 | DigitalOut en_spk_5(PB_13); |
Arkadi | 0:f65ba5fb350e | 115 | |
Arkadi | 0:f65ba5fb350e | 116 | // MIC interrupts |
Arkadi | 0:f65ba5fb350e | 117 | DigitalOut inter_1(PC_15); |
Arkadi | 0:f65ba5fb350e | 118 | DigitalOut inter_2(PC_14); |
Arkadi | 0:f65ba5fb350e | 119 | DigitalOut inter_3(PA_15); |
Arkadi | 0:f65ba5fb350e | 120 | DigitalOut inter_4(PA_14); |
Arkadi | 0:f65ba5fb350e | 121 | DigitalOut inter_5(PA_13); |
Arkadi | 0:f65ba5fb350e | 122 | |
Arkadi | 0:f65ba5fb350e | 123 | // analog input |
Arkadi | 0:f65ba5fb350e | 124 | AnalogIn a_data_1(PA_0); |
Arkadi | 0:f65ba5fb350e | 125 | AnalogIn a_data_2(PA_1); |
Arkadi | 0:f65ba5fb350e | 126 | AnalogIn a_data_3(PA_4); |
Arkadi | 0:f65ba5fb350e | 127 | AnalogIn a_data_4(PB_0); |
Arkadi | 0:f65ba5fb350e | 128 | AnalogIn a_data_5(PC_1); |
Arkadi | 0:f65ba5fb350e | 129 | |
Arkadi | 0:f65ba5fb350e | 130 | /////////////// |
Arkadi | 0:f65ba5fb350e | 131 | // variables // |
Arkadi | 0:f65ba5fb350e | 132 | /////////////// |
Arkadi | 0:f65ba5fb350e | 133 | |
Arkadi | 0:f65ba5fb350e | 134 | uint8_t in_byte=0; |
Arkadi | 0:f65ba5fb350e | 135 | |
Arkadi | 0:f65ba5fb350e | 136 | /////////////// |
Arkadi | 0:f65ba5fb350e | 137 | // Functions // |
Arkadi | 0:f65ba5fb350e | 138 | /////////////// |
Arkadi | 0:f65ba5fb350e | 139 | |
Arkadi | 0:f65ba5fb350e | 140 | //////////////////////// |
Arkadi | 0:f65ba5fb350e | 141 | // Main Code Setup : // |
Arkadi | 0:f65ba5fb350e | 142 | //////////////////////// |
Arkadi | 0:f65ba5fb350e | 143 | int main() |
Arkadi | 0:f65ba5fb350e | 144 | { |
Arkadi | 0:f65ba5fb350e | 145 | pc.baud(57600); |
Arkadi | 0:f65ba5fb350e | 146 | #ifdef DEBUG_MOD1 |
Arkadi | 0:f65ba5fb350e | 147 | pc.printf("ReSpeaker Test \r\n"); |
Arkadi | 0:f65ba5fb350e | 148 | #endif |
Arkadi | 0:f65ba5fb350e | 149 | /////////////////////// |
Arkadi | 0:f65ba5fb350e | 150 | // Main Code Loop : // |
Arkadi | 0:f65ba5fb350e | 151 | /////////////////////// |
Arkadi | 0:f65ba5fb350e | 152 | while(1) { |
Arkadi | 0:f65ba5fb350e | 153 | // check button state |
Arkadi | 0:f65ba5fb350e | 154 | if (user_button) { |
Arkadi | 0:f65ba5fb350e | 155 | if (pc.readable()) { |
Arkadi | 0:f65ba5fb350e | 156 | in_byte=pc.getc(); |
Arkadi | 0:f65ba5fb350e | 157 | #ifdef DEBUG_MOD1 |
Arkadi | 0:f65ba5fb350e | 158 | pc.putc(in_byte); |
Arkadi | 0:f65ba5fb350e | 159 | #endif |
Arkadi | 0:f65ba5fb350e | 160 | // check if command of input or output |
Arkadi | 0:f65ba5fb350e | 161 | if ((bool)(in_byte & 0b10000000)) { // set input |
Arkadi | 0:f65ba5fb350e | 162 | mux_s0.write((bool)(in_byte & 0b00000001)); |
Arkadi | 0:f65ba5fb350e | 163 | mux_s1.write((bool)(in_byte & 0b00000010)); |
Arkadi | 0:f65ba5fb350e | 164 | mux_s2.write((bool)(in_byte & 0b00000100)); |
Arkadi | 0:f65ba5fb350e | 165 | mux_s3.write((bool)(in_byte & 0b00001000)); |
Arkadi | 0:f65ba5fb350e | 166 | } else { // set output |
Arkadi | 0:f65ba5fb350e | 167 | en_spk_1.write((bool)(in_byte & 0b00000001)); |
Arkadi | 0:f65ba5fb350e | 168 | en_spk_2.write((bool)(in_byte & 0b00000010)); |
Arkadi | 0:f65ba5fb350e | 169 | en_spk_3.write((bool)(in_byte & 0b00000100)); |
Arkadi | 0:f65ba5fb350e | 170 | en_spk_4.write((bool)(in_byte & 0b00001000)); |
Arkadi | 0:f65ba5fb350e | 171 | en_spk_5.write((bool)(in_byte & 0b00010000)); |
Arkadi | 0:f65ba5fb350e | 172 | } |
Arkadi | 0:f65ba5fb350e | 173 | } |
Arkadi | 0:f65ba5fb350e | 174 | } else { |
Arkadi | 0:f65ba5fb350e | 175 | // set default input / output |
Arkadi | 0:f65ba5fb350e | 176 | en_spk_1.write(1); |
Arkadi | 0:f65ba5fb350e | 177 | en_spk_2.write(1); |
Arkadi | 0:f65ba5fb350e | 178 | en_spk_3.write(1); |
Arkadi | 0:f65ba5fb350e | 179 | en_spk_4.write(1); |
Arkadi | 0:f65ba5fb350e | 180 | en_spk_5.write(1); |
Arkadi | 0:f65ba5fb350e | 181 | |
Arkadi | 0:f65ba5fb350e | 182 | // mux input |
Arkadi | 0:f65ba5fb350e | 183 | mux_s0.write(0); |
Arkadi | 0:f65ba5fb350e | 184 | mux_s1.write(0); |
Arkadi | 0:f65ba5fb350e | 185 | mux_s2.write(0); |
Arkadi | 0:f65ba5fb350e | 186 | mux_s3.write(0); |
Arkadi | 0:f65ba5fb350e | 187 | |
Arkadi | 0:f65ba5fb350e | 188 | } |
Arkadi | 0:f65ba5fb350e | 189 | }// end main loop |
Arkadi | 0:f65ba5fb350e | 190 | }// end main |
Arkadi | 0:f65ba5fb350e | 191 | |
Arkadi | 0:f65ba5fb350e | 192 | /////////////// |
Arkadi | 0:f65ba5fb350e | 193 | // Functions // |
Arkadi | 0:f65ba5fb350e | 194 | /////////////// |