aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/Peripheral
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2011-02-26 15:57:06 +0000
committerDean Camera <dean@fourwalledcubicle.com>2011-02-26 15:57:06 +0000
commit66c38cd940714287e4e11729bf688211902b464d (patch)
tree48407fadd460b0717e8715672f83253830d7066e /LUFA/Drivers/Peripheral
parent6f01b6afd5a4fbd0a618f790e0afaa5eb2531e12 (diff)
downloadlufa-66c38cd940714287e4e11729bf688211902b464d.tar.gz
lufa-66c38cd940714287e4e11729bf688211902b464d.tar.bz2
lufa-66c38cd940714287e4e11729bf688211902b464d.zip
Added TWI baud rate prescaler and bit length parameters to the TWI_Init() function (thanks to Thomas Herlinghaus).
Diffstat (limited to 'LUFA/Drivers/Peripheral')
-rw-r--r--LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h32
1 files changed, 27 insertions, 5 deletions
diff --git a/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h b/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h
index e03423385..feac8a858 100644
--- a/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h
+++ b/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h
@@ -53,7 +53,7 @@
* <b>Low Level API Example:</b>
* \code
* // Initialise the TWI driver before first use
- * TWI_Init();
+ * TWI_Init(TWI_BIT_PRESCALE_1, 10);
*
* // 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))
@@ -92,7 +92,7 @@
* <b>High Level API Example:</b>
* \code
* // Initialise the TWI driver before first use
- * TWI_Init();
+ * TWI_Init(TWI_BIT_PRESCALE_1, 10);
*
* // Start a write session to device at device address 0xA0, internal address 0xDC with a 10ms timeout
* uint8_t InternalWriteAddress = 0xDC;
@@ -155,6 +155,18 @@
*/
#define TWI_DEVICE_ADDRESS_MASK 0xFE
+ /** Bit length prescaler for \ref TWI_Init(). This mask multiplies the TWI bit length prescaler by 1. */
+ #define TWI_BIT_PRESCALE_1 ((0 << TWPS1) | (0 << TWPS0))
+
+ /** Bit length prescaler for \ref TWI_Init(). This mask multiplies the TWI bit length prescaler by 4. */
+ #define TWI_BIT_PRESCALE_4 ((0 << TWPS1) | (1 << TWPS0))
+
+ /** Bit length prescaler for \ref TWI_Init(). This mask multiplies the TWI bit length prescaler by 16. */
+ #define TWI_BIT_PRESCALE_16 ((1 << TWPS1) | (0 << TWPS0))
+
+ /** Bit length prescaler for \ref TWI_Init(). This mask multiplies the TWI bit length prescaler by 64. */
+ #define TWI_BIT_PRESCALE_64 ((1 << TWPS1) | (1 << TWPS0))
+
/* Enums: */
/** Enum for the possible return codes of the TWI transfer start routine and other dependant TWI functions. */
enum TWI_ErrorCodes_t
@@ -170,11 +182,21 @@
/* Inline Functions: */
/** Initialises the TWI hardware into master mode, ready for data transmission and reception. This must be
* before any other TWI operations.
+ *
+ * The generated SCL frequency will be according to the formula <pre>F_CPU / (16 + 2 * BitLength + 4 ^ Prescale)</pre>.
+ *
+ * \note The value of the \c BitLength parameter should not be set below 10 or invalid bus conditions may
+ * occur, as indicated in the AVR8 microcontroller datasheet.
+ *
+ * \param[in] Prescale Prescaler to use when determining the bus frequency, a \c TWI_BIT_PRESCALE_* value.
+ * \param[in] BitLength Length of the bits sent on the bus.
*/
- static inline void TWI_Init(void) ATTR_ALWAYS_INLINE;
- static inline void TWI_Init(void)
+ static inline void TWI_Init(const uint8_t Prescale, const uint8_t BitLength) ATTR_ALWAYS_INLINE;
+ static inline void TWI_Init(const uint8_t Prescale, const uint8_t BitLength)
{
- TWCR |= (1 << TWEN);
+ TWCR |= (1 << TWEN);
+ TWSR = Prescale;
+ TWBR = BitLength;
}
/** Turns off the TWI driver hardware. If this is called, any further TWI operations will require a call to