Цитата(Pechka @ Jun 5 2013, 19:38)

А ещё ACK, (TWEA). Если происходит обмен и в прерывании АСК был выставлен, а потом снялся - он будет выставлен или снят в итоге?
Естественно TWEA (а также TWEN) нужно оставлять такими же - если был 1, то пишем 1 и наоборот.
Для этого нужно предварительно прочитать текущее состояние TWCR, замаскировать биты в которых нельзя писать единицы и записать новое значение TWCR с запрещённым прерыванием.
Или если в программе TWEA всегда имеет одинаковое значение, то сразу писать в TWCR без предварительного чтения.
Цитата(Pechka @ Jun 5 2013, 19:38)

Хотелось бы готовое решение.
Может такое решение где-то и выложено в сети, но его ещё надо найти.
Но с другой стороны - меги достаточно простые МК и может проще всё сделать заново.
Цитата(Pechka @ Jun 5 2013, 19:38)

Мне нужно просто чтобы TWI закончил текущее действие и ждал пока ему включат прерывания для дальнейшей работы

Так может прерывания для TWI вообще не нужно?
Работать например через поллинг.
Цитата(Pechka @ Jun 5 2013, 19:38)

ему включат прерывания для дальнейшей работы

Может проще не разрешать прерывание, а вызвать функцию которая выполнит нужные действия с TWI ?