Changed AudioOutput demos to explicitly use timer 3 - the smaller USB AVRs where timer 1 was needed instead did not have the endpoint size neccesary for good audio throughput anyway.

Fix Benito documentation indicating erronously that the project used the HID USB class instead of the CDC class.
pull/1469/head
Dean Camera 16 years ago
parent 864196c884
commit 61ff4824a9

@ -108,19 +108,19 @@ void ProcessNextSample(void)
#if defined(AUDIO_OUT_MONO) #if defined(AUDIO_OUT_MONO)
/* Load the sample into the PWM timer channel */ /* Load the sample into the PWM timer channel */
OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7)); OCR3A = ((uint8_t)MixedSample_8Bit ^ (1 << 7));
#elif defined(AUDIO_OUT_STEREO) #elif defined(AUDIO_OUT_STEREO)
/* Load the dual 8-bit samples into the PWM timer channels */ /* Load the dual 8-bit samples into the PWM timer channels */
OCRxA = ((uint8_t)LeftSample_8Bit ^ (1 << 7)); OCR3A = ((uint8_t)LeftSample_8Bit ^ (1 << 7));
OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7)); OCR3B = ((uint8_t)RightSample_8Bit ^ (1 << 7));
#elif defined(AUDIO_OUT_PORTC) #elif defined(AUDIO_OUT_PORTC)
/* Load the 8-bit mixed sample into PORTC */
PORTC = MixedSample_8Bit; PORTC = MixedSample_8Bit;
#else #else
uint8_t LEDMask = LEDS_NO_LEDS; uint8_t LEDMask = LEDS_NO_LEDS;
/* Make mixed sample value positive (absolute) */ /* Make mixed sample value positive (absolute) */
if (MixedSample_8Bit < 0) MixedSample_8Bit = abs(MixedSample_8Bit);
MixedSample_8Bit = -MixedSample_8Bit;
if (MixedSample_8Bit > ((128 / 8) * 1)) if (MixedSample_8Bit > ((128 / 8) * 1))
LEDMask |= LEDS_LED1; LEDMask |= LEDS_LED1;
@ -162,9 +162,9 @@ void EVENT_USB_Connect(void)
#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO)) #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
/* PWM speaker timer initialization */ /* PWM speaker timer initialization */
TCCRxA = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0) TCCR3A = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)
| (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP
TCCRxB = ((1 << WGMx2) | (1 << CSx0)); // Fast 8-Bit PWM, Fcpu speed TCCR3B = ((1 << WGM32) | (1 << CS30)); // Fast 8-Bit PWM, Fcpu speed
#endif #endif
} }
@ -178,7 +178,7 @@ void EVENT_USB_Disconnect(void)
#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO)) #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
/* Stop the PWM generation timer */ /* Stop the PWM generation timer */
TCCRxB = 0; TCCR3B = 0;
#endif #endif
#if defined(AUDIO_OUT_MONO) #if defined(AUDIO_OUT_MONO)

@ -50,54 +50,7 @@
#include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/USB/USB.h>
#include <LUFA/Drivers/USB/Class/Audio.h> #include <LUFA/Drivers/USB/Class/Audio.h>
/* Macros: */ /* Macros: */
#if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
#define TCCRxA TCCR3A
#define TCCRxB TCCR3B
#define OCRxA OCR3A
#define OCRxB OCR3B
#define WGMx0 WGM30
#define WGMx2 WGM32
#define COMxA1 COM3A1
#define COMxA0 COM3A0
#define COMxB1 COM3B1
#define COMxB0 COM3B0
#define CSx0 CS30
#else
/** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */
#define TCCRxA TCCR1A
/** Timer count register used for right channel PWM audio output */
#define TCCRxB TCCR1B
/** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */
#define OCRxA OCR1A
/** Timer compare register used for right channel PWM audio output */
#define OCRxB OCR1B
/** Timer control register mask used to select PWM mode */
#define WGMx0 WGM10
/** Timer control register mask used to select PWM mode */
#define WGMx2 WGM12
/** Timer control register mask used to set, clear or toggle channel output pin on match */
#define COMxA1 COM1A1
/** Timer control register mask used to set, clear or toggle channel output pin on match */
#define COMxA0 COM1A0
/** Timer control register mask used to set, clear or toggle channel output pin on match */
#define COMxB1 COM1B1
/** Timer control register mask used to set, clear or toggle channel output pin on match */
#define COMxB0 COM1B0
/** Timer control register mask used to start the timer at Fcpu clock rate */
#define CSx0 CS10
#endif
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
#define LEDMASK_USB_NOTREADY LEDS_LED1 #define LEDMASK_USB_NOTREADY LEDS_LED1

@ -50,13 +50,13 @@
/* Macros: */ /* Macros: */
/** ADC channel number for the microphone input. */ /** ADC channel number for the microphone input. */
#define MIC_IN_ADC_CHANNEL 2 #define MIC_IN_ADC_CHANNEL 2
/** Maximum ADC sample value for the microphone input. */ /** Maximum ADC sample value for the microphone input. */
#define SAMPLE_MAX_RANGE 0xFFFF #define SAMPLE_MAX_RANGE 0xFFFF
/** Maximum ADC range for the microphone input. */ /** Maximum ADC range for the microphone input. */
#define ADC_MAX_RANGE 0x3FF #define ADC_MAX_RANGE 0x3FF
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
#define LEDMASK_USB_NOTREADY LEDS_LED1 #define LEDMASK_USB_NOTREADY LEDS_LED1

@ -96,9 +96,9 @@ void EVENT_USB_Connect(void)
#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO)) #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
/* PWM speaker timer initialization */ /* PWM speaker timer initialization */
TCCRxA = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0) TCCR3A = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)
| (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP | (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP
TCCRxB = ((1 << WGMx2) | (1 << CSx0)); // Fast 8-Bit PWM, Fcpu speed TCCR3B = ((1 << WGM32) | (1 << CS30)); // Fast 8-Bit PWM, Fcpu speed
#endif #endif
} }
@ -110,7 +110,7 @@ void EVENT_USB_Disconnect(void)
/* Stop the timers */ /* Stop the timers */
TCCR0B = 0; TCCR0B = 0;
#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO)) #if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
TCCRxB = 0; TCCR3B = 0;
#endif #endif
#if defined(AUDIO_OUT_MONO) #if defined(AUDIO_OUT_MONO)
@ -215,11 +215,11 @@ void USB_Audio_Task(void)
int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1); int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);
/* Load the sample into the PWM timer channel */ /* Load the sample into the PWM timer channel */
OCRxA = ((uint8_t)MixedSample_8Bit ^ (1 << 7)); OCR3A = ((uint8_t)MixedSample_8Bit ^ (1 << 7));
#elif defined(AUDIO_OUT_STEREO) #elif defined(AUDIO_OUT_STEREO)
/* Load the dual 8-bit samples into the PWM timer channels */ /* Load the dual 8-bit samples into the PWM timer channels */
OCRxA = ((uint8_t)LeftSample_8Bit ^ (1 << 7)); OCR3A = ((uint8_t)LeftSample_8Bit ^ (1 << 7));
OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7)); OCR3B = ((uint8_t)RightSample_8Bit ^ (1 << 7));
#elif defined(AUDIO_OUT_PORTC) #elif defined(AUDIO_OUT_PORTC)
/* Mix the two channels together to produce a mono, 8-bit sample */ /* Mix the two channels together to produce a mono, 8-bit sample */
int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1); int8_t MixedSample_8Bit = (((int16_t)LeftSample_8Bit + (int16_t)RightSample_8Bit) >> 1);

@ -48,53 +48,6 @@
#include <LUFA/Drivers/Board/LEDs.h> #include <LUFA/Drivers/Board/LEDs.h>
/* Macros: */ /* Macros: */
#if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
#define TCCRxA TCCR3A
#define TCCRxB TCCR3B
#define OCRxA OCR3A
#define OCRxB OCR3B
#define WGMx0 WGM30
#define WGMx2 WGM32
#define COMxA1 COM3A1
#define COMxA0 COM3A0
#define COMxB1 COM3B1
#define COMxB0 COM3B0
#define CSx0 CS30
#else
/** Timer count register used for left channel PWM audio output (or mixed output in mono output mode) */
#define TCCRxA TCCR1A
/** Timer count register used for right channel PWM audio output */
#define TCCRxB TCCR1B
/** Timer compare register used for left channel PWM audio output (or mixed output in mono output mode) */
#define OCRxA OCR1A
/** Timer compare register used for right channel PWM audio output */
#define OCRxB OCR1B
/** Timer control register mask used to select PWM mode */
#define WGMx0 WGM10
/** Timer control register mask used to select PWM mode */
#define WGMx2 WGM12
/** Timer control register mask used to set, clear or toggle channel output pin on match */
#define COMxA1 COM1A1
/** Timer control register mask used to set, clear or toggle channel output pin on match */
#define COMxA0 COM1A0
/** Timer control register mask used to set, clear or toggle channel output pin on match */
#define COMxB1 COM1B1
/** Timer control register mask used to set, clear or toggle channel output pin on match */
#define COMxB0 COM1B0
/** Timer control register mask used to start the timer at Fcpu clock rate */
#define CSx0 CS10
#endif
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */ /** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
#define LEDMASK_USB_NOTREADY LEDS_LED1 #define LEDMASK_USB_NOTREADY LEDS_LED1

@ -79,7 +79,7 @@ int main(void)
for (;;) for (;;)
{ {
/* Echo bytes from the host to the target via the hardware USART */ /* Echo bytes from the host to the target via the hardware USART */
if (CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface)) if (CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface) > 0)
{ {
Serial_TxByte(CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface)); Serial_TxByte(CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface));

@ -31,19 +31,20 @@
* </tr> * </tr>
* <tr> * <tr>
* <td><b>USB Class:</b></td> * <td><b>USB Class:</b></td>
* <td>Human Interface Device (HID)</td> * <td>Communications Device Class (CDC)</td>
* </tr> * </tr>
* <tr> * <tr>
* <td><b>USB Subclass:</b></td> * <td><b>USB Subclass:</b></td>
* <td>Keyboard</td> * <td>Abstract Control Model (ACM)</td>
* </tr> * </tr>
* <tr> * <tr>
* <td><b>Relevant Standards:</b></td> * <td><b>Relevant Standards:</b></td>
* <td>USBIF HID Standard, USBIF HID Usage Tables</td> * <td>USBIF CDC Class Standard</td>
* <td>Arduino Bootloader Specification</td>
* </tr> * </tr>
* <tr> * <tr>
* <td><b>Usable Speeds:</b></td> * <td><b>Usable Speeds:</b></td>
* <td>Low Speed Mode, Full Speed Mode</td> * <td>Full Speed Mode</td>
* </tr> * </tr>
* </table> * </table>
* *

Loading…
Cancel
Save