X-Git-Url: http://git.linex4red.de/pub/lufa.git/blobdiff_plain/88d022a75245e7492ecd11a5e1ea5c553acf0b2c..18b82b3575162c2c6d462c8f34a7d942f77a88ec:/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h diff --git a/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h b/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h index 705ef530c..56697ff99 100644 --- a/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h +++ b/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2011. + Copyright (C) Dean Camera, 2012. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2012 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 @@ -52,8 +52,8 @@ * * Low Level API Example: * \code - * // Initialize the TWI driver before first use - * TWI_Init(TWI_BIT_PRESCALE_1, 10); + * // 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) @@ -88,11 +88,11 @@ * } * } * \endcode - * + * * High Level API Example: * \code - * // Initialize the TWI driver before first use - * TWI_Init(TWI_BIT_PRESCALE_1, 10); + * // 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; @@ -154,10 +154,10 @@ * or \ref TWI_ADDRESS_WRITE to obtain the device's read and write address respectively. */ #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)) @@ -166,7 +166,18 @@ /** 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)) - + + /** Calculates the length of each bit on the TWI bus for a given target frequency. This may be used with + * the \ref TWI_Init() function to convert a bus frequency to a number of clocks for the \c BitLength + * parameter. + * + * \param[in] Prescale Prescaler set on the TWI bus. + * \param[in] Frequency Desired TWI bus frequency in Hz. + * + * \return Bit length in clocks for the given TWI bus frequency at the given prescaler value. + */ + #define TWI_BITLENGTH_FROM_FREQ(Prescale, Frequency) ((((F_CPU / (Prescale)) / (Frequency)) - 16) / 2) + /* Enums: */ /** Enum for the possible return codes of the TWI transfer start routine and other dependant TWI functions. */ enum TWI_ErrorCodes_t @@ -178,7 +189,7 @@ TWI_ERROR_SlaveNotReady = 4, /**< Slave NAKed the TWI bus START condition. */ TWI_ERROR_SlaveNAK = 5, /**< Slave NAKed whilst attempting to send data to the device. */ }; - + /* Inline Functions: */ /** Initializes the TWI hardware into master mode, ready for data transmission and reception. This must be * before any other TWI operations. @@ -245,7 +256,7 @@ const bool LastByte) ATTR_NON_NULL_PTR_ARG(1); bool TWI_ReceiveByte(uint8_t* const Byte, const bool LastByte); - + /** High level function to perform a complete packet transfer over the TWI bus to the specified * device. *