From bd337aced3b1888373030878bf1a49367bc37ab5 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Wed, 20 Oct 2010 07:39:11 +0000 Subject: Added default test tone generation mode to the Device mode AudioInput demos. --- Demos/Device/ClassDriver/AudioInput/AudioInput.c | 33 ++++++++++++++++------ Demos/Device/ClassDriver/AudioInput/AudioInput.h | 1 + Demos/Device/ClassDriver/AudioInput/AudioInput.txt | 16 ++++++++--- Demos/Device/ClassDriver/AudioInput/makefile | 1 + 4 files changed, 38 insertions(+), 13 deletions(-) (limited to 'Demos/Device/ClassDriver') diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.c b/Demos/Device/ClassDriver/AudioInput/AudioInput.c index dc7a076e4..54e70f6b1 100644 --- a/Demos/Device/ClassDriver/AudioInput/AudioInput.c +++ b/Demos/Device/ClassDriver/AudioInput/AudioInput.c @@ -82,9 +82,10 @@ void SetupHardware(void) /* Hardware Initialization */ LEDs_Init(); - USB_Init(); + Buttons_Init(); ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32); ADC_SetupChannel(MIC_IN_ADC_CHANNEL); + USB_Init(); /* Start the ADC conversion in free running mode */ ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_MUX_MASK); @@ -100,15 +101,29 @@ void ProcessNextSample(void) { /* Clear the sample reload timer compare flag, ready for the next interval */ TIFR0 |= (1 << OCF0A); - - /* Audio sample is ADC value scaled to fit the entire range */ - int16_t AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult()); - - #if defined(MICROPHONE_BIASED_TO_HALF_RAIL) - /* Microphone is biased to half rail voltage, subtract the bias from the sample value */ - AudioSample -= (SAMPLE_MAX_RANGE / 2); + + int16_t AudioSample; + + #if defined(USE_TEST_TONE) + static uint8_t SquareWaveSampleCount; + static int16_t CurrentWaveValue; + + /* In test tone mode, generate a square wave at 1/256 of the sample rate */ + if (SquareWaveSampleCount++ == 0xFF) + CurrentWaveValue ^= 0x8000; + + /* Only generate audio if the board button is being pressed */ + AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0; + #else + /* Audio sample is ADC value scaled to fit the entire range */ + AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult()); + + #if defined(MICROPHONE_BIASED_TO_HALF_RAIL) + /* Microphone is biased to half rail voltage, subtract the bias from the sample value */ + AudioSample -= (SAMPLE_MAX_RANGE / 2); + #endif #endif - + Audio_Device_WriteSample16(&Microphone_Audio_Interface, AudioSample); } } diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.h b/Demos/Device/ClassDriver/AudioInput/AudioInput.h index 8ed6096f0..741a091d0 100644 --- a/Demos/Device/ClassDriver/AudioInput/AudioInput.h +++ b/Demos/Device/ClassDriver/AudioInput/AudioInput.h @@ -44,6 +44,7 @@ #include #include + #include #include #include #include diff --git a/Demos/Device/ClassDriver/AudioInput/AudioInput.txt b/Demos/Device/ClassDriver/AudioInput/AudioInput.txt index 830163f3b..fea31b66e 100644 --- a/Demos/Device/ClassDriver/AudioInput/AudioInput.txt +++ b/Demos/Device/ClassDriver/AudioInput/AudioInput.txt @@ -50,11 +50,13 @@ * basic USB Audio 1.0 drivers in all modern OSes (i.e. no special drivers * required). * - * On start-up the system will automatically enumerate and function - * as a USB microphone. Incoming audio from the ADC channel 1 will - * be sampled and sent to the host computer. + * On start-up the system will automatically enumerate and function as a + * USB microphone. By default, the demo will produce a square wave test tone + * when the board button is pressed. If USE_TEST_TONE is not defined in the + * project makefile, incoming audio from the ADC channel 1 will be sampled + * and sent to the host computer instead. * - * To use, connect a microphone to the ADC channel 1. + * When in microphone mode, connect a microphone to the ADC channel 2. * * Under Windows, if a driver request dialogue pops up, select the option * to automatically install the appropriate drivers. @@ -70,6 +72,12 @@ * Description: * * + * USE_TEST_TONE + * Makefile LUFA_OPTS + * When defined, this alters the demo to produce a square wave test tone when the first board button is pressed + * instead of sampling the board microphone. + * + * * MICROPHONE_BIASED_TO_HALF_RAIL * Makefile LUFA_OPTS * When defined, this alters the demo so that the half VCC bias of the microphone input is subtracted. diff --git a/Demos/Device/ClassDriver/AudioInput/makefile b/Demos/Device/ClassDriver/AudioInput/makefile index 8eda3c68b..3c26c97ed 100644 --- a/Demos/Device/ClassDriver/AudioInput/makefile +++ b/Demos/Device/ClassDriver/AudioInput/makefile @@ -123,6 +123,7 @@ LUFA_OPTS += -D USE_FLASH_DESCRIPTORS LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" LUFA_OPTS += -D MICROPHONE_BIASED_TO_HALF_RAIL +LUFA_OPTS += -D USE_TEST_TONE # Create the LUFA source path variables by including the LUFA root makefile -- cgit v1.2.3