forked from mirror/qmk_firmware
Merge in latest trunk.
This commit is contained in:
@@ -683,7 +683,7 @@ clean_list :
|
||||
|
||||
doxygen:
|
||||
@echo Generating Project Documentation \($(TARGET)\)...
|
||||
@if ( doxygen Doxygen.conf 2>&1 | grep -v "warning: ignoring unsupported tag" ;); then \
|
||||
@if ( ( cat Doxygen.conf ; echo "HTML_STYLESHEET=$(LUFA_PATH)/LUFA/DoxygenPages/Style/Style.css" ) | doxygen - 2>&1 | grep -v "warning: ignoring unsupported tag" ;); then \
|
||||
exit 1; \
|
||||
fi;
|
||||
@echo Documentation Generation Complete.
|
||||
|
||||
@@ -188,7 +188,7 @@ CFLAGS += -fno-strict-aliasing
|
||||
CFLAGS += -Wall
|
||||
CFLAGS += -Wstrict-prototypes
|
||||
CFLAGS += -masm-addr-pseudos
|
||||
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
|
||||
#CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
|
||||
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
|
||||
CFLAGS += $(CSTANDARD)
|
||||
|
||||
@@ -211,7 +211,7 @@ CPPFLAGS += -fno-exceptions
|
||||
CPPFLAGS += -masm-addr-pseudos
|
||||
CPPFLAGS += -Wall
|
||||
CPPFLAGS += -Wundef
|
||||
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
|
||||
#CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
|
||||
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
|
||||
#CPPFLAGS += $(CSTANDARD)
|
||||
|
||||
@@ -225,7 +225,8 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
|
||||
# files -- see avr-libc docs [FIXME: not yet described there]
|
||||
# -listing-cont-lines: Sets the maximum number of continuation lines of hex
|
||||
# dump that will be displayed for a given single line of source input.
|
||||
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
|
||||
ASFLAGS = $(ADEFS)
|
||||
#ASFLAGS += -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
|
||||
|
||||
|
||||
#---------------- Linker Options ----------------
|
||||
@@ -456,7 +457,7 @@ clean_list :
|
||||
|
||||
doxygen:
|
||||
@echo Generating Project Documentation \($(TARGET)\)...
|
||||
@if ( doxygen Doxygen.conf 2>&1 | grep -v "warning: ignoring unsupported tag" ;); then \
|
||||
@if ( ( cat Doxygen.conf ; echo "HTML_STYLESHEET=$(LUFA_PATH)/LUFA/DoxygenPages/Style/Style.css" ) | doxygen - 2>&1 | grep -v "warning: ignoring unsupported tag" ;); then \
|
||||
exit 1; \
|
||||
fi;
|
||||
@echo Documentation Generation Complete.
|
||||
|
||||
@@ -675,7 +675,7 @@ clean_list :
|
||||
|
||||
doxygen:
|
||||
@echo Generating Project Documentation \($(TARGET)\)...
|
||||
@if ( doxygen Doxygen.conf 2>&1 | grep -v "warning: ignoring unsupported tag" ;); then \
|
||||
@if ( ( cat Doxygen.conf ; echo "HTML_STYLESHEET=$(LUFA_PATH)/LUFA/DoxygenPages/Style/Style.css" ) | doxygen - 2>&1 | grep -v "warning: ignoring unsupported tag" ;); then \
|
||||
exit 1; \
|
||||
fi;
|
||||
@echo Documentation Generation Complete.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Doxyfile 1.8.0
|
||||
# Doxyfile 1.8.1
|
||||
|
||||
# This file describes the settings to be used by the documentation system
|
||||
# doxygen (www.doxygen.org) for a project.
|
||||
@@ -563,12 +563,6 @@ MAX_INITIALIZER_LINES = 15
|
||||
|
||||
SHOW_USED_FILES = YES
|
||||
|
||||
# If the sources in your project are distributed over multiple directories
|
||||
# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
|
||||
# in the documentation. The default is NO.
|
||||
|
||||
SHOW_DIRECTORIES = YES
|
||||
|
||||
# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
|
||||
# This will remove the Files entry from the Quick Index and from the
|
||||
# Folder Tree View (if specified). The default is YES.
|
||||
@@ -960,12 +954,6 @@ HTML_COLORSTYLE_GAMMA = 80
|
||||
|
||||
HTML_TIMESTAMP = NO
|
||||
|
||||
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
|
||||
# files or namespaces will be aligned in HTML using tables. If set to
|
||||
# NO a bullet list will be used.
|
||||
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
|
||||
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
|
||||
# documentation will contain sections that can be hidden and shown after the
|
||||
# page has loaded. For this to work a browser that supports
|
||||
@@ -974,6 +962,17 @@ HTML_ALIGN_MEMBERS = YES
|
||||
|
||||
HTML_DYNAMIC_SECTIONS = YES
|
||||
|
||||
# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
|
||||
# entries shown in the various tree structured indices initially; the user
|
||||
# can expand and collapse entries dynamically later on. Doxygen will expand
|
||||
# the tree to such a level that at most the specified number of entries are
|
||||
# visible (unless a fully collapsed tree already exceeds this amount).
|
||||
# So setting the number of entries 1 will produce a full collapsed tree by
|
||||
# default. 0 is a special value representing an infinite number of entries
|
||||
# and will result in a full expanded tree by default.
|
||||
|
||||
HTML_INDEX_NUM_ENTRIES = 100
|
||||
|
||||
# If the GENERATE_DOCSET tag is set to YES, additional index files
|
||||
# will be generated that can be used as input for Apple's Xcode 3
|
||||
# integrated development environment, introduced with OSX 10.5 (Leopard).
|
||||
@@ -1152,11 +1151,6 @@ GENERATE_TREEVIEW = YES
|
||||
|
||||
ENUM_VALUES_PER_LINE = 1
|
||||
|
||||
# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
|
||||
# and Class Hierarchy pages using a tree view instead of an ordered list.
|
||||
|
||||
USE_INLINE_TREES = YES
|
||||
|
||||
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
|
||||
# used to set the initial width (in pixels) of the frame in which the tree
|
||||
# is shown.
|
||||
@@ -1727,7 +1721,7 @@ CALLER_GRAPH = NO
|
||||
|
||||
GRAPHICAL_HIERARCHY = NO
|
||||
|
||||
# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
|
||||
# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
|
||||
# then doxygen will show the dependencies a directory has on other directories
|
||||
# in a graphical way. The dependency relations are determined by the #include
|
||||
# relations between the files in the directories.
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
* - Modified the CDC Host demos to set a default CDC Line Encoding on enumerated devices
|
||||
* - Added Dataflash operational checks and aborts to all projects using the Dataflash to ensure it is working correctly before use
|
||||
* - Added new SerialToLCD user project contributed by Simon Foster
|
||||
* - Added new RESET_TOGGLES_LIBUSB_COMPAT compile time option to the AVRISP-MKII clone programmer project (thanks to Robert Spitzenpfeil)
|
||||
*
|
||||
* <b>Changed:</b>
|
||||
* - Core:
|
||||
|
||||
@@ -25,15 +25,15 @@
|
||||
* #include <avr/wdt.h>
|
||||
* #include <avr/io.h>
|
||||
* #include <util/delay.h>
|
||||
*
|
||||
*
|
||||
* #include <LUFA/Common/Common.h>
|
||||
* #include <LUFA/Drivers/USB/USB.h>
|
||||
*
|
||||
*
|
||||
* uint32_t Boot_Key ATTR_NO_INIT;
|
||||
*
|
||||
*
|
||||
* #define MAGIC_BOOT_KEY 0xDC42ACCA
|
||||
* #define BOOTLOADER_START_ADDRESS (FLASH_SIZE_BYTES - BOOTLOADER_SEC_SIZE_BYTES)
|
||||
*
|
||||
*
|
||||
* void Bootloader_Jump_Check(void) ATTR_INIT_SECTION(3);
|
||||
* void Bootloader_Jump_Check(void)
|
||||
* {
|
||||
@@ -44,18 +44,18 @@
|
||||
* ((void (*)(void))BOOTLOADER_START_ADDRESS)();
|
||||
* }
|
||||
* }
|
||||
*
|
||||
*
|
||||
* void Jump_To_Bootloader(void)
|
||||
* {
|
||||
* // If USB is used, detach from the bus and reset it
|
||||
* USB_Disable();
|
||||
*
|
||||
*
|
||||
* // Disable all interrupts
|
||||
* cli();
|
||||
*
|
||||
*
|
||||
* // Wait two seconds for the USB detachment to register on the host
|
||||
* Delay_MS(2000);
|
||||
*
|
||||
*
|
||||
* // Set the bootloader key to the magic value and force a reset
|
||||
* Boot_Key = MAGIC_BOOT_KEY;
|
||||
* wdt_enable(WDTO_250MS);
|
||||
|
||||
@@ -1,15 +1,35 @@
|
||||
<!--BEGIN GENERATE_TREEVIEW-->
|
||||
<span style="margin-right: 20px; float: right;">
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer" style="float:left !important;">
|
||||
$generatedby
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="$relpath$doxygen.png" alt="doxygen"/>
|
||||
</a>
|
||||
$doxygenversion
|
||||
</li>
|
||||
|
||||
<li class="footer">
|
||||
<a href="http://www.lufa-lib.org" title="LUFA Project Page">LUFA Project Page</a> | <a href="http://www.lufa-lib.org/support" title="LUFA Support List">Support Mailing List</a> | <a href="http://www.lufa-lib.org/donate" title="Donate to Support LUFA">Donate</a> | <a href="http://www.fourwalledcubicle.com" title="Four Walled Cubicle Website">Four Walled Cubicle</a> - LUFA, the Lightweight USB Framework for AVRs
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!--END GENERATE_TREEVIEW-->
|
||||
<!--BEGIN !GENERATE_TREEVIEW-->
|
||||
<hr class="footer"/>
|
||||
<span style="margin-right: 20px; float: right;">
|
||||
<a href="http://www.lufa-lib.org" title="LUFA Project Page">LUFA Project Page</a> | <a href="http://www.lufa-lib.org/support" title="LUFA Support List">Support Mailing List</a> | <a href="http://www.lufa-lib.org/donate" title="Donate to Support LUFA">Donate</a> | <a href="http://www.fourwalledcubicle.com" title="Four Walled Cubicle Website">Four Walled Cubicle</a> - LUFA, the Lightweight USB Framework for AVRs
|
||||
</span>
|
||||
<div class="footer">
|
||||
<span style="float: left;">
|
||||
$generatedby
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="$relpath$doxygen.png" alt="doxygen"/>
|
||||
</a>
|
||||
$doxygenversion
|
||||
</span>
|
||||
|
||||
<span style="margin-right: 20px; float: right;">
|
||||
<a href="http://www.lufa-lib.org" title="LUFA Project Page">LUFA Project Page</a> | <a href="http://www.lufa-lib.org/support" title="LUFA Support List">Support Mailing List</a> | <a href="http://www.lufa-lib.org/donate" title="Donate to Support LUFA">Donate</a> | <a href="http://www.fourwalledcubicle.com" title="Four Walled Cubicle Website">Four Walled Cubicle</a> - LUFA, the Lightweight USB Framework for AVRs
|
||||
</span>
|
||||
</div>
|
||||
<!--END !GENERATE_TREEVIEW-->
|
||||
</body>
|
||||
</html>
|
||||
@@ -43,14 +43,11 @@
|
||||
overflow:inherit;
|
||||
width:auto !important;
|
||||
}
|
||||
|
||||
pre.fragment
|
||||
|
||||
.fragment
|
||||
{
|
||||
overflow:visible;
|
||||
text-wrap:unrestricted;
|
||||
white-space:pre-wrap;
|
||||
word-wrap:break-word;
|
||||
}
|
||||
background-color: #FFFFFF !important;
|
||||
}
|
||||
}
|
||||
|
||||
body,table,div,p,dl
|
||||
@@ -81,9 +78,8 @@ div.contents table.memberdecls,.paramname
|
||||
|
||||
h1
|
||||
{
|
||||
font-size:30px;
|
||||
font-size:25px;
|
||||
margin-bottom:10px;
|
||||
padding:0 0 20px;
|
||||
}
|
||||
|
||||
h2
|
||||
@@ -228,22 +224,55 @@ dl.el
|
||||
margin-left:-1cm;
|
||||
}
|
||||
|
||||
.fragment
|
||||
{
|
||||
font-family:monospace, fixed;
|
||||
font-size:105%;
|
||||
pre.fragment {
|
||||
border: 1px solid #C4CFE5;
|
||||
background-color: #FBFCFD;
|
||||
padding: 4px 6px;
|
||||
margin: 4px 8px 4px 2px;
|
||||
overflow: auto;
|
||||
word-wrap: break-word;
|
||||
font-size: 9pt;
|
||||
line-height: 125%;
|
||||
font-family: monospace, fixed;
|
||||
font-size: 105%;
|
||||
}
|
||||
|
||||
pre.fragment
|
||||
{
|
||||
background-color:#F8F8F8;
|
||||
border:1px solid #C1CEE8;
|
||||
font-size:10pt;
|
||||
line-height:125%;
|
||||
margin:4px 8px 4px 20px;
|
||||
overflow:auto;
|
||||
padding:4px 6px;
|
||||
word-wrap:break-word;
|
||||
div.fragment {
|
||||
padding: 4px;
|
||||
margin: 4px;
|
||||
background-color: #FBFCFD;
|
||||
border: 1px solid #C4CFE5;
|
||||
}
|
||||
|
||||
div.line {
|
||||
font-family: monospace, fixed;
|
||||
font-size: 13px;
|
||||
line-height: 1.0;
|
||||
text-wrap: unrestricted;
|
||||
white-space: -moz-pre-wrap; /* Moz */
|
||||
white-space: -pre-wrap; /* Opera 4-6 */
|
||||
white-space: -o-pre-wrap; /* Opera 7 */
|
||||
white-space: pre-wrap; /* CSS3 */
|
||||
word-wrap: break-word; /* IE 5.5+ */
|
||||
text-indent: -53px;
|
||||
padding-left: 53px;
|
||||
padding-bottom: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
span.lineno {
|
||||
padding-right: 4px;
|
||||
text-align: right;
|
||||
border-right: 2px solid #0F0;
|
||||
background-color: #E8E8E8;
|
||||
white-space: pre;
|
||||
}
|
||||
span.lineno a {
|
||||
background-color: #D8D8D8;
|
||||
}
|
||||
|
||||
span.lineno a:hover {
|
||||
background-color: #C8C8C8;
|
||||
}
|
||||
|
||||
div.ah
|
||||
@@ -1090,4 +1119,4 @@ div.toc li.level3
|
||||
div.toc li.level4
|
||||
{
|
||||
margin-left:45px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,13 +68,13 @@
|
||||
* \code
|
||||
* // Initialize the button driver before first use
|
||||
* Buttons_Init();
|
||||
*
|
||||
*
|
||||
* printf("Waiting for button press...\r\n");
|
||||
*
|
||||
*
|
||||
* // Loop until a board button has been pressed
|
||||
* uint8_t ButtonPress;
|
||||
* while (!(ButtonPress = Buttons_GetStatus())) {};
|
||||
*
|
||||
*
|
||||
* // Display which button was pressed (assuming two board buttons)
|
||||
* printf("Button pressed: %s\r\n", (ButtonPress == BUTTONS_BUTTON1) ? "Button 1" : "Button 2");
|
||||
* \endcode
|
||||
|
||||
@@ -70,44 +70,44 @@
|
||||
* SPI_Init(SPI_SPEED_FCPU_DIV_2 | SPI_ORDER_MSB_FIRST | SPI_SCK_LEAD_FALLING |
|
||||
* SPI_SAMPLE_TRAILING | SPI_MODE_MASTER);
|
||||
* Dataflash_Init();
|
||||
*
|
||||
*
|
||||
* uint8_t WriteBuffer[DATAFLASH_PAGE_SIZE];
|
||||
* uint8_t ReadBuffer[DATAFLASH_PAGE_SIZE];
|
||||
*
|
||||
*
|
||||
* // Fill page write buffer with a repeating pattern
|
||||
* for (uint16_t i = 0; i < DATAFLASH_PAGE_SIZE; i++)
|
||||
* WriteBuffer[i] = (i & 0xFF);
|
||||
*
|
||||
*
|
||||
* // Must select the chip of interest first before operating on it
|
||||
* Dataflash_SelectChip(DATAFLASH_CHIP1);
|
||||
*
|
||||
*
|
||||
* // Write to the Dataflash's first internal memory buffer
|
||||
* printf("Writing data to first dataflash buffer:\r\n");
|
||||
* Dataflash_SendByte(DF_CMD_BUFF1WRITE);
|
||||
* Dataflash_SendAddressBytes(0, 0);
|
||||
*
|
||||
*
|
||||
* for (uint16_t i = 0; i < DATAFLASH_PAGE_SIZE; i++)
|
||||
* Dataflash_SendByte(WriteBuffer[i]);
|
||||
*
|
||||
*
|
||||
* // Commit the Dataflash's first memory buffer to the non-volatile FLASH memory
|
||||
* printf("Committing page to non-volatile memory page index 5:\r\n");
|
||||
* Dataflash_SendByte(DF_CMD_BUFF1TOMAINMEMWITHERASE);
|
||||
* Dataflash_SendAddressBytes(5, 0);
|
||||
* Dataflash_WaitWhileBusy();
|
||||
*
|
||||
*
|
||||
* // Read the page from non-volatile FLASH memory into the Dataflash's second memory buffer
|
||||
* printf("Reading data into second dataflash buffer:\r\n");
|
||||
* Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF2);
|
||||
* Dataflash_SendAddressBytes(5, 0);
|
||||
* Dataflash_WaitWhileBusy();
|
||||
*
|
||||
*
|
||||
* // Read the Dataflash's second internal memory buffer
|
||||
* Dataflash_SendByte(DF_CMD_BUFF2READ);
|
||||
* Dataflash_SendAddressBytes(0, 0);
|
||||
*
|
||||
*
|
||||
* for (uint16_t i = 0; i < DATAFLASH_PAGE_SIZE; i++)
|
||||
* ReadBuffer[i] = Dataflash_ReceiveByte();
|
||||
*
|
||||
*
|
||||
* // Deselect the chip after use
|
||||
* Dataflash_DeselectChip();
|
||||
* \endcode
|
||||
|
||||
@@ -67,22 +67,22 @@
|
||||
* \code
|
||||
* // Initialize the board Joystick driver before first use
|
||||
* Joystick_Init();
|
||||
*
|
||||
*
|
||||
* printf("Waiting for joystick movement...\r\n");
|
||||
*
|
||||
*
|
||||
* // Loop until a the joystick has been moved
|
||||
* uint8_t JoystickMovement;
|
||||
* while (!(JoystickMovement = Joystick_GetStatus())) {};
|
||||
*
|
||||
*
|
||||
* // Display which direction the joystick was moved in
|
||||
* printf("Joystick moved:\r\n");
|
||||
*
|
||||
*
|
||||
* if (JoystickMovement & (JOY_UP | JOY_DOWN))
|
||||
* printf("%s ", (JoystickMovement & JOY_UP) ? "Up" : "Down");
|
||||
*
|
||||
*
|
||||
* if (JoystickMovement & (JOY_LEFT | JOY_RIGHT))
|
||||
* printf("%s ", (JoystickMovement & JOY_LEFT) ? "Left" : "Right");
|
||||
*
|
||||
*
|
||||
* if (JoystickMovement & JOY_PRESS)
|
||||
* printf("Pressed");
|
||||
* \endcode
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
* \code
|
||||
* // Initialize the board LED driver before first use
|
||||
* LEDs_Init();
|
||||
*
|
||||
*
|
||||
* // Turn on each of the four LEDs in turn
|
||||
* LEDs_SetAllLEDs(LEDS_LED1);
|
||||
* Delay_MS(500);
|
||||
@@ -86,11 +86,11 @@
|
||||
* Delay_MS(500);
|
||||
* LEDs_SetAllLEDs(LEDS_LED4);
|
||||
* Delay_MS(500);
|
||||
*
|
||||
*
|
||||
* // Turn on all LEDs
|
||||
* LEDs_SetAllLEDs(LEDS_ALL_LEDS);
|
||||
* Delay_MS(1000);
|
||||
*
|
||||
*
|
||||
* // Turn on LED 1, turn off LED 2, leaving LEDs 3 and 4 in their current state
|
||||
* LEDs_ChangeLEDs((LEDS_LED1 | LEDS_LED2), LEDS_LED1);
|
||||
* \endcode
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
* // Initialize the ADC and board temperature sensor drivers before first use
|
||||
* ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_128);
|
||||
* Temperature_Init();
|
||||
*
|
||||
*
|
||||
* // Display converted temperature in degrees Celsius
|
||||
* printf("Current Temperature: %d Degrees\r\n", Temperature_GetTemperature());
|
||||
* \endcode
|
||||
|
||||
@@ -65,23 +65,23 @@
|
||||
* // Create the buffer structure and its underlying storage array
|
||||
* RingBuffer_t Buffer;
|
||||
* uint8_t BufferData[128];
|
||||
*
|
||||
*
|
||||
* // Initialize the buffer with the created storage array
|
||||
* RingBuffer_InitBuffer(&Buffer, BufferData, sizeof(BufferData));
|
||||
*
|
||||
*
|
||||
* // Insert some data into the buffer
|
||||
* RingBuffer_Insert(Buffer, 'H');
|
||||
* RingBuffer_Insert(Buffer, 'E');
|
||||
* RingBuffer_Insert(Buffer, 'L');
|
||||
* RingBuffer_Insert(Buffer, 'L');
|
||||
* RingBuffer_Insert(Buffer, 'O');
|
||||
*
|
||||
*
|
||||
* // Cache the number of stored bytes in the buffer
|
||||
* uint16_t BufferCount = RingBuffer_GetCount(&Buffer);
|
||||
*
|
||||
*
|
||||
* // Printer stored data length
|
||||
* printf("Buffer Length: %d, Buffer Data: \r\n", BufferCount);
|
||||
*
|
||||
*
|
||||
* // Print contents of the buffer one character at a time
|
||||
* while (BufferCount--)
|
||||
* putc(RingBuffer_Remove(&Buffer));
|
||||
|
||||
@@ -55,14 +55,14 @@
|
||||
* \code
|
||||
* // Initialize the ADC driver before first use
|
||||
* ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);
|
||||
*
|
||||
*
|
||||
* // Must setup the ADC channel to read beforehand
|
||||
* ADC_SetupChannel(1);
|
||||
*
|
||||
*
|
||||
* // Perform a single conversion of the ADC channel 1
|
||||
* ADC_GetChannelReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_CHANNEL1);
|
||||
* printf("Conversion Result: %d\r\n", ADC_GetResult());
|
||||
*
|
||||
*
|
||||
* // Start reading ADC channel 1 in free running (continuous conversion) mode
|
||||
* ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_CHANNEL1);
|
||||
* for (;;)
|
||||
|
||||
@@ -56,17 +56,17 @@
|
||||
* // Initialize the SPI driver before first use
|
||||
* SPI_Init(SPI_SPEED_FCPU_DIV_2 | SPI_ORDER_MSB_FIRST | SPI_SCK_LEAD_FALLING |
|
||||
* SPI_SAMPLE_TRAILING | SPI_MODE_MASTER);
|
||||
*
|
||||
*
|
||||
* // Send several bytes, ignoring the returned data
|
||||
* SPI_SendByte(0x01);
|
||||
* SPI_SendByte(0x02);
|
||||
* SPI_SendByte(0x03);
|
||||
*
|
||||
*
|
||||
* // Receive several bytes, sending a dummy 0x00 byte each time
|
||||
* uint8_t Byte1 = SPI_ReceiveByte();
|
||||
* uint8_t Byte2 = SPI_ReceiveByte();
|
||||
* uint8_t Byte3 = SPI_ReceiveByte();
|
||||
*
|
||||
*
|
||||
* // Send a byte, and store the received byte from the same transaction
|
||||
* uint8_t ResponseByte = SPI_TransferByte(0xDC);
|
||||
* \endcode
|
||||
|
||||
@@ -53,17 +53,17 @@
|
||||
* \code
|
||||
* // Initialize the Master SPI mode USART driver before first use, with 1Mbit baud
|
||||
* SerialSPI_Init((USART_SPI_SCK_LEAD_RISING | SPI_SAMPLE_LEADING | SPI_ORDER_MSB_FIRST), 1000000);
|
||||
*
|
||||
*
|
||||
* // Send several bytes, ignoring the returned data
|
||||
* SerialSPI_SendByte(0x01);
|
||||
* SerialSPI_SendByte(0x02);
|
||||
* SerialSPI_SendByte(0x03);
|
||||
*
|
||||
*
|
||||
* // Receive several bytes, sending a dummy 0x00 byte each time
|
||||
* uint8_t Byte1 = SerialSPI_ReceiveByte();
|
||||
* uint8_t Byte2 = SerialSPI_ReceiveByte();
|
||||
* uint8_t Byte3 = SerialSPI_ReceiveByte();
|
||||
*
|
||||
*
|
||||
* // Send a byte, and store the received byte from the same transaction
|
||||
* uint8_t ResponseByte = SerialSPI_TransferByte(0xDC);
|
||||
* \endcode
|
||||
|
||||
@@ -53,10 +53,10 @@
|
||||
* \code
|
||||
* // Initialize the serial USART driver before first use, with 9600 baud (and no double-speed mode)
|
||||
* Serial_Init(9600, false);
|
||||
*
|
||||
*
|
||||
* // Send a string through the USART
|
||||
* Serial_TxString("Test String\r\n");
|
||||
*
|
||||
*
|
||||
* // Receive a byte through the USART
|
||||
* uint8_t DataByte = Serial_RxByte();
|
||||
* \endcode
|
||||
|
||||
@@ -54,35 +54,35 @@
|
||||
* \code
|
||||
* // Initialize the TWI driver before first use at 200KHz
|
||||
* TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 200000));
|
||||
*
|
||||
*
|
||||
* // Start a write session to device at device address 0xA0, internal address 0xDC with a 10ms timeout
|
||||
* if (TWI_StartTransmission(0xA0 | TWI_ADDRESS_WRITE, 10) == TWI_ERROR_NoError)
|
||||
* {
|
||||
* TWI_SendByte(0xDC);
|
||||
*
|
||||
*
|
||||
* TWI_SendByte(0x01);
|
||||
* TWI_SendByte(0x02);
|
||||
* TWI_SendByte(0x03);
|
||||
*
|
||||
*
|
||||
* // Must stop transmission afterwards to release the bus
|
||||
* TWI_StopTransmission();
|
||||
* }
|
||||
*
|
||||
*
|
||||
* // Start a read session to device at address 0xA0, internal address 0xDC with a 10ms timeout
|
||||
* if (TWI_StartTransmission(0xA0 | TWI_ADDRESS_WRITE, 10) == TWI_ERROR_NoError)
|
||||
* {
|
||||
* TWI_SendByte(0xDC);
|
||||
* TWI_StopTransmission();
|
||||
*
|
||||
*
|
||||
* if (TWI_StartTransmission(0xA0 | TWI_ADDRESS_READ, 10) == TWI_ERROR_NoError)
|
||||
* {
|
||||
* uint8_t Byte1, Byte2, Byte3;
|
||||
*
|
||||
*
|
||||
* // Read three bytes, acknowledge after the third byte is received
|
||||
* TWI_ReceiveByte(&Byte1, false);
|
||||
* TWI_ReceiveByte(&Byte2, false);
|
||||
* TWI_ReceiveByte(&Byte3, true);
|
||||
*
|
||||
*
|
||||
* // Must stop transmission afterwards to release the bus
|
||||
* TWI_StopTransmission();
|
||||
* }
|
||||
@@ -93,18 +93,18 @@
|
||||
* \code
|
||||
* // Initialize the TWI driver before first use at 200KHz
|
||||
* TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 200000));
|
||||
*
|
||||
*
|
||||
* // Start a write session to device at device address 0xA0, internal address 0xDC with a 10ms timeout
|
||||
* uint8_t InternalWriteAddress = 0xDC;
|
||||
* uint8_t WritePacket[3] = {0x01, 0x02, 0x03};
|
||||
*
|
||||
*
|
||||
* TWI_WritePacket(0xA0, 10, &InternalWriteAddress, sizeof(InternalWriteAddress),
|
||||
* &WritePacket, sizeof(WritePacket);
|
||||
*
|
||||
*
|
||||
* // Start a read session to device at address 0xA0, internal address 0xDC with a 10ms timeout
|
||||
* uint8_t InternalReadAddress = 0xDC;
|
||||
* uint8_t ReadPacket[3];
|
||||
*
|
||||
*
|
||||
* TWI_ReadPacket(0xA0, 10, &InternalReadAddress, sizeof(InternalReadAddress),
|
||||
* &ReadPacket, sizeof(ReadPacket);
|
||||
* \endcode
|
||||
|
||||
@@ -53,17 +53,17 @@
|
||||
* SPI_Init(&SPIC,
|
||||
* SPI_SPEED_FCPU_DIV_2 | SPI_ORDER_MSB_FIRST | SPI_SCK_LEAD_FALLING |
|
||||
* SPI_SAMPLE_TRAILING | SPI_MODE_MASTER);
|
||||
*
|
||||
*
|
||||
* // Send several bytes, ignoring the returned data
|
||||
* SPI_SendByte(&SPIC, 0x01);
|
||||
* SPI_SendByte(&SPIC, 0x02);
|
||||
* SPI_SendByte(&SPIC, 0x03);
|
||||
*
|
||||
*
|
||||
* // Receive several bytes, sending a dummy 0x00 byte each time
|
||||
* uint8_t Byte1 = SPI_ReceiveByte(&SPIC);
|
||||
* uint8_t Byte2 = SPI_ReceiveByte(&SPIC);
|
||||
* uint8_t Byte3 = SPI_ReceiveByte(&SPIC);
|
||||
*
|
||||
*
|
||||
* // Send a byte, and store the received byte from the same transaction
|
||||
* uint8_t ResponseByte = SPI_TransferByte(&SPIC, 0xDC);
|
||||
* \endcode
|
||||
|
||||
@@ -53,17 +53,17 @@
|
||||
* \code
|
||||
* // Initialize the Master SPI mode USART driver before first use, with 1Mbit baud
|
||||
* SerialSPI_Init(&USARTD0, (USART_SPI_SCK_LEAD_RISING | USART_SPI_SAMPLE_LEADING | USART_SPI_ORDER_MSB_FIRST), 1000000);
|
||||
*
|
||||
*
|
||||
* // Send several bytes, ignoring the returned data
|
||||
* SerialSPI_SendByte(&USARTD0, 0x01);
|
||||
* SerialSPI_SendByte(&USARTD0, 0x02);
|
||||
* SerialSPI_SendByte(&USARTD0, 0x03);
|
||||
*
|
||||
*
|
||||
* // Receive several bytes, sending a dummy 0x00 byte each time
|
||||
* uint8_t Byte1 = SerialSPI_ReceiveByte(&USARTD);
|
||||
* uint8_t Byte2 = SerialSPI_ReceiveByte(&USARTD);
|
||||
* uint8_t Byte3 = SerialSPI_ReceiveByte(&USARTD);
|
||||
*
|
||||
*
|
||||
* // Send a byte, and store the received byte from the same transaction
|
||||
* uint8_t ResponseByte = SerialSPI_TransferByte(&USARTD0, 0xDC);
|
||||
* \endcode
|
||||
|
||||
@@ -53,10 +53,10 @@
|
||||
* \code
|
||||
* // Initialize the serial USART driver before first use, with 9600 baud (and no double-speed mode)
|
||||
* Serial_Init(&USARTD0, 9600, false);
|
||||
*
|
||||
*
|
||||
* // Send a string through the USART
|
||||
* Serial_TxString(&USARTD0, "Test String\r\n");
|
||||
*
|
||||
*
|
||||
* // Receive a byte through the USART
|
||||
* uint8_t DataByte = Serial_RxByte(&USARTD0);
|
||||
* \endcode
|
||||
|
||||
@@ -156,15 +156,21 @@ uint8_t MIDI_Host_Flush(USB_ClassInfo_MIDI_Host_t* const MIDIInterfaceInfo)
|
||||
uint8_t ErrorCode;
|
||||
|
||||
Pipe_SelectPipe(MIDIInterfaceInfo->Config.DataOUTPipe.Address);
|
||||
|
||||
Pipe_Unfreeze();
|
||||
|
||||
if (Pipe_BytesInPipe())
|
||||
{
|
||||
Pipe_ClearOUT();
|
||||
|
||||
if ((ErrorCode = Pipe_WaitUntilReady()) != PIPE_READYWAIT_NoError)
|
||||
return ErrorCode;
|
||||
{
|
||||
Pipe_Freeze();
|
||||
return ErrorCode;
|
||||
}
|
||||
}
|
||||
|
||||
Pipe_Freeze();
|
||||
|
||||
return PIPE_READYWAIT_NoError;
|
||||
}
|
||||
|
||||
@@ -177,13 +183,19 @@ uint8_t MIDI_Host_SendEventPacket(USB_ClassInfo_MIDI_Host_t* const MIDIInterface
|
||||
uint8_t ErrorCode;
|
||||
|
||||
Pipe_SelectPipe(MIDIInterfaceInfo->Config.DataOUTPipe.Address);
|
||||
|
||||
Pipe_Unfreeze();
|
||||
|
||||
if ((ErrorCode = Pipe_Write_Stream_LE(Event, sizeof(MIDI_EventPacket_t), NULL)) != PIPE_RWSTREAM_NoError)
|
||||
return ErrorCode;
|
||||
{
|
||||
Pipe_Freeze();
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
if (!(Pipe_IsReadWriteAllowed()))
|
||||
Pipe_ClearOUT();
|
||||
|
||||
Pipe_Freeze();
|
||||
|
||||
return PIPE_RWSTREAM_NoError;
|
||||
}
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
* <b>Single Stream Transfer Example:</b>
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Discard_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -98,13 +98,13 @@
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Endpoint_Discard_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -140,7 +140,7 @@
|
||||
* <b>Single Stream Transfer Example:</b>
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Null_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -151,13 +151,13 @@
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Endpoint_Null_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -199,7 +199,7 @@
|
||||
* \code
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
@@ -276,7 +276,7 @@
|
||||
* \code
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
@@ -289,14 +289,14 @@
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
* <b>Single Stream Transfer Example:</b>
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Pipe_Discard_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -96,13 +96,13 @@
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Pipe_Discard_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -137,7 +137,7 @@
|
||||
* <b>Single Stream Transfer Example:</b>
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Pipe_Null_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -148,13 +148,13 @@
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Pipe_Null_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -198,7 +198,7 @@
|
||||
* \code
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* NULL)) != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
@@ -211,14 +211,14 @@
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -279,7 +279,7 @@
|
||||
* \code
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* NULL)) != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
@@ -292,14 +292,14 @@
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#if defined(TEMPLATE_FUNC_NAME)
|
||||
|
||||
// cppcheck-suppress unusedFunction
|
||||
uint8_t TEMPLATE_FUNC_NAME (void* const Buffer,
|
||||
uint16_t Length)
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#if defined(TEMPLATE_FUNC_NAME)
|
||||
|
||||
// cppcheck-suppress unusedFunction
|
||||
uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer,
|
||||
uint16_t Length)
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#if defined(TEMPLATE_FUNC_NAME)
|
||||
|
||||
// cppcheck-suppress unusedFunction
|
||||
uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE const Buffer,
|
||||
uint16_t Length,
|
||||
uint16_t* const BytesProcessed)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#if defined(TEMPLATE_FUNC_NAME)
|
||||
|
||||
// cppcheck-suppress unusedFunction
|
||||
uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE const Buffer,
|
||||
uint16_t Length,
|
||||
uint16_t* const BytesProcessed)
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
* uint8_t* CurrDescriptor = &ConfigDescriptor[0]; // Pointing to the configuration header
|
||||
* USB_Descriptor_Configuration_Header_t* ConfigHeaderPtr = DESCRIPTOR_PCAST(CurrDescriptor,
|
||||
* USB_Descriptor_Configuration_Header_t);
|
||||
*
|
||||
*
|
||||
* // Can now access elements of the configuration header struct using the -> indirection operator
|
||||
* \endcode
|
||||
*/
|
||||
@@ -90,7 +90,7 @@
|
||||
* uint8_t* CurrDescriptor = &ConfigDescriptor[0]; // Pointing to the configuration header
|
||||
* USB_Descriptor_Configuration_Header_t ConfigHeader = DESCRIPTOR_CAST(CurrDescriptor,
|
||||
* USB_Descriptor_Configuration_Header_t);
|
||||
*
|
||||
*
|
||||
* // Can now access elements of the configuration header struct using the . operator
|
||||
* \endcode
|
||||
*/
|
||||
@@ -231,7 +231,7 @@
|
||||
* Usage Example:
|
||||
* \code
|
||||
* uint8_t EndpointSearcher(void* CurrentDescriptor); // Comparator Prototype
|
||||
*
|
||||
*
|
||||
* uint8_t EndpointSearcher(void* CurrentDescriptor)
|
||||
* {
|
||||
* if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
|
||||
@@ -239,8 +239,9 @@
|
||||
* else
|
||||
* return DESCRIPTOR_SEARCH_NotFound;
|
||||
* }
|
||||
*
|
||||
*
|
||||
* //...
|
||||
*
|
||||
* // After retrieving configuration descriptor:
|
||||
* if (USB_Host_GetNextDescriptorComp(&BytesRemaining, &CurrentConfigLoc, EndpointSearcher) ==
|
||||
* Descriptor_Search_Comp_Found)
|
||||
|
||||
@@ -108,19 +108,19 @@
|
||||
* index and language ID. This function MUST be overridden in the user application (added with full, identical
|
||||
* prototype and name so that the library can call it to retrieve descriptor data.
|
||||
*
|
||||
* \param[in] wValue The type of the descriptor to retrieve in the upper byte, and the index in the
|
||||
* lower byte (when more than one descriptor of the given type exists, such as the
|
||||
* case of string descriptors). The type may be one of the standard types defined
|
||||
* in the DescriptorTypes_t enum, or may be a class-specific descriptor type value.
|
||||
* \param[in] wIndex The language ID of the string to return if the \c wValue type indicates
|
||||
* \ref DTYPE_String, otherwise zero for standard descriptors, or as defined in a
|
||||
* class-specific standards.
|
||||
* \param[out] DescriptorAddress Pointer to the descriptor in memory. This should be set by the routine to
|
||||
* the address of the descriptor.
|
||||
* \param[out] MemoryAddressSpace A value from the \ref USB_DescriptorMemorySpaces_t enum to indicate the memory
|
||||
* space in which the descriptor is stored. This parameter does not exist when one
|
||||
* of the \c USE_*_DESCRIPTORS compile time options is used, or on architectures which
|
||||
* use a unified address space.
|
||||
* \param[in] wValue The type of the descriptor to retrieve in the upper byte, and the index in the
|
||||
* lower byte (when more than one descriptor of the given type exists, such as the
|
||||
* case of string descriptors). The type may be one of the standard types defined
|
||||
* in the DescriptorTypes_t enum, or may be a class-specific descriptor type value.
|
||||
* \param[in] wIndex The language ID of the string to return if the \c wValue type indicates
|
||||
* \ref DTYPE_String, otherwise zero for standard descriptors, or as defined in a
|
||||
* class-specific standards.
|
||||
* \param[out] DescriptorAddress Pointer to the descriptor in memory. This should be set by the routine to
|
||||
* the address of the descriptor.
|
||||
* \param[out] DescriptorMemorySpace A value from the \ref USB_DescriptorMemorySpaces_t enum to indicate the memory
|
||||
* space in which the descriptor is stored. This parameter does not exist when one
|
||||
* of the \c USE_*_DESCRIPTORS compile time options is used, or on architectures which
|
||||
* use a unified address space.
|
||||
*
|
||||
* \note By default, the library expects all descriptors to be located in flash memory via the \c PROGMEM attribute.
|
||||
* If descriptors should be located in RAM or EEPROM instead (to speed up access in the case of RAM, or to
|
||||
@@ -135,7 +135,7 @@
|
||||
const void** const DescriptorAddress
|
||||
#if (defined(ARCH_HAS_MULTI_ADDRESS_SPACE) || defined(__DOXYGEN__)) && \
|
||||
!(defined(USE_FLASH_DESCRIPTORS) || defined(USE_EEPROM_DESCRIPTORS) || defined(USE_RAM_DESCRIPTORS))
|
||||
, uint8_t* MemoryAddressSpace
|
||||
, uint8_t* const DescriptorMemorySpace
|
||||
#endif
|
||||
) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
* <b>Single Stream Transfer Example:</b>
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Discard_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -98,13 +98,13 @@
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Endpoint_Discard_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -140,7 +140,7 @@
|
||||
* <b>Single Stream Transfer Example:</b>
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Null_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -151,13 +151,13 @@
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Endpoint_Null_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -199,7 +199,7 @@
|
||||
* \code
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
@@ -212,14 +212,14 @@
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -276,7 +276,7 @@
|
||||
* \code
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
@@ -289,14 +289,14 @@
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
|
||||
@@ -85,24 +85,24 @@
|
||||
* <b>Single Stream Transfer Example:</b>
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Pipe_Discard_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
* }
|
||||
* \endcode
|
||||
*
|
||||
*
|
||||
* <b>Partial Stream Transfers Example:</b>
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Pipe_Discard_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -137,7 +137,7 @@
|
||||
* <b>Single Stream Transfer Example:</b>
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Pipe_Null_Stream(512, NULL)) != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -148,13 +148,13 @@
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Pipe_Null_Stream(512, &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -198,7 +198,7 @@
|
||||
* \code
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* NULL)) != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
@@ -211,14 +211,14 @@
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Pipe_Write_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -279,7 +279,7 @@
|
||||
* \code
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* NULL)) != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
@@ -292,14 +292,14 @@
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Pipe_Read_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* &BytesProcessed)) == PIPE_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != PIPE_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#if defined(TEMPLATE_FUNC_NAME)
|
||||
|
||||
// cppcheck-suppress unusedFunction
|
||||
uint8_t TEMPLATE_FUNC_NAME (void* const Buffer,
|
||||
uint16_t Length)
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#if defined(TEMPLATE_FUNC_NAME)
|
||||
|
||||
// cppcheck-suppress unusedFunction
|
||||
uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer,
|
||||
uint16_t Length)
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#if defined(TEMPLATE_FUNC_NAME)
|
||||
|
||||
// cppcheck-suppress unusedFunction
|
||||
uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE const Buffer,
|
||||
uint16_t Length,
|
||||
uint16_t* const BytesProcessed)
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#if defined(TEMPLATE_FUNC_NAME)
|
||||
|
||||
// cppcheck-suppress unusedFunction
|
||||
uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE const Buffer,
|
||||
uint16_t Length,
|
||||
uint16_t* const BytesProcessed)
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
* <b>Single Stream Transfer Example:</b>
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Discard_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -98,13 +98,13 @@
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Endpoint_Discard_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -140,7 +140,7 @@
|
||||
* <b>Single Stream Transfer Example:</b>
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Null_Stream(512, NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -151,13 +151,13 @@
|
||||
* \code
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Endpoint_Null_Stream(512, &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -199,7 +199,7 @@
|
||||
* \code
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
@@ -212,14 +212,14 @@
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Endpoint_Write_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
@@ -276,7 +276,7 @@
|
||||
* \code
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
*
|
||||
*
|
||||
* if ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* NULL)) != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
@@ -289,14 +289,14 @@
|
||||
* uint8_t DataStream[512];
|
||||
* uint8_t ErrorCode;
|
||||
* uint16_t BytesProcessed;
|
||||
*
|
||||
*
|
||||
* BytesProcessed = 0;
|
||||
* while ((ErrorCode = Endpoint_Read_Stream_LE(DataStream, sizeof(DataStream),
|
||||
* &BytesProcessed)) == ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
* {
|
||||
* // Stream not yet complete - do other actions here, abort if required
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (ErrorCode != ENDPOINT_RWSTREAM_NoError)
|
||||
* {
|
||||
* // Stream failed to complete - check ErrorCode here
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#if defined(TEMPLATE_FUNC_NAME)
|
||||
|
||||
// cppcheck-suppress unusedFunction
|
||||
uint8_t TEMPLATE_FUNC_NAME (void* const Buffer,
|
||||
uint16_t Length)
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#if defined(TEMPLATE_FUNC_NAME)
|
||||
|
||||
// cppcheck-suppress unusedFunction
|
||||
uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer,
|
||||
uint16_t Length)
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#if defined(TEMPLATE_FUNC_NAME)
|
||||
|
||||
// cppcheck-suppress unusedFunction
|
||||
uint8_t TEMPLATE_FUNC_NAME (TEMPLATE_BUFFER_TYPE const Buffer,
|
||||
uint16_t Length,
|
||||
uint16_t* const BytesProcessed)
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
* void EVENT_USB_Device_ConfigurationChanged(void)
|
||||
* {
|
||||
* LEDs_SetAllLEDs(LEDMASK_USB_READY);
|
||||
*
|
||||
*
|
||||
* if (!(Audio_Device_ConfigureEndpoints(&My_Audio_Interface)))
|
||||
* LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
||||
* }
|
||||
@@ -205,14 +205,14 @@
|
||||
* int main(void)
|
||||
* {
|
||||
* SetupHardware();
|
||||
*
|
||||
*
|
||||
* LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
|
||||
*
|
||||
*
|
||||
* for (;;)
|
||||
* {
|
||||
* if (USB_DeviceState != DEVICE_STATE_Configured)
|
||||
* Create_And_Process_Samples();
|
||||
*
|
||||
*
|
||||
* Audio_Device_USBTask(&My_Audio_Interface);
|
||||
* USB_USBTask();
|
||||
* }
|
||||
@@ -293,30 +293,30 @@
|
||||
* void EVENT_USB_Host_DeviceEnumerationComplete(void)
|
||||
* {
|
||||
* LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
|
||||
*
|
||||
*
|
||||
* uint16_t ConfigDescriptorSize;
|
||||
* uint8_t ConfigDescriptorData[512];
|
||||
*
|
||||
*
|
||||
* if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData,
|
||||
* sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful)
|
||||
* {
|
||||
* LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
||||
* return;
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (MIDI_Host_ConfigurePipes(&Keyboard_MIDI_Interface,
|
||||
* ConfigDescriptorSize, ConfigDescriptorData) != MIDI_ENUMERROR_NoError)
|
||||
* {
|
||||
* LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
||||
* return;
|
||||
* }
|
||||
*
|
||||
*
|
||||
* if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful)
|
||||
* {
|
||||
* LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
|
||||
* return;
|
||||
* }
|
||||
*
|
||||
*
|
||||
* LEDs_SetAllLEDs(LEDMASK_USB_READY);
|
||||
* }
|
||||
* \endcode
|
||||
@@ -342,14 +342,14 @@
|
||||
* int main(void)
|
||||
* {
|
||||
* SetupHardware();
|
||||
*
|
||||
*
|
||||
* LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
|
||||
*
|
||||
*
|
||||
* for (;;)
|
||||
* {
|
||||
* if (USB_HostState != HOST_STATE_Configured)
|
||||
* Create_And_Process_Samples();
|
||||
*
|
||||
*
|
||||
* MIDI_Host_USBTask(&My_Audio_Interface);
|
||||
* USB_USBTask();
|
||||
* }
|
||||
|
||||
@@ -50,16 +50,16 @@
|
||||
* Usage Example:
|
||||
* \code
|
||||
* #include <LUFA/Platform/UC3/ClockManagement.h>
|
||||
*
|
||||
*
|
||||
* void main(void)
|
||||
* {
|
||||
* // Start the master external oscillator which will be used as the main clock reference
|
||||
* AVR32CLK_StartExternalOscillator(0, EXOSC_MODE_8MHZ_OR_MORE, EXOSC_START_0CLK);
|
||||
*
|
||||
*
|
||||
* // Start the PLL for the CPU clock, switch CPU to it
|
||||
* AVR32CLK_StartPLL(0, CLOCK_SRC_OSC0, 12000000, F_CPU);
|
||||
* AVR32CLK_SetCPUClockSource(CLOCK_SRC_PLL0, F_CPU);
|
||||
*
|
||||
*
|
||||
* // Start the PLL for the USB Generic Clock module
|
||||
* AVR32CLK_StartPLL(1, CLOCK_SRC_OSC0, 12000000, 48000000);
|
||||
* }
|
||||
|
||||
@@ -51,12 +51,12 @@
|
||||
* Usage Example:
|
||||
* \code
|
||||
* #include <LUFA/Platform/UC3/InterruptManagement.h>
|
||||
*
|
||||
*
|
||||
* ISR(USB_Group_IRQ_Handler)
|
||||
* {
|
||||
* // USB group handler code here
|
||||
* }
|
||||
*
|
||||
*
|
||||
* void main(void)
|
||||
* {
|
||||
* INTC_Init();
|
||||
|
||||
@@ -50,13 +50,13 @@
|
||||
* Usage Example:
|
||||
* \code
|
||||
* #include <LUFA/Platform/XMEGA/ClockManagement.h>
|
||||
*
|
||||
*
|
||||
* void main(void)
|
||||
* {
|
||||
* // Start the PLL to multiply the 2MHz RC oscillator to F_CPU and switch the CPU core to run from it
|
||||
* XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU);
|
||||
* XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL);
|
||||
*
|
||||
*
|
||||
* // Start the 32MHz internal RC oscillator and start the DFLL to increase it to F_USB using the USB SOF as a reference
|
||||
* XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ);
|
||||
* XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB);
|
||||
|
||||
Reference in New Issue
Block a user