Fixed programming errors in the AVRISP-MKII project when the programming packet is...
[pub/USBasp.git] / Demos / Device / ClassDriver / AudioInput / AudioInput.c
index 54e70f6..9c9b79d 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2010.
+     Copyright (C) Dean Camera, 2011.
 
   dean [at] fourwalledcubicle [dot] com
 
   dean [at] fourwalledcubicle [dot] com
-      www.fourwalledcubicle.com
+           www.lufa-lib.org
 */
 
 /*
 */
 
 /*
-  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -63,8 +63,6 @@ int main(void)
 
        for (;;)
        {
 
        for (;;)
        {
-               ProcessNextSample();
-
                Audio_Device_USBTask(&Microphone_Audio_Interface);
                USB_USBTask();
        }
                Audio_Device_USBTask(&Microphone_Audio_Interface);
                USB_USBTask();
        }
@@ -91,17 +89,14 @@ void SetupHardware(void)
        ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_MUX_MASK);
 }
 
        ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | MIC_IN_ADC_MUX_MASK);
 }
 
-/** Processes the next audio sample by reading the last ADC conversion and writing it to the audio
- *  interface, each time the sample reload timer period elapses to give a constant sample rate.
- */
-void ProcessNextSample(void)
+/** ISR to handle the reloading of the data endpoint with the next sample. */
+ISR(TIMER0_COMPA_vect, ISR_BLOCK)
 {
 {
+       uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint();
+
        /* Check if the sample reload timer period has elapsed, and that the USB bus is ready for a new sample */
        /* Check if the sample reload timer period has elapsed, and that the USB bus is ready for a new sample */
-       if ((TIFR0 & (1 << OCF0A)) && Audio_Device_IsReadyForNextSample(&Microphone_Audio_Interface))
+       if (Audio_Device_IsReadyForNextSample(&Microphone_Audio_Interface))
        {
        {
-               /* Clear the sample reload timer compare flag, ready for the next interval */
-               TIFR0 |= (1 << OCF0A);
-               
                int16_t AudioSample;
 
                #if defined(USE_TEST_TONE)
                int16_t AudioSample;
 
                #if defined(USE_TEST_TONE)
@@ -126,6 +121,8 @@ void ProcessNextSample(void)
                
                Audio_Device_WriteSample16(&Microphone_Audio_Interface, AudioSample);
        }
                
                Audio_Device_WriteSample16(&Microphone_Audio_Interface, AudioSample);
        }
+
+       Endpoint_SelectEndpoint(PrevEndpoint);
 }
 
 /** Event handler for the library USB Connection event. */
 }
 
 /** Event handler for the library USB Connection event. */
@@ -134,7 +131,8 @@ void EVENT_USB_Device_Connect(void)
        LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
 
        /* Sample reload timer initialization */
        LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
 
        /* Sample reload timer initialization */
-       OCR0A   = (F_CPU / 8 / AUDIO_SAMPLE_FREQUENCY) - 1;
+       TIMSK0  = (1 << OCIE0A);
+       OCR0A   = ((F_CPU / 8 / AUDIO_SAMPLE_FREQUENCY) - 1);
        TCCR0A  = (1 << WGM01);  // CTC mode
        TCCR0B  = (1 << CS01);   // Fcpu/8 speed
 }
        TCCR0A  = (1 << WGM01);  // CTC mode
        TCCR0B  = (1 << CS01);   // Fcpu/8 speed
 }
@@ -158,8 +156,8 @@ void EVENT_USB_Device_ConfigurationChanged(void)
        LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
 }
 
        LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
 }
 
-/** Event handler for the library USB Unhandled Control Request event. */
-void EVENT_USB_Device_UnhandledControlRequest(void)
+/** Event handler for the library USB Control Request reception event. */
+void EVENT_USB_Device_ControlRequest(void)
 {
        Audio_Device_ProcessControlRequest(&Microphone_Audio_Interface);
 }
 {
        Audio_Device_ProcessControlRequest(&Microphone_Audio_Interface);
 }