diff options
Diffstat (limited to 'LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h')
-rw-r--r-- | LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h | 57 |
1 files changed, 20 insertions, 37 deletions
diff --git a/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h b/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h index 63b9f03c6..705ef530c 100644 --- a/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h +++ b/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h @@ -99,14 +99,14 @@ * uint8_t WritePacket[3] = {0x01, 0x02, 0x03}; * * TWI_WritePacket(0xA0, 10, &InternalWriteAddress, sizeof(InternalWriteAddress), - * WritePacket, sizeof(WritePacket); + * &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); + * &ReadPacket, sizeof(ReadPacket); * \endcode * * @{ @@ -215,20 +215,24 @@ TWCR = ((1 << TWINT) | (1 << TWSTO) | (1 << TWEN)); } + /* Function Prototypes: */ + /** Begins a master mode TWI bus communication with the given slave device address. + * + * \param[in] SlaveAddress Address of the slave TWI device to communicate with. + * \param[in] TimeoutMS Timeout period within which the slave must respond, in milliseconds. + * + * \return A value from the \ref TWI_ErrorCodes_t enum. + */ + uint8_t TWI_StartTransmission(const uint8_t SlaveAddress, + const uint8_t TimeoutMS); + /** Sends a byte to the currently addressed device on the TWI bus. * * \param[in] Byte Byte to send to the currently addressed device * * \return Boolean \c true if the recipient ACKed the byte, \c false otherwise */ - static inline bool TWI_SendByte(const uint8_t Byte) - { - TWDR = Byte; - TWCR = ((1 << TWINT) | (1 << TWEN)); - while (!(TWCR & (1 << TWINT))); - - return ((TWSR & TW_STATUS_MASK) == TW_MT_DATA_ACK); - } + bool TWI_SendByte(const uint8_t Byte); /** Receives a byte from the currently addressed device on the TWI bus. * @@ -237,32 +241,11 @@ * * \return Boolean \c true if the byte reception successfully completed, \c false otherwise. */ - static inline bool TWI_ReceiveByte(uint8_t* const Byte, - const bool LastByte) - { - uint8_t TWCRMask = ((1 << TWINT) | (1 << TWEN)); - - if (!(LastByte)) - TWCRMask |= (1 << TWEA); - - TWCR = TWCRMask; - while (!(TWCR & (1 << TWINT))); - *Byte = TWDR; - - return ((TWSR & TW_STATUS_MASK) == TW_MR_DATA_ACK); - } - - /* Function Prototypes: */ - /** Begins a master mode TWI bus communication with the given slave device address. - * - * \param[in] SlaveAddress Address of the slave TWI device to communicate with. - * \param[in] TimeoutMS Timeout period within which the slave must respond, in milliseconds. - * - * \return A value from the \ref TWI_ErrorCodes_t enum. - */ - uint8_t TWI_StartTransmission(const uint8_t SlaveAddress, - const uint8_t TimeoutMS); - + bool TWI_ReceiveByte(uint8_t* const Byte, + 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. * @@ -278,7 +261,7 @@ uint8_t TWI_ReadPacket(const uint8_t SlaveAddress, const uint8_t TimeoutMS, const uint8_t* InternalAddress, - const uint8_t InternalAddressLen, + uint8_t InternalAddressLen, uint8_t* Buffer, uint8_t Length) ATTR_NON_NULL_PTR_ARG(3); |