O AVR (ATmega32) contém alguns registros integrados para comunicação TWI que não apenas reduzem o nível de complexidade, mas também facilitam todo o processo de comunicação.
Esses registros foram explicados neste tutorial.
1.        TWBR (registro de taxa de bits TWI):
| TWBR7 | TWBR6 | TWBR5 | TWBR4 | TWBR3 | TWBR2 | TWBR1 | TWBR0 | 
Este registro é usado no modo mestre para definir o fator de divisão do gerador de taxa de bits (frequência de clock SCL).  A unidade geradora de taxa de bits controla o período de tempo do SCL.  A frequência do clock SCL é decidida pelo Bit Rate Register (TWBR) e pelos bits prescaler do registro TWSR (explicados a seguir).
2.        TWSR (registro de status TWI):
| TWS7 | TWS7 | TWS7 | TWS7 | TWS7 | – | TWPS1 | TWPS0 | 
·           Bits7-3 – TWS: Status do TWI
Esses bits refletem o status de TWI barramento que será explicado posteriormente na explicação do código.  O artigo concentra-se apenas nas condições de status que serão utilizadas nos códigos.  Para obter mais detalhes sobre o restante do status, consulte a folha de dados.
·           Bit 2- Bit reservado
·           Bits1-0 – TWPS: Bits pré-escaladores TWI
Esses bits são usados para definir o pré-escalador da 'Unidade geradora de taxa de bits'.
| TWPS1 | TWPS0 | Valor do pré-escalador | 
| 0 | 0 | 1 | 
| 0 | 1 | 4 | 
| 1 | 0 | 16 | 
| 1 | 1 | 64 | 
Valor do Prescaler de acordo com bits TWPS
Fórmula para frequência de clock SCL:

Fig. 1: Imagem mostrando a fórmula para frequência de clock SCL
3.        TWDR (registro de dados TWI):
| TWD7 | TWD6 | TWD5 | TWD4 | TWD3 | TWD2 | TWD1 | TWD0 | 
O TWDR sempre contém os últimos dados presentes no barramento SDA.  No modo transmissor, o TWDR contém o próximo byte a ser transmitido.  Enquanto estiver no modo de recepção, o TWDR contém o último byte recebido.  Os dados no TWDR permanecem estáveis enquanto o sinalizador TWINT estiver alto.
Contínuo
4.        TWCR (registro de controle TWI):
| TWINT | TWEA | TWSTA | TWSTO | TWWC | DOZE | – | DOIS | 
·           Bit 7 – TWINT: Flag de interrupção TWI
Este bit é usado para monitorar o status atual do TWI.  O TWINT é definido pelo hardware quando o TWI termina seu trabalho atual.  O SCL ficará baixo até que o bit TWINT seja definido.  O sinalizador TWINT deve ser apagado pelo software antes de iniciar qualquer operação no TWI.
Nota: O sinalizador TWINT é limpo escrevendo um lógico nele.
·           Bit 6 – TWEA: Bit de reconhecimento de habilitação de TWI
O bit TWEA é usado para gerar o pulso de confirmação.  Se o bit TWEA for escrito em um, o pulso ACK será gerado.  E por outro lado, se o bit TWEA for zero, o dispositivo pode ser virtualmente desconectado temporariamente do barramento serial de dois fios. 
Nota: Os valores de status do TWI são diferentes quando os dados são transferidos com base no recebimento do pulso ACK (TWEA está definido) ou NOT ACK (TWEA está limpo).
·           Bit 5 – TWSTA: Bit de Condição TWI START
Ao escrever um neste bit, o dispositivo se torna um controlador mestre.  Ele verifica se o barramento está disponível (o barramento não está ocupado na transmissão para outros mestres) e então gera a condição de partida no barramento.  Se o barramento não estiver livre, o TWI espera até que uma condição STOP seja detectada e então gera uma nova condição START para reivindicar ser o mestre do barramento. 
·           Bit 4 – TWSTO: Bit de Condição TWI STOP
Ao escrever um no bit TWSTO, o mestre irá gerar uma condição STOP no barramento serial de dois fios.  Quando a condição STOP é executada no barramento, o bit TWSTO é zerado automaticamente.
·           Bit 3 – TWWC: Sinalizador de colisão de gravação TWI
Este bit é usado para evitar a colisão na escrita no TWDR.  O bit TWWC será definido quando o TWDR estiver tentando escrever (o sinalizador TWINT está baixo).  O sinalizador TWWC é apagado escrevendo TWDR quando TWINT está alto.
·           Bit 2 – TWEN: Bit de habilitação de TWI
O bit TWEN é usado para ativar/desativar a interface TWI.  Quando este bit é escrito em um, a operação TWI é habilitada.  Se este bit for escrito em zero, o TWI será desligado e a transmissão do TWI será encerrada.
·           Bit 1 – Bit reservado e sempre escrito como zero.
·           Bit 0 – TWIE: Habilitação de interrupção TWI
O bit TWIE é usado para ativar/desativar a solicitação de interrupção TWI.  A solicitação de interrupção é habilitada gravando um nela e desabilitada gravando zero nela.
5.        TWAR (registro de endereço TWI (escravo)):
|  TWA6 | TWA5 | TWA4 | TWA3 | TWA2 | TWA1 | TWA0 | TWGCE | 
·           Bits 7-1 – TWA: Bits de endereço TWI (escravo)
Esses bits são usados para armazenar endereços escravos de 7 bits aos quais o TWI responde quando programado como Transmissor ou Receptor Escravo. 
·           Bit 0 – TWGCA: Bit de habilitação de reconhecimento de chamada geral TWI
Este bit é usado para permitir que o escravo reconheça o endereço de chamada geral (0x00). 
A chamada geral aborda todos os dispositivos no barramento usando o I2Endereço C 0.
Se um dispositivo não precisar das informações fornecidas, ele simplesmente não fará nada.  Os dispositivos que processam a mensagem reconhecem este endereço e se comportam como receptores escravos.
O mestre não consegue detectar quantos dispositivos estão usando a mensagem.  O segundo byte contém um comando. 
Veja também a interface do TWI com o ATmega32
 
              