This header contains function description for I2C module in AVR microcontrollers.
The Two-wire Serial Interface (TWI) is ideally suited for typical microcontroller applications. The TWI protocol allows the systems designer to interconnect up to 128 different devices using only two bi-directional bus lines, one for clock (SCL) and one for data (SDA). The only external hardware needed to implement the bus is a single pull-up resistor for each of the TWI bus lines. All devices connected to the bus have individual addresses, and mechanisms for resolving bus contention are inherent in the TWI protocol.
Features:
Clock frequency is set by TWBR register
TWI Bit Rate Register – TWBR
TWI Data Register – TWDR
TWI (Slave) Address Register – TWAR
TWI Control Register – TWCR
TWI Status Register – TWSR
THE FUNCTIONS USED IN I2C.H ARE...
void I2CInit();
To initialse I2C module with defined clock freq, mode of operation.
void I2CStart();
Sends a start signal on I2C bus
void I2CStop();
Sends a stop signal on I2C bus
unsigned char I2CWriteSLA(unsigned char sla);
Sends Slave address with write/read command.
unsigned char I2CWriteByte(unsigned char dat);
sends a data byte on I2C bus
unsigned char I2CReadByte(unsigned char *data);
Reads a data byte from I2C bus.
The Two-wire Serial Interface (TWI) is ideally suited for typical microcontroller applications. The TWI protocol allows the systems designer to interconnect up to 128 different devices using only two bi-directional bus lines, one for clock (SCL) and one for data (SDA). The only external hardware needed to implement the bus is a single pull-up resistor for each of the TWI bus lines. All devices connected to the bus have individual addresses, and mechanisms for resolving bus contention are inherent in the TWI protocol.
Features:
• Simple Yet Powerful and Flexible Communication Interface, Only Two Bus Lines NeededRegisters:
• Both Master and Slave Operation Supported
• Device Can Operate as Transmitter or Receiver
• 7-bit Address Space allows up to 128 Different Slave Addresses
• Multi-master Arbitration Support
• Up to 400 kHz Data Transfer Speed
• Slew-rate Limited Output Drivers
• Noise Suppression Circuitry Rejects Spikes on Bus Lines
• Fully Programmable Slave Address with General Call Support
• Address Recognition causes Wake-up when AVR is in Sleep Mode
Clock frequency is set by TWBR register
TWI Bit Rate Register – TWBR
TWI Data Register – TWDR
TWI (Slave) Address Register – TWAR
TWI Control Register – TWCR
TWI Status Register – TWSR
THE FUNCTIONS USED IN I2C.H ARE...
void I2CInit();
To initialse I2C module with defined clock freq, mode of operation.
void I2CStart();
Sends a start signal on I2C bus
void I2CStop();
Sends a stop signal on I2C bus
unsigned char I2CWriteSLA(unsigned char sla);
Sends Slave address with write/read command.
unsigned char I2CWriteByte(unsigned char dat);
sends a data byte on I2C bus
unsigned char I2CReadByte(unsigned char *data);
Reads a data byte from I2C bus.
void I2CInit()
{
TWBR=0x04;
TWSR|=((1<<TWPS1) | (1<<TWPS0));
SETBIT(TWCR,TWEN)
// SDA & SCL PINS ARE OVERRIDE BY TWI & CAN'T BE USED AS I/O WHEN TWI ENABLED
// so no DDR & PULL-UP settings required.
}
void I2CStart()
{
TWCR=(1<<TWINT)| (1<<TWSTA)|(1<<TWEN);
while(!(TWCR & (1<<TWINT)));
}
#define I2CStop() TWCR=(1<<TWINT)| (1<<TWEN)|(1<<TWSTO)
unsigned char I2CWriteByte(uint8_t dat)
{
unsigned char STATUS;
TWDR=dat;
TWCR=(1<<TWEN) | (1<<TWINT);
while(!(TWCR & (1<<TWINT)));
STATUS=TW_STATUS;
if(STATUS==TW_MT_DATA_ACK || STATUS==TW_MT_DATA_NACK || STATUS==TW_MT_SLA_ACK || STATUS==TW_MR_SLA_ACK)
return TRUE;
else
return FALSE;
}
unsigned char I2CReadByte(unsigned char *data)
{
unsigned char STATUS;
TWCR&=(~(1<<TWEA));
CLEARBIT(TWCR,TWINT)
while(!(TWCR & (1<<TWINT)));
STATUS=TW_STATUS;
if(STATUS==TW_MR_DATA_ACK || STATUS==TW_MR_DATA_NACK)
{
*data=TWDR;
return TRUE;
}
else
return FALSE;
}
0 comments:
Post a Comment