ReSpeaker Switch V02

Dependencies:   mbed MbedJSONValue

main.cpp

Committer:
Arkadi
Date:
2017-06-05
Revision:
0:f65ba5fb350e
Child:
1:2b61ae8e6f94

File content as of revision 0:f65ba5fb350e:

////////////////////////////////////////
//      Tau_ReSpeaker_DSP_Test        //
//  Arkadiraf@gmail.com - 05/06/2017  //
////////////////////////////////////////
/*
 Receive byte from pc to reroute input outputs
 b1xxxxxxx - define input port; b10000000 - port 0,  b10000001 - port 1, b10000010 - port 2 etc , b10000011 - port 3 etc.
 b0xxxxxxx - define output ports; b10000001 - port 1,  b10000011 - port 1&2, b10000000 - non.
*/

/*
   Board : Nucleo STM32F446RE
   Power Source : USB || Jumper 5V source from STM32 DSP board
*/

/*
    Nucleo board modification:
    to use PH_0 as IO modify boards as followed:
    SB54 and SB55 ON
    SB16 and SB50 (MCO) OFF
    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 
*/

/*
    Pinout:
    PC - Serial 2
    PA_2 (Tx) --> STLINK
    PA_3 (Rx) --> STLINK

    Switch - Serial 3
    PC_10 (Tx) --> SW_Rx
    PC_11 (Rx) --> SW_Tx

    I2C_Bus
    PB_8 --> SCL
    PB_9 --> SDA

    Digital output :
    PA_5  --> led (DigitalOut)
    PA_10 --> SW_Trigger

    MUX: CD74HC4067
    PC_12 --> MUX_S0
    PD_2  --> MUX_S1
    PH_0  --> MUX_S2
    PH_1  --> MUX_S3

    Speaker Switch : SN74LVC1G3157
    PB_2  --> EN_SPK_1
    PB_1  --> EN_SPK_2
    PB_15 --> EN_SPK_3
    PB_14 --> EN_SPK_4
    PB_13 --> EN_SPK_5

    MIC Interrupts:
    PC_15 --> INTER_1
    PC_14 --> INTER_2
    PA_15 --> INTER_3
    PA_14 --> INTER_4
    PA_13 --> INTER_5

    Digital Input
    PC_13 --> BTN (Blue)

    Analog Input
    PA_0 --> A_DATA_1
    PA_1 --> A_DATA_2
    PA_4 --> A_DATA_3
    PB_0 --> A_DATA_4
    PC_1 --> A_DATA_5

    Analog Output


*/

///////////////
// Libraries //
///////////////
#include "mbed.h"
#include "BufferedSerial.h"  // solves issues of loosing data. alternative doing it yourself

///////////////
// #defines  //
///////////////

#define DEBUG_MOD1

/////////////
// Objects //
/////////////

// uart
BufferedSerial pc(USBTX, USBRX);

// digital input
DigitalIn user_button(PC_13);

// digital output
DigitalOut led(PA_5);
DigitalOut sw_trigger(PA_10);

// MUX: CD74HC4067
DigitalOut mux_s0(PC_12);
DigitalOut mux_s1(PD_2);
DigitalOut mux_s2(PH_0);
DigitalOut mux_s3(PH_1);

// speaker switch
DigitalOut en_spk_1(PB_2);
DigitalOut en_spk_2(PB_1);
DigitalOut en_spk_3(PB_15);
DigitalOut en_spk_4(PB_14);
DigitalOut en_spk_5(PB_13);

// MIC interrupts
DigitalOut inter_1(PC_15);
DigitalOut inter_2(PC_14);
DigitalOut inter_3(PA_15);
DigitalOut inter_4(PA_14);
DigitalOut inter_5(PA_13);

// analog input
AnalogIn a_data_1(PA_0);
AnalogIn a_data_2(PA_1);
AnalogIn a_data_3(PA_4);
AnalogIn a_data_4(PB_0);
AnalogIn a_data_5(PC_1);

///////////////
// variables //
///////////////

uint8_t in_byte=0;

///////////////
// Functions //
///////////////

////////////////////////
//  Main Code Setup : //
////////////////////////
int main()
{
    pc.baud(57600);
#ifdef DEBUG_MOD1
    pc.printf("ReSpeaker Test \r\n");
#endif
    ///////////////////////
    //  Main Code Loop : //
    ///////////////////////
    while(1) {
        // check button state
        if (user_button) {
            if (pc.readable()) {
                in_byte=pc.getc();
#ifdef DEBUG_MOD1
                pc.putc(in_byte);
#endif
                // check if command of input or output
                if ((bool)(in_byte & 0b10000000)) { // set input
                    mux_s0.write((bool)(in_byte & 0b00000001));
                    mux_s1.write((bool)(in_byte & 0b00000010));
                    mux_s2.write((bool)(in_byte & 0b00000100));
                    mux_s3.write((bool)(in_byte & 0b00001000));
                } else { // set output
                    en_spk_1.write((bool)(in_byte & 0b00000001));
                    en_spk_2.write((bool)(in_byte & 0b00000010));
                    en_spk_3.write((bool)(in_byte & 0b00000100));
                    en_spk_4.write((bool)(in_byte & 0b00001000));
                    en_spk_5.write((bool)(in_byte & 0b00010000));
                }
            }
        } else {
            // set default input / output
            en_spk_1.write(1);
            en_spk_2.write(1);
            en_spk_3.write(1);
            en_spk_4.write(1);
            en_spk_5.write(1);

            // mux input
            mux_s0.write(0);
            mux_s1.write(0);
            mux_s2.write(0);
            mux_s3.write(0);

        }
    }// end main loop
}// end main

///////////////
// Functions //
///////////////