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

Dependencies:   mbed

Committer:
mbed2f
Date:
Wed Jul 20 05:45:03 2011 +0000
Revision:
0:f2733793d0fd
Added Function to power down magic USB interface chip with new firmware

Hello my name is guitar reverse me and it is karaoke time

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed2f 0:f2733793d0fd 1 #include <mbed.h>
mbed2f 0:f2733793d0fd 2
mbed2f 0:f2733793d0fd 3 // Function to power down magic USB interface chip with new firmware
mbed2f 0:f2733793d0fd 4 #define USR_POWERDOWN (0x104)
mbed2f 0:f2733793d0fd 5 int semihost_powerdown() {
mbed2f 0:f2733793d0fd 6 uint32_t arg;
mbed2f 0:f2733793d0fd 7 return __semihost(USR_POWERDOWN, &arg);
mbed2f 0:f2733793d0fd 8 }
mbed2f 0:f2733793d0fd 9
mbed2f 0:f2733793d0fd 10 // If you don't need the PC host USB interface....
mbed2f 0:f2733793d0fd 11 // Power down magic USB interface chip - saves around 150mW
mbed2f 0:f2733793d0fd 12 // Needs new firmware (URL below) and USB cable not connected
mbed2f 0:f2733793d0fd 13 // http://mbed.org/users/simon/notebook/interface-powerdown/
mbed2f 0:f2733793d0fd 14 // Supply power to mbed using Vin pin
mbed2f 0:f2733793d0fd 15
mbed2f 0:f2733793d0fd 16
mbed2f 0:f2733793d0fd 17 // Boolean types
mbed2f 0:f2733793d0fd 18 #define TRUE 1
mbed2f 0:f2733793d0fd 19 #define FALSE 0
mbed2f 0:f2733793d0fd 20
mbed2f 0:f2733793d0fd 21 //#define NUM_SAMPLES 48000
mbed2f 0:f2733793d0fd 22 /* ADC for the microphone/input, DAC for the speaker/output */
mbed2f 0:f2733793d0fd 23 AnalogIn mic(p19);
mbed2f 0:f2733793d0fd 24 AnalogOut speaker(p18);
mbed2f 0:f2733793d0fd 25
mbed2f 0:f2733793d0fd 26 // Allocate a buffer to be used for the audio recording
mbed2f 0:f2733793d0fd 27 static const size_t BufferSize = 15 * 1066;
mbed2f 0:f2733793d0fd 28 static unsigned short Buffer[BufferSize];
mbed2f 0:f2733793d0fd 29 //int16_t Buffer[ 32768];
mbed2f 0:f2733793d0fd 30 //unsigned short Buffer[NUM_SAMPLES];
mbed2f 0:f2733793d0fd 31
mbed2f 0:f2733793d0fd 32
mbed2f 0:f2733793d0fd 33 int main(void)
mbed2f 0:f2733793d0fd 34 {
mbed2f 0:f2733793d0fd 35
mbed2f 0:f2733793d0fd 36 int result;
mbed2f 0:f2733793d0fd 37 result = semihost_powerdown();
mbed2f 0:f2733793d0fd 38 //int i;
mbed2f 0:f2733793d0fd 39 // for (i = 0; ; )
mbed2f 0:f2733793d0fd 40
mbed2f 0:f2733793d0fd 41 { unsigned short ReadSample = 0xFFFF;
mbed2f 0:f2733793d0fd 42 // Indices to track where the playback and recording should take place in the
mbed2f 0:f2733793d0fd 43 // audio buffer. The recording can occur one sample behind the current playback
mbed2f 0:f2733793d0fd 44 // index since it is no longer required.
mbed2f 0:f2733793d0fd 45 int Index = 0;
mbed2f 0:f2733793d0fd 46 // Reverse the direction the buffer is walked between each iteration to save memory
mbed2f 0:f2733793d0fd 47 int Direction = 1;
mbed2f 0:f2733793d0fd 48 // Have audio to playback
mbed2f 0:f2733793d0fd 49 int Playback = FALSE;
mbed2f 0:f2733793d0fd 50 // The amount of data to be recorded before starting reverse playback
mbed2f 0:f2733793d0fd 51 // NOTE: Probably want this to be configured at runtime via a knob, etc.
mbed2f 0:f2733793d0fd 52 //int ChunkSize = 9024;
mbed2f 0:f2733793d0fd 53 int ChunkSize = BufferSize;
mbed2f 0:f2733793d0fd 54 // Infinite loop of recording and reverse playback
mbed2f 0:f2733793d0fd 55 for (;;)
mbed2f 0:f2733793d0fd 56 {
mbed2f 0:f2733793d0fd 57 unsigned short PlaySample;
mbed2f 0:f2733793d0fd 58
mbed2f 0:f2733793d0fd 59 // Read out the sample from the buffer to be played back
mbed2f 0:f2733793d0fd 60 if (Playback)
mbed2f 0:f2733793d0fd 61 {
mbed2f 0:f2733793d0fd 62 PlaySample = Buffer[Index];
mbed2f 0:f2733793d0fd 63 speaker.write_u16(PlaySample);
mbed2f 0:f2733793d0fd 64 //i = (i+0) % NUM_SAMPLES;
mbed2f 0:f2733793d0fd 65
mbed2f 0:f2733793d0fd 66 //wait(0.2f);
mbed2f 0:f2733793d0fd 67 }
mbed2f 0:f2733793d0fd 68
mbed2f 0:f2733793d0fd 69 // Obtain current audio sample from the A/D converter.
mbed2f 0:f2733793d0fd 70 // NOTE: I am just faking these values in this sample with an incrementing value
mbed2f 0:f2733793d0fd 71 ReadSample = mic.read_u16();
mbed2f 0:f2733793d0fd 72
mbed2f 0:f2733793d0fd 73 // Record the sample into the buffer right where a space was freed up from the PlaySample read above
mbed2f 0:f2733793d0fd 74 Buffer[Index] = ReadSample += mic.read_u16();
mbed2f 0:f2733793d0fd 75
mbed2f 0:f2733793d0fd 76 // Increment the buffer pointer
mbed2f 0:f2733793d0fd 77 Index += Direction;
mbed2f 0:f2733793d0fd 78
mbed2f 0:f2733793d0fd 79 // Check to see if the chunk has been filled
mbed2f 0:f2733793d0fd 80 if (Index < 0)
mbed2f 0:f2733793d0fd 81 {
mbed2f 0:f2733793d0fd 82 // Now have a chunk to be played back
mbed2f 0:f2733793d0fd 83 Playback = TRUE;
mbed2f 0:f2733793d0fd 84 // Reverse the direction of playback and recording
mbed2f 0:f2733793d0fd 85 Direction *= -1;
mbed2f 0:f2733793d0fd 86 Index = 0;
mbed2f 0:f2733793d0fd 87 }
mbed2f 0:f2733793d0fd 88 else if (Index >= ChunkSize)
mbed2f 0:f2733793d0fd 89 {
mbed2f 0:f2733793d0fd 90 // Now have a chunk to be played back
mbed2f 0:f2733793d0fd 91 Playback = TRUE;
mbed2f 0:f2733793d0fd 92 // Reverse the direction of playback and recording
mbed2f 0:f2733793d0fd 93 Direction *= -1;
mbed2f 0:f2733793d0fd 94 Index = ChunkSize - 1;
mbed2f 0:f2733793d0fd 95 }
mbed2f 0:f2733793d0fd 96 }
mbed2f 0:f2733793d0fd 97 }
mbed2f 0:f2733793d0fd 98 }