Remove accidentally duplicated model-specific peripheral driver files.pull/1469/head
parent
ec19436d54
commit
0557676013
@ -0,0 +1,547 @@
|
|||||||
|
/* The standard CSS for doxygen */
|
||||||
|
|
||||||
|
body, table, div, p, dl {
|
||||||
|
font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @group Heading Levels */
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 150%;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 120%;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.multicol {
|
||||||
|
-moz-column-gap: 1em;
|
||||||
|
-webkit-column-gap: 1em;
|
||||||
|
-moz-column-count: 3;
|
||||||
|
-webkit-column-count: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.startli, p.startdd, p.starttd {
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.endli {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.enddd {
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.endtd {
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @end */
|
||||||
|
|
||||||
|
caption {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.legend {
|
||||||
|
font-size: 70%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3.version {
|
||||||
|
font-size: 90%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.qindex, div.navtab{
|
||||||
|
background-color: #e8eef2;
|
||||||
|
border: 1px solid #84b0c7;
|
||||||
|
text-align: center;
|
||||||
|
margin: 2px;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.qindex, div.navpath {
|
||||||
|
width: 100%;
|
||||||
|
line-height: 140%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.navtab {
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @group Link Styling */
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #153788;
|
||||||
|
font-weight: normal;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contents a:visited {
|
||||||
|
color: #1b77c5;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.qindex {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.qindexHL {
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: #6666cc;
|
||||||
|
color: #ffffff;
|
||||||
|
border: 1px double #9295C2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contents a.qindexHL:visited {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.el {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.elRef {
|
||||||
|
}
|
||||||
|
|
||||||
|
a.code {
|
||||||
|
color: #3030f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.codeRef {
|
||||||
|
color: #3030f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @end */
|
||||||
|
|
||||||
|
dl.el {
|
||||||
|
margin-left: -1cm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fragment {
|
||||||
|
font-family: monospace, fixed;
|
||||||
|
font-size: 105%;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre.fragment {
|
||||||
|
border: 1px solid #CCCCCC;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
padding: 4px 6px;
|
||||||
|
margin: 4px 8px 4px 2px;
|
||||||
|
overflow: auto;
|
||||||
|
word-wrap: break-word;
|
||||||
|
font-size: 9pt;
|
||||||
|
line-height: 125%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.ah {
|
||||||
|
background-color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #ffffff;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
margin-top: 3px
|
||||||
|
}
|
||||||
|
|
||||||
|
div.groupHeader {
|
||||||
|
margin-left: 16px;
|
||||||
|
margin-top: 12px;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.groupText {
|
||||||
|
margin-left: 16px;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: white;
|
||||||
|
color: black;
|
||||||
|
margin-right: 20px;
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.indexkey {
|
||||||
|
background-color: #e8eef2;
|
||||||
|
font-weight: bold;
|
||||||
|
border: 1px solid #CCCCCC;
|
||||||
|
margin: 2px 0px 2px 0;
|
||||||
|
padding: 2px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.indexvalue {
|
||||||
|
background-color: #e8eef2;
|
||||||
|
border: 1px solid #CCCCCC;
|
||||||
|
padding: 2px 10px;
|
||||||
|
margin: 2px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.memlist {
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.formulaDsp {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.formulaDsp {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
img.formulaInl {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.center {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.center img {
|
||||||
|
border: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.footer {
|
||||||
|
border: 0px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @group Code Colorization */
|
||||||
|
|
||||||
|
span.keyword {
|
||||||
|
color: #008000
|
||||||
|
}
|
||||||
|
|
||||||
|
span.keywordtype {
|
||||||
|
color: #604020
|
||||||
|
}
|
||||||
|
|
||||||
|
span.keywordflow {
|
||||||
|
color: #e08000
|
||||||
|
}
|
||||||
|
|
||||||
|
span.comment {
|
||||||
|
color: #800000
|
||||||
|
}
|
||||||
|
|
||||||
|
span.preprocessor {
|
||||||
|
color: #806020
|
||||||
|
}
|
||||||
|
|
||||||
|
span.stringliteral {
|
||||||
|
color: #002080
|
||||||
|
}
|
||||||
|
|
||||||
|
span.charliteral {
|
||||||
|
color: #008080
|
||||||
|
}
|
||||||
|
|
||||||
|
span.vhdldigit {
|
||||||
|
color: #ff00ff
|
||||||
|
}
|
||||||
|
|
||||||
|
span.vhdlchar {
|
||||||
|
color: #000000
|
||||||
|
}
|
||||||
|
|
||||||
|
span.vhdlkeyword {
|
||||||
|
color: #700070
|
||||||
|
}
|
||||||
|
|
||||||
|
span.vhdllogic {
|
||||||
|
color: #ff0000
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @end */
|
||||||
|
|
||||||
|
.search {
|
||||||
|
color: #003399;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
form.search {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.search {
|
||||||
|
font-size: 75%;
|
||||||
|
color: #000080;
|
||||||
|
font-weight: normal;
|
||||||
|
background-color: #e8eef2;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.tiny {
|
||||||
|
font-size: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dirtab {
|
||||||
|
padding: 4px;
|
||||||
|
border-collapse: collapse;
|
||||||
|
border: 1px solid #84b0c7;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.dirtab {
|
||||||
|
background: #e8eef2;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
height: 0px;
|
||||||
|
border: none;
|
||||||
|
border-top: 1px solid #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr.footer {
|
||||||
|
height: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @group Member Descriptions */
|
||||||
|
|
||||||
|
.mdescLeft, .mdescRight,
|
||||||
|
.memItemLeft, .memItemRight,
|
||||||
|
.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
|
||||||
|
background-color: #FAFAFA;
|
||||||
|
border: none;
|
||||||
|
margin: 4px;
|
||||||
|
padding: 1px 0 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mdescLeft, .mdescRight {
|
||||||
|
padding: 0px 8px 4px 8px;
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memItemLeft, .memItemRight, .memTemplParams {
|
||||||
|
border-top: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memItemLeft, .memTemplItemLeft {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memTemplParams {
|
||||||
|
color: #606060;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @end */
|
||||||
|
|
||||||
|
/* @group Member Details */
|
||||||
|
|
||||||
|
/* Styles for detailed member documentation */
|
||||||
|
|
||||||
|
.memtemplate {
|
||||||
|
font-size: 80%;
|
||||||
|
color: #606060;
|
||||||
|
font-weight: normal;
|
||||||
|
margin-left: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memnav {
|
||||||
|
background-color: #e8eef2;
|
||||||
|
border: 1px solid #84b0c7;
|
||||||
|
text-align: center;
|
||||||
|
margin: 2px;
|
||||||
|
margin-right: 15px;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memitem {
|
||||||
|
padding: 0;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memname {
|
||||||
|
white-space: nowrap;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-left: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memproto {
|
||||||
|
border-top: 1px solid #84b0c7;
|
||||||
|
border-left: 1px solid #84b0c7;
|
||||||
|
border-right: 1px solid #84b0c7;
|
||||||
|
padding: 0;
|
||||||
|
background-color: #d5e1e8;
|
||||||
|
font-weight: bold;
|
||||||
|
/* firefox specific markup */
|
||||||
|
background-image: -moz-linear-gradient(rgba(228, 233, 245, 1.0) 0%, rgba(193, 205, 232, 1.0) 100%);
|
||||||
|
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
|
||||||
|
-moz-border-radius-topright: 8px;
|
||||||
|
-moz-border-radius-topleft: 8px;
|
||||||
|
/* webkit specific markup */
|
||||||
|
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(228, 233, 245, 1.0)), to(rgba(193, 205, 232, 1.0)));
|
||||||
|
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||||
|
-webkit-border-top-right-radius: 8px;
|
||||||
|
-webkit-border-top-left-radius: 8px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.memdoc {
|
||||||
|
border-bottom: 1px solid #84b0c7;
|
||||||
|
border-left: 1px solid #84b0c7;
|
||||||
|
border-right: 1px solid #84b0c7;
|
||||||
|
padding: 2px 5px;
|
||||||
|
background-color: #eef3f5;
|
||||||
|
border-top-width: 0;
|
||||||
|
/* firefox specific markup */
|
||||||
|
-moz-border-radius-bottomleft: 8px;
|
||||||
|
-moz-border-radius-bottomright: 8px;
|
||||||
|
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
|
||||||
|
/* webkit specific markup */
|
||||||
|
-webkit-border-bottom-left-radius: 8px;
|
||||||
|
-webkit-border-bottom-right-radius: 8px;
|
||||||
|
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.paramkey {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paramtype {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paramname {
|
||||||
|
color: #602020;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.paramname em {
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @end */
|
||||||
|
|
||||||
|
/* @group Directory (tree) */
|
||||||
|
|
||||||
|
/* for the tree view */
|
||||||
|
|
||||||
|
.ftvtree {
|
||||||
|
font-family: sans-serif;
|
||||||
|
margin: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* these are for tree view when used as main index */
|
||||||
|
|
||||||
|
.directory {
|
||||||
|
font-size: 9pt;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory h3 {
|
||||||
|
margin: 0px;
|
||||||
|
margin-top: 1em;
|
||||||
|
font-size: 11pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
The following two styles can be used to replace the root node title
|
||||||
|
with an image of your choice. Simply uncomment the next two styles,
|
||||||
|
specify the name of your image and be sure to set 'height' to the
|
||||||
|
proper pixel height of your image.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
.directory h3.swap {
|
||||||
|
height: 61px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-image: url("yourimage.gif");
|
||||||
|
}
|
||||||
|
.directory h3.swap span {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
.directory > h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory p {
|
||||||
|
margin: 0px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory div {
|
||||||
|
display: none;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory img {
|
||||||
|
vertical-align: -30%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* these are for tree view when not used as main index */
|
||||||
|
|
||||||
|
.directory-alt {
|
||||||
|
font-size: 100%;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory-alt h3 {
|
||||||
|
margin: 0px;
|
||||||
|
margin-top: 1em;
|
||||||
|
font-size: 11pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory-alt > h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory-alt p {
|
||||||
|
margin: 0px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory-alt div {
|
||||||
|
display: none;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.directory-alt img {
|
||||||
|
vertical-align: -30%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @end */
|
||||||
|
|
||||||
|
address {
|
||||||
|
font-style: normal;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.doxtable {
|
||||||
|
border-collapse:collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.doxtable td, table.doxtable th {
|
||||||
|
border: 1px solid #153788;
|
||||||
|
padding: 3px 7px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.doxtable th {
|
||||||
|
background-color: #254798;
|
||||||
|
color: #FFFFFF;
|
||||||
|
font-size: 110%;
|
||||||
|
padding-bottom: 4px;
|
||||||
|
padding-top: 5px;
|
||||||
|
text-align:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
p {padding-left: 20px;}
|
@ -1,189 +0,0 @@
|
|||||||
/*
|
|
||||||
LUFA Library
|
|
||||||
Copyright (C) Dean Camera, 2010.
|
|
||||||
|
|
||||||
dean [at] fourwalledcubicle [dot] com
|
|
||||||
www.fourwalledcubicle.com
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Copyright 2010 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
|
|
||||||
without fee, provided that the above copyright notice appear in
|
|
||||||
all copies and that both that the copyright notice and this
|
|
||||||
permission notice and warranty disclaimer appear in supporting
|
|
||||||
documentation, and that the name of the author not be used in
|
|
||||||
advertising or publicity pertaining to distribution of the
|
|
||||||
software without specific, written prior permission.
|
|
||||||
|
|
||||||
The author disclaim all warranties with regard to this
|
|
||||||
software, including all implied warranties of merchantability
|
|
||||||
and fitness. In no event shall the author be liable for any
|
|
||||||
special, indirect or consequential damages or any damages
|
|
||||||
whatsoever resulting from loss of use, data or profits, whether
|
|
||||||
in an action of contract, negligence or other tortious action,
|
|
||||||
arising out of or in connection with the use or performance of
|
|
||||||
this software.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** \file
|
|
||||||
*
|
|
||||||
* SPI driver for the 8-bit AVRs.
|
|
||||||
*
|
|
||||||
* \note This file should not be included directly. It is automatically included as needed by the SPI driver
|
|
||||||
* dispatch header located in LUFA/Drivers/Peripheral/SPI.h.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** \ingroup Group_SPI
|
|
||||||
* @defgroup Group_SPI_AVR8 8-Bit AVR SPI Driver
|
|
||||||
*
|
|
||||||
* SPI driver for the 8-bit AVRs.
|
|
||||||
*
|
|
||||||
* \note This file should not be included directly. It is automatically included as needed by the ADC driver
|
|
||||||
* dispatch header located in LUFA/Drivers/Peripheral/SPI.h.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __SPI_AVR8_H__
|
|
||||||
#define __SPI_AVR8_H__
|
|
||||||
|
|
||||||
/* Includes: */
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
/* Preprocessor Checks: */
|
|
||||||
#if !defined(__INCLUDE_FROM_SPI_H)
|
|
||||||
#error Do not include this file directly. Include LUFA/Drivers/Peripheral/SPI.h instead.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Enable C linkage for C++ Compilers: */
|
|
||||||
#if defined(__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Private Interface - For use in library only: */
|
|
||||||
#if !defined(__DOXYGEN__)
|
|
||||||
/* Macros: */
|
|
||||||
#define SPI_USE_DOUBLESPEED (1 << SPE)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Public Interface - May be used in end-application: */
|
|
||||||
/* Macros: */
|
|
||||||
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 2. */
|
|
||||||
#define SPI_SPEED_FCPU_DIV_2 SPI_USE_DOUBLESPEED
|
|
||||||
|
|
||||||
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 4. */
|
|
||||||
#define SPI_SPEED_FCPU_DIV_4 0
|
|
||||||
|
|
||||||
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 8. */
|
|
||||||
#define SPI_SPEED_FCPU_DIV_8 (SPI_USE_DOUBLESPEED | (1 << SPR0))
|
|
||||||
|
|
||||||
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 16. */
|
|
||||||
#define SPI_SPEED_FCPU_DIV_16 (1 << SPR0)
|
|
||||||
|
|
||||||
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 32. */
|
|
||||||
#define SPI_SPEED_FCPU_DIV_32 (SPI_USE_DOUBLESPEED | (1 << SPR1))
|
|
||||||
|
|
||||||
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 64. */
|
|
||||||
#define SPI_SPEED_FCPU_DIV_64 (SPI_USE_DOUBLESPEED | (1 << SPR1) | (1 << SPR0))
|
|
||||||
|
|
||||||
/** SPI prescaler mask for SPI_Init(). Divides the system clock by a factor of 128. */
|
|
||||||
#define SPI_SPEED_FCPU_DIV_128 ((1 << SPR1) | (1 << SPR0))
|
|
||||||
|
|
||||||
/** SPI clock polarity mask for SPI_Init(). Indicates that the SCK should lead on the rising edge. */
|
|
||||||
#define SPI_SCK_LEAD_RISING (0 << CPOL)
|
|
||||||
|
|
||||||
/** SPI clock polarity mask for SPI_Init(). Indicates that the SCK should lead on the falling edge. */
|
|
||||||
#define SPI_SCK_LEAD_FALLING (1 << CPOL)
|
|
||||||
|
|
||||||
/** SPI data sample mode mask for SPI_Init(). Indicates that the data should sampled on the leading edge. */
|
|
||||||
#define SPI_SAMPLE_LEADING (0 << CPHA)
|
|
||||||
|
|
||||||
/** SPI data sample mode mask for SPI_Init(). Indicates that the data should be sampled on the trailing edge. */
|
|
||||||
#define SPI_SAMPLE_TRAILING (1 << CPHA)
|
|
||||||
|
|
||||||
/** SPI mode mask for SPI_Init(). Indicates that the SPI interface should be initialized into slave mode. */
|
|
||||||
#define SPI_MODE_SLAVE (0 << MSTR)
|
|
||||||
|
|
||||||
/** SPI mode mask for SPI_Init(). Indicates that the SPI interface should be initialized into master mode. */
|
|
||||||
#define SPI_MODE_MASTER (1 << MSTR)
|
|
||||||
|
|
||||||
/* Inline Functions: */
|
|
||||||
/** Initialises the SPI subsystem, ready for transfers. Must be called before calling any other
|
|
||||||
* SPI routines.
|
|
||||||
*
|
|
||||||
* \param[in] SPIOptions SPI Options, a mask consisting of one of each of the SPI_SPEED_*,
|
|
||||||
* SPI_SCK_*, SPI_SAMPLE_* and SPI_MODE_* masks
|
|
||||||
*/
|
|
||||||
static inline void SPI_Init(const uint8_t SPIOptions)
|
|
||||||
{
|
|
||||||
DDRB |= ((1 << 1) | (1 << 2));
|
|
||||||
PORTB |= ((1 << 0) | (1 << 3));
|
|
||||||
|
|
||||||
SPCR = ((1 << SPE) | SPIOptions);
|
|
||||||
|
|
||||||
if (SPIOptions & SPI_USE_DOUBLESPEED)
|
|
||||||
SPSR |= (1 << SPI2X);
|
|
||||||
else
|
|
||||||
SPSR &= ~(1 << SPI2X);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Turns off the SPI driver, disabling and returning used hardware to their default configuration. */
|
|
||||||
static inline void SPI_ShutDown(void)
|
|
||||||
{
|
|
||||||
DDRB &= ~((1 << 1) | (1 << 2));
|
|
||||||
PORTB &= ~((1 << 0) | (1 << 3));
|
|
||||||
|
|
||||||
SPCR = 0;
|
|
||||||
SPSR = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Sends and receives a byte through the SPI interface, blocking until the transfer is complete.
|
|
||||||
*
|
|
||||||
* \param[in] Byte Byte to send through the SPI interface
|
|
||||||
*
|
|
||||||
* \return Response byte from the attached SPI device
|
|
||||||
*/
|
|
||||||
static inline uint8_t SPI_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
|
|
||||||
static inline uint8_t SPI_TransferByte(const uint8_t Byte)
|
|
||||||
{
|
|
||||||
SPDR = Byte;
|
|
||||||
while (!(SPSR & (1 << SPIF)));
|
|
||||||
return SPDR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Sends a byte through the SPI interface, blocking until the transfer is complete. The response
|
|
||||||
* byte sent to from the attached SPI device is ignored.
|
|
||||||
*
|
|
||||||
* \param[in] Byte Byte to send through the SPI interface
|
|
||||||
*/
|
|
||||||
static inline void SPI_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
|
|
||||||
static inline void SPI_SendByte(const uint8_t Byte)
|
|
||||||
{
|
|
||||||
SPDR = Byte;
|
|
||||||
while (!(SPSR & (1 << SPIF)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Sends a dummy byte through the SPI interface, blocking until the transfer is complete. The response
|
|
||||||
* byte from the attached SPI device is returned.
|
|
||||||
*
|
|
||||||
* \return The response byte from the attached SPI device
|
|
||||||
*/
|
|
||||||
static inline uint8_t SPI_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
|
|
||||||
static inline uint8_t SPI_ReceiveByte(void)
|
|
||||||
{
|
|
||||||
SPDR = 0x00;
|
|
||||||
while (!(SPSR & (1 << SPIF)));
|
|
||||||
return SPDR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disable C linkage for C++ Compilers: */
|
|
||||||
#if defined(__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
|
@ -1,145 +0,0 @@
|
|||||||
/*
|
|
||||||
LUFA Library
|
|
||||||
Copyright (C) Dean Camera, 2010.
|
|
||||||
|
|
||||||
dean [at] fourwalledcubicle [dot] com
|
|
||||||
www.fourwalledcubicle.com
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Copyright 2010 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
|
|
||||||
without fee, provided that the above copyright notice appear in
|
|
||||||
all copies and that both that the copyright notice and this
|
|
||||||
permission notice and warranty disclaimer appear in supporting
|
|
||||||
documentation, and that the name of the author not be used in
|
|
||||||
advertising or publicity pertaining to distribution of the
|
|
||||||
software without specific, written prior permission.
|
|
||||||
|
|
||||||
The author disclaim all warranties with regard to this
|
|
||||||
software, including all implied warranties of merchantability
|
|
||||||
and fitness. In no event shall the author be liable for any
|
|
||||||
special, indirect or consequential damages or any damages
|
|
||||||
whatsoever resulting from loss of use, data or profits, whether
|
|
||||||
in an action of contract, negligence or other tortious action,
|
|
||||||
arising out of or in connection with the use or performance of
|
|
||||||
this software.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** \file
|
|
||||||
*
|
|
||||||
* ADC driver for the 8-bit AVRs.
|
|
||||||
*
|
|
||||||
* \note This file should not be included directly. It is automatically included as needed by the USART driver
|
|
||||||
* dispatch header located in LUFA/Drivers/Peripheral/Serial.h.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** \ingroup Group_Serial
|
|
||||||
* @defgroup Group_Serial_AVR8 8-Bit AVR Serial Driver
|
|
||||||
*
|
|
||||||
* Serial driver for the 8-bit AVRs.
|
|
||||||
*
|
|
||||||
* \note This file should not be included directly. It is automatically included as needed by the ADC driver
|
|
||||||
* dispatch header located in LUFA/Drivers/Peripheral/USART.h.
|
|
||||||
*
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __SERIAL_AVR8_H__
|
|
||||||
#define __SERIAL_AVR8_H__
|
|
||||||
|
|
||||||
/* Includes: */
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <avr/pgmspace.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
/* Preprocessor Checks: */
|
|
||||||
#if !defined(__INCLUDE_FROM_SERIAL_H)
|
|
||||||
#error Do not include this file directly. Include LUFA/Drivers/Peripheral/Serial.h instead.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Public Interface - May be used in end-application: */
|
|
||||||
/* Macros: */
|
|
||||||
/** Macro for calculating the baud value from a given baud rate when the U2X (double speed) bit is
|
|
||||||
* not set.
|
|
||||||
*/
|
|
||||||
#define SERIAL_UBBRVAL(baud) ((((F_CPU / 16) + (baud / 2)) / (baud)) - 1)
|
|
||||||
|
|
||||||
/** Macro for calculating the baud value from a given baud rate when the U2X (double speed) bit is
|
|
||||||
* set.
|
|
||||||
*/
|
|
||||||
#define SERIAL_2X_UBBRVAL(baud) ((((F_CPU / 8) + (baud / 2)) / (baud)) - 1)
|
|
||||||
|
|
||||||
/* Pseudo-Function Macros: */
|
|
||||||
#if defined(__DOXYGEN__)
|
|
||||||
/** Indicates whether a character has been received through the USART.
|
|
||||||
*
|
|
||||||
* \return Boolean true if a character has been received, false otherwise
|
|
||||||
*/
|
|
||||||
static inline bool Serial_IsCharReceived(void);
|
|
||||||
#else
|
|
||||||
#define Serial_IsCharReceived() ((UCSR1A & (1 << RXC1)) ? true : false)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Inline Functions: */
|
|
||||||
/** Initializes the USART, ready for serial data transmission and reception. This initializes the interface to
|
|
||||||
* standard 8-bit, no parity, 1 stop bit settings suitable for most applications.
|
|
||||||
*
|
|
||||||
* \param[in] BaudRate Serial baud rate, in bits per second
|
|
||||||
* \param[in] DoubleSpeed Enables double speed mode when set, halving the sample time to double the baud rate
|
|
||||||
*/
|
|
||||||
static inline void Serial_Init(const uint32_t BaudRate, const bool DoubleSpeed)
|
|
||||||
{
|
|
||||||
UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);
|
|
||||||
UCSR1B = ((1 << TXEN1) | (1 << RXEN1));
|
|
||||||
UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
|
|
||||||
|
|
||||||
DDRD |= (1 << 3);
|
|
||||||
PORTD |= (1 << 2);
|
|
||||||
|
|
||||||
UBRR1 = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Turns off the USART driver, disabling and returning used hardware to their default configuration. */
|
|
||||||
static inline void Serial_ShutDown(void)
|
|
||||||
{
|
|
||||||
UCSR1A = 0;
|
|
||||||
UCSR1B = 0;
|
|
||||||
UCSR1C = 0;
|
|
||||||
|
|
||||||
DDRD &= ~(1 << 3);
|
|
||||||
PORTD &= ~(1 << 2);
|
|
||||||
|
|
||||||
UBRR1 = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Transmits a given byte through the USART.
|
|
||||||
*
|
|
||||||
* \param[in] DataByte Byte to transmit through the USART
|
|
||||||
*/
|
|
||||||
static inline void Serial_TxByte(const char DataByte)
|
|
||||||
{
|
|
||||||
while (!(UCSR1A & (1 << UDRE1)));
|
|
||||||
UDR1 = DataByte;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Receives a byte from the USART.
|
|
||||||
*
|
|
||||||
* \return Byte received from the USART
|
|
||||||
*/
|
|
||||||
static inline uint8_t Serial_RxByte(void)
|
|
||||||
{
|
|
||||||
while (!(UCSR1A & (1 << RXC1)));
|
|
||||||
return UDR1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disable C linkage for C++ Compilers: */
|
|
||||||
#if defined(__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
|
Loading…
Reference in new issue