Added new high level TWI packet read/write commands, altered behaviour of the TWI_StartTransmission() function.

Spell check source code files.
This commit is contained in:
Dean Camera 2011-01-13 22:56:49 +00:00
parent 9c7594e7db
commit 70d55f6e0c
13 changed files with 225 additions and 92 deletions

View file

@ -7,8 +7,8 @@
#include "TWI.h"
bool TWI_StartTransmission(const uint8_t SlaveAddress,
const uint8_t TimeoutMS)
uint8_t TWI_StartTransmission(const uint8_t SlaveAddress,
const uint8_t TimeoutMS)
{
for (;;)
{
@ -33,17 +33,17 @@ bool TWI_StartTransmission(const uint8_t SlaveAddress,
continue;
default:
TWCR = (1 << TWEN);
return false;
return TWI_ERROR_BusFault;
}
}
_delay_us(10);
}
if (!(BusCaptured))
if (!(TimeoutRemaining))
{
TWCR = (1 << TWEN);
return false;
return TWI_ERROR_BusCaptureTimeout;
}
TWDR = SlaveAddress;
@ -59,17 +59,85 @@ bool TWI_StartTransmission(const uint8_t SlaveAddress,
}
if (!(TimeoutRemaining))
return false;
return TWI_ERROR_SlaveResponseTimeout;
switch (TWSR & TW_STATUS_MASK)
{
case TW_MT_SLA_ACK:
case TW_MR_SLA_ACK:
return true;
return TWI_ERROR_NoError;
default:
TWCR = ((1 << TWINT) | (1 << TWSTO) | (1 << TWEN));
return false;
return TWI_ERROR_SlaveNotReady;
}
}
}
uint8_t TWI_ReadPacket(const uint8_t SlaveAddress,
const uint8_t TimeoutMS,
const uint8_t* InternalAddress,
uint8_t InternalAddressLen,
uint8_t* Buffer,
uint8_t Length)
{
uint8_t ErrorCode;
if ((ErrorCode = TWI_WritePacket(SlaveAddress, TimeoutMS, InternalAddress, InternalAddressLen,
NULL, 0)) != TWI_ERROR_NoError)
{
return ErrorCode;
}
if ((ErrorCode = TWI_StartTransmission((SlaveAddress & TWI_DEVICE_ADDRESS_MASK) | TWI_ADDRESS_READ,
TimeoutMS)) == TWI_ERROR_NoError)
{
while (Length--)
{
if (!(TWI_ReceiveByte(Buffer++, (Length == 0))))
{
ErrorCode = TWI_ERROR_SlaveNAK;
break;
}
}
TWI_StopTransmission();
}
return ErrorCode;
}
uint8_t TWI_WritePacket(const uint8_t SlaveAddress,
const uint8_t TimeoutMS,
const uint8_t* InternalAddress,
uint8_t InternalAddressLen,
const uint8_t* Buffer,
uint8_t Length)
{
uint8_t ErrorCode;
if ((ErrorCode = TWI_StartTransmission((SlaveAddress & TWI_DEVICE_ADDRESS_MASK) | TWI_ADDRESS_WRITE,
TimeoutMS)) == TWI_ERROR_NoError)
{
while (InternalAddressLen--)
{
if (!(TWI_SendByte(*(InternalAddress++))))
{
ErrorCode = TWI_ERROR_SlaveNAK;
break;
}
}
while (Length--)
{
if (!(TWI_SendByte(*(Buffer++))))
{
ErrorCode = TWI_ERROR_SlaveNAK;
break;
}
}
TWI_StopTransmission();
}
return ErrorCode;
}