Commit 61ff4824 authored by Dean Camera's avatar Dean Camera
Browse files

Changed AudioOutput demos to explicitly use timer 3 - the smaller USB AVRs...

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.
parent 864196c8
......@@ -108,19 +108,19 @@ void ProcessNextSample(void)
#if defined(AUDIO_OUT_MONO)
/* 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)
/* Load the dual 8-bit samples into the PWM timer channels */
OCRxA = ((uint8_t)LeftSample_8Bit ^ (1 << 7));
OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));
OCR3A = ((uint8_t)LeftSample_8Bit ^ (1 << 7));
OCR3B = ((uint8_t)RightSample_8Bit ^ (1 << 7));
#elif defined(AUDIO_OUT_PORTC)
/* Load the 8-bit mixed sample into PORTC */
PORTC = MixedSample_8Bit;
#else
uint8_t LEDMask = LEDS_NO_LEDS;
/* Make mixed sample value positive (absolute) */
if (MixedSample_8Bit < 0)
MixedSample_8Bit = -MixedSample_8Bit;
MixedSample_8Bit = abs(MixedSample_8Bit);
if (MixedSample_8Bit > ((128 / 8) * 1))
LEDMask |= LEDS_LED1;
......@@ -162,9 +162,9 @@ void EVENT_USB_Connect(void)
#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
/* PWM speaker timer initialization */
TCCRxA = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)
| (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP
TCCRxB = ((1 << WGMx2) | (1 << CSx0)); // Fast 8-Bit PWM, Fcpu speed
TCCR3A = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)
| (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP
TCCR3B = ((1 << WGM32) | (1 << CS30)); // Fast 8-Bit PWM, Fcpu speed
#endif
}
......@@ -178,7 +178,7 @@ void EVENT_USB_Disconnect(void)
#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
/* Stop the PWM generation timer */
TCCRxB = 0;
TCCR3B = 0;
#endif
#if defined(AUDIO_OUT_MONO)
......
......@@ -50,54 +50,7 @@
#include <LUFA/Drivers/USB/USB.h>
#include <LUFA/Drivers/USB/Class/Audio.h>
/* 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
/* Macros: */
/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
#define LEDMASK_USB_NOTREADY LEDS_LED1
......
......@@ -50,13 +50,13 @@
/* Macros: */
/** 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. */
#define SAMPLE_MAX_RANGE 0xFFFF
#define SAMPLE_MAX_RANGE 0xFFFF
/** 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. */
#define LEDMASK_USB_NOTREADY LEDS_LED1
......
......@@ -96,9 +96,9 @@ void EVENT_USB_Connect(void)
#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
/* PWM speaker timer initialization */
TCCRxA = ((1 << WGMx0) | (1 << COMxA1) | (1 << COMxA0)
| (1 << COMxB1) | (1 << COMxB0)); // Set on match, clear on TOP
TCCRxB = ((1 << WGMx2) | (1 << CSx0)); // Fast 8-Bit PWM, Fcpu speed
TCCR3A = ((1 << WGM30) | (1 << COM3A1) | (1 << COM3A0)
| (1 << COM3B1) | (1 << COM3B0)); // Set on match, clear on TOP
TCCR3B = ((1 << WGM32) | (1 << CS30)); // Fast 8-Bit PWM, Fcpu speed
#endif
}
......@@ -110,7 +110,7 @@ void EVENT_USB_Disconnect(void)
/* Stop the timers */
TCCR0B = 0;
#if (defined(AUDIO_OUT_MONO) || defined(AUDIO_OUT_STEREO))
TCCRxB = 0;
TCCR3B = 0;
#endif
#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);
/* 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)
/* Load the dual 8-bit samples into the PWM timer channels */
OCRxA = ((uint8_t)LeftSample_8Bit ^ (1 << 7));
OCRxB = ((uint8_t)RightSample_8Bit ^ (1 << 7));
OCR3A = ((uint8_t)LeftSample_8Bit ^ (1 << 7));
OCR3B = ((uint8_t)RightSample_8Bit ^ (1 << 7));
#elif defined(AUDIO_OUT_PORTC)
/* 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);
......
......@@ -48,53 +48,6 @@
#include <LUFA/Drivers/Board/LEDs.h>
/* 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. */
#define LEDMASK_USB_NOTREADY LEDS_LED1
......
......@@ -79,7 +79,7 @@ int main(void)
for (;;)
{
/* 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));
......
......@@ -31,19 +31,20 @@
* </tr>
* <tr>
* <td><b>USB Class:</b></td>
* <td>Human Interface Device (HID)</td>
* <td>Communications Device Class (CDC)</td>
* </tr>
* <tr>
* <td><b>USB Subclass:</b></td>
* <td>Keyboard</td>
* <td>Abstract Control Model (ACM)</td>
* </tr>
* <tr>
* <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>
* <td><b>Usable Speeds:</b></td>
* <td>Low Speed Mode, Full Speed Mode</td>
* <td>Full Speed Mode</td>
* </tr>
* </table>
*
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment