Fix Wire register

Move TWBR register from Wire.cpp to twi.c file.
This commit is contained in:
Paolo Paolucci 2016-03-07 18:40:09 +01:00 committed by Sandeep Mistry
parent aa710ab682
commit 7b2f6fc028
3 changed files with 19 additions and 2 deletions

View File

@ -80,9 +80,9 @@ void TwoWire::end(void)
twi_disable();
}
void TwoWire::setClock(uint32_t frequency)
void TwoWire::setClock(uint32_t clock)
{
TWBR = ((F_CPU / frequency) - 16) / 2;
twi_setFrequency(clock);
}
uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint32_t iaddress, uint8_t isize, uint8_t sendStop)

View File

@ -118,6 +118,22 @@ void twi_setAddress(uint8_t address)
TWAR = address << 1;
}
/*
* Function twi_setClock
* Desc sets twi bit rate
* Input Clock Frequency
* Output none
*/
void twi_setFrequency(uint32_t frequency)
{
TWBR = ((F_CPU / frequency) - 16) / 2;
/* twi bit rate formula from atmega128 manual pg 204
SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR))
note: TWBR should be 10 or higher for master mode
It is 72 for a 16mhz Wiring board with 100kHz TWI */
}
/*
* Function twi_readFrom
* Desc attempts to become twi bus master and read a

View File

@ -41,6 +41,7 @@
void twi_init(void);
void twi_disable(void);
void twi_setAddress(uint8_t);
void twi_setFrequency(uint32_t);
uint8_t twi_readFrom(uint8_t, uint8_t*, uint8_t, uint8_t);
uint8_t twi_writeTo(uint8_t, uint8_t*, uint8_t, uint8_t, uint8_t);
uint8_t twi_transmit(const uint8_t*, uint8_t);