Added Function to power down magic USB interface chip with new firmware Download firmware here http://mbed.org/users/simon/notebook/interface-powerdown/ http://mbed.org/media/uploads/simon/mbedmicrocontroller_experimentalpowerdown.if You need to power the mbed by vin or usb board such as cool components http://mbed.org/cookbook/Cool-Components-Workshop-Board Hello my name is guitar reverse me and it is karaoke time
main.cpp
- Committer:
- mbed2f
- Date:
- 2011-07-20
- Revision:
- 0:f2733793d0fd
File content as of revision 0:f2733793d0fd:
#include <mbed.h> // Function to power down magic USB interface chip with new firmware #define USR_POWERDOWN (0x104) int semihost_powerdown() { uint32_t arg; return __semihost(USR_POWERDOWN, &arg); } // If you don't need the PC host USB interface.... // Power down magic USB interface chip - saves around 150mW // Needs new firmware (URL below) and USB cable not connected // http://mbed.org/users/simon/notebook/interface-powerdown/ // Supply power to mbed using Vin pin // Boolean types #define TRUE 1 #define FALSE 0 //#define NUM_SAMPLES 48000 /* ADC for the microphone/input, DAC for the speaker/output */ AnalogIn mic(p19); AnalogOut speaker(p18); // Allocate a buffer to be used for the audio recording static const size_t BufferSize = 15 * 1066; static unsigned short Buffer[BufferSize]; //int16_t Buffer[ 32768]; //unsigned short Buffer[NUM_SAMPLES]; int main(void) { int result; result = semihost_powerdown(); //int i; // for (i = 0; ; ) { unsigned short ReadSample = 0xFFFF; // Indices to track where the playback and recording should take place in the // audio buffer. The recording can occur one sample behind the current playback // index since it is no longer required. int Index = 0; // Reverse the direction the buffer is walked between each iteration to save memory int Direction = 1; // Have audio to playback int Playback = FALSE; // The amount of data to be recorded before starting reverse playback // NOTE: Probably want this to be configured at runtime via a knob, etc. //int ChunkSize = 9024; int ChunkSize = BufferSize; // Infinite loop of recording and reverse playback for (;;) { unsigned short PlaySample; // Read out the sample from the buffer to be played back if (Playback) { PlaySample = Buffer[Index]; speaker.write_u16(PlaySample); //i = (i+0) % NUM_SAMPLES; //wait(0.2f); } // Obtain current audio sample from the A/D converter. // NOTE: I am just faking these values in this sample with an incrementing value ReadSample = mic.read_u16(); // Record the sample into the buffer right where a space was freed up from the PlaySample read above Buffer[Index] = ReadSample += mic.read_u16(); // Increment the buffer pointer Index += Direction; // Check to see if the chunk has been filled if (Index < 0) { // Now have a chunk to be played back Playback = TRUE; // Reverse the direction of playback and recording Direction *= -1; Index = 0; } else if (Index >= ChunkSize) { // Now have a chunk to be played back Playback = TRUE; // Reverse the direction of playback and recording Direction *= -1; Index = ChunkSize - 1; } } } }