-/*\r
- Copyright (C) Dean Camera, 2010.\r
- \r
- dean [at] fourwalledcubicle [dot] com\r
- www.fourwalledcubicle.com\r
-*/\r
-\r
-#include "../TWI.h"\r
-\r
-bool TWI_StartTransmission(uint8_t SlaveAddress)\r
-{\r
- for (;;)\r
- {\r
- uint8_t IterationsRemaining = 50;\r
- bool BusCaptured = false;\r
-\r
- while (IterationsRemaining-- && !BusCaptured)\r
- {\r
- TWCR = ((1 << TWINT) | (1 << TWSTA) | (1 << TWEN)); \r
- while (!(TWCR & (1 << TWINT)));\r
- \r
- switch (TWSR & TW_STATUS_MASK)\r
- {\r
- case TW_START:\r
- case TW_REP_START:\r
- BusCaptured = true;\r
- break;\r
- case TW_MT_ARB_LOST:\r
- continue;\r
- default:\r
- return false;\r
- }\r
- }\r
- \r
- if (!(BusCaptured))\r
- return false;\r
- \r
- TWDR = SlaveAddress;\r
- TWCR = ((1 << TWINT) | (1 << TWEN));\r
- while (!(TWCR & (1 << TWINT)));\r
- \r
- GPIOR0 = (TWSR & TW_STATUS_MASK);\r
-\r
- switch (TWSR & TW_STATUS_MASK)\r
- {\r
- case TW_MT_SLA_ACK:\r
- case TW_MR_SLA_ACK:\r
- return true;\r
- default:\r
- TWI_StopTransmission();\r
- break;\r
- } \r
- }\r
-}\r