ReSpeaker Switch V02

Dependencies:   mbed MbedJSONValue

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?

UserRevisionLine numberNew 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 ///////////////