Escolar Documentos
Profissional Documentos
Cultura Documentos
com
SCLK SCLK
Mestre SPI
SDOx SDIx SPI Slave
SDIx SDOx #1
I / O geral SSx
I / O geral
I / O geral SCLK
SDIx SPI Slave
SDOx #2
SSx
SCLK
SDIx SPI Slave
SDOx #3
SSx
O módulo MSSPx possui cinco registros para operação no Ao inicializar o SPI, várias opções precisam ser especificadas.
modo SPI. Estes são: Isso é feito programando os bits de controle apropriados
(SSPxCON1 <5: 0> e SSPxSTAT <7: 6>). Esses bits de controle
• Registro STATUS MSSPx (SSPxSTAT)
permitem que o seguinte seja especificado:
• Registro de controle MSSPx 1 (SSPxCON1)
• Registro de controle MSSPx 3 (SSPxCON3)
• Modo Master (SCKx é a saída de relógio)
• Modo escravo (SCKx é a entrada do relógio)
• Registro do buffer de dados MSSPx (SSPxBUF)
• Polaridade do relógio (estado ocioso de SCKx)
• Registro de endereço MSSPx (SSPxADD)
• Fase de amostra de entrada de dados (meio ou fim do tempo de
• Registro MSSPx Shift (SSPxSR) (não
saída de dados)
acessível diretamente)
• Clock Edge (dados de saída na borda ascendente / descendente de
SSPxCON1 e SSPxSTAT são os registros de controle e
SCKx)
STATUS na operação no modo SPI. O registro
• Taxa de clock (apenas modo Master)
SSPxCON1 é legível e gravável. Os 6 bits inferiores do
SSPxSTAT são somente leitura. Os dois bits superiores • Modo Slave Select (apenas modo Slave)
do SSPxSTAT são de leitura / gravação. Para habilitar a porta serial, o bit SSPx Enable, SSPxEN do
Em um modo mestre SPI, SSPxADD pode ser carregado com um registro SSPxCON1, deve ser definido. Para redefinir ou
valor usado no gerador de taxa de transmissão. Mais reconfigurar o modo SPI, limpe o bit SSPxEN, reinicialize
informações sobre o Gerador de Baud Rate estão disponíveis em os registros SSPxCONx e defina o SSPxEN
Seção 15.7 “Gerador de taxa de transmissão”. pedaço. Isso configura os pinos SDIx, SDOx, SCKx e SSx como
pinos da porta serial. Para que os pinos se comportem como a
SSPxSR é o registrador de deslocamento usado para inserir e
função da porta serial, alguns devem ter seus bits de direção de
retirar dados. SSPxBUF fornece acesso indireto ao registro
dados (no registro TRIS) devidamente programados da seguinte
SSPxSR. SSPxBUF é o registro de buffer no qual os bytes de
forma:
dados são gravados e a partir do qual os bytes de dados são
lidos. • SDIx deve ter o conjunto de bits TRIS correspondente
Em operações de recepção, SSPxSR e SSPxBUF juntos • SDOx deve ter o bit TRIS correspondente apagado
criam um receptor em buffer. Quando SSPxSR recebe um • SCKx (modo Master) deve ter o bit TRIS
byte completo, ele é transferido para SSPxBUF e a correspondente apagado
interrupção SSPxIF é definida. • SCKx (modo Slave) deve ter
TRIS bit definido
Durante a transmissão, o SSPxBUF não é armazenado em
buffer. Uma gravação em SSPxBUF gravará em SSPxBUF e • SSx deve ter o conjunto de bits TRIS correspondente
SSPxSR.
O MSSPx consiste em um registro de deslocamento de Quando o software aplicativo espera receber dados
transmissão / recepção (SSPxSR) e um registro de buffer válidos, o SSPxBUF deve ser lido antes que o próximo
(SSPxBUF). O SSPxSR muda os dados para dentro e para fora do byte de dados a ser transferido seja gravado no
dispositivo, MSb primeiro. O SSPxBUF mantém os dados que SSPxBUF. O bit Buffer Full, BF do registro SSPxSTAT,
foram gravados no SSPxSR até que os dados recebidos estejam indica quando SSPxBUF foi carregado com os dados
prontos. Assim que os 8 bits de dados forem recebidos, esse byte recebidos (a transmissão está completa). Quando o
é movido para o registro SSPxBUF. Em seguida, o bit Buffer Full SSPxBUF é lido, o bit BF é limpo. Esses dados podem ser
Detect, BF do registro SSPxSTAT e o bit de flag de interrupção, irrelevantes se o SPI for apenas um transmissor.
SSPxIF, são definidos. Este buffer duplo dos dados recebidos Geralmente, a interrupção MSSPx é usada para
(SSPxBUF) permite que o próximo byte comece a recepção antes determinar quando a transmissão / recepção foi
de ler os dados que acabaram de ser recebidos. Qualquer concluída. Se o método de interrupção não for usado, o
gravação no registro SSPxBUF durante a transmissão / recepção polling do software pode ser feito para garantir que não
de dados será ignorada e o bit de detecção de colisão de ocorra uma colisão de gravação.
gravação, WCOL do registro SSPxCON1, será
SPI Master SSPxM <3: 0> = 00xx SPI Slave SSPxM <3: 0> = 010x
= 1010
SDOx SDIx
Registro de deslocamento
SDIx SDOx Registro de deslocamento
(SSPxSR) (SSPxSR)
MSb LSb MSb LSb
Relógio Serial
SCKx SCKx
Seuave Select
I / O geral SSx
Processador 1 (opcional) Processador 2
Escrever para
SSPxBUF
SCKx
(CKP = 0
CKE = 0)
SCKx
(CKP = 1
CKE = 0)
4 relógio
Modos
SCKx
(CKP = 0
CKE = 1)
SCKx
(CKP = 1
CKE = 1)
Entrada
Amostra
(SMP = 1)
SSPxIF
SSPxSR para
SSPxBUF
SCLK SCLK
Mestre SPI
SDOx SDIx SPI Slave
SDIx SDOx #1
I / O geral SSx
SCLK
SDIx SPI Slave
SDOx #2
SSx
SCLK
SDIx SPI Slave
SDOx #3
SSx
SSx
SCKx
(CKP = 0
CKE = 0)
SCKx
(CKP = 1
CKE = 0)
Escrever para
SSPxBUF
Registro de deslocamento SSPxSR
e a contagem de bits é zerada
SSPxBUF para
SSPxSR
SDIx bit 0
bit 7 bit 7
Entrada
Amostra
SSPxIF
Interromper
Bandeira
SSPxSR para
SSPxBUF
SSx
Opcional
SCKx
(CKP = 0
CKE = 0)
SCKx
(CKP = 1
CKE = 0)
Escrever para
SSPxBUF
Válido
SDIx
bit 7 bit 0
Entrada
Amostra
SSPxIF
Interromper
Bandeira
SSPxSR para
SSPxBUF
Colisão de Gravação
detecção ativa
FIGURA 15-10: MODO DE FORMA DE ONDA SPI (MODO ESCRAVO COM CKE = 1)
SSx
Não Opcional
SCKx
(CKP = 0
CKE = 1)
SCKx
(CKP = 1
CKE = 1)
Escrever para
SSPxBUF
Válido
SDIx
bit 7 bit 0
Entrada
Amostra
SSPxIF
Interromper
Bandeira
SSPxSR para
SSPxBUF
Colisão de Gravação
detecção ativa
Existem quatro modos potenciais de operação para um determinado Se o mestre pretende gravar no escravo, ele envia
dispositivo: repetidamente um byte de dados, sagacidadeh o escravo
respondendo após cada byte com um bit ACK. Neste
• Modo de transmissão mestre
exemplo, o dispositivo mestre está no modo de transmissão
(o mestre está transmitindo dados para um escravo)
mestre e o escravo está no modo de recepção escravo.
• Modo de recepção principal
(o mestre está recebendo dados de um escravo)
Se o mestre pretende ler do escravo, ele recebe
repetidamente um byte de dados do escravo e
• Modo de transmissão escravo
responde a cada byte com um bit ACK. Neste
(o escravo está transmitindo dados para um mestre)
exemplo, o dispositivo master está no modo Master
• Modo de recepção escravo
Receive e o escravo no modo Slave Transmit.
(o escravo está recebendo dados do mestre)
No último byte de dados comunicados, o dispositivo mestre pode
Para iniciar a comunicação, um dispositivo mestre inicia no encerrar a transmissão enviando um bit de parada. Se o
modo de transmissão mestre. O dispositivo mestre envia um dispositivo mestre estiver em Receeu tenho modo, ele envia o bit
bit de início seguido do byte de endereço do escravo com o de parada no lugar do último bit ACK. Um bit de parada é
qual pretende se comunicar. Isso é seguido por um único bit indicado por uma transição de baixo para alto da linha SDAx
de leitura / gravação, que determina se o mestre pretende enquanto a linha SCLx é mantida alta.
transmitir ou receber dados do dispositivo escravo.
Em alguns casos, o mestre pode querer manter o controle do
barramento e reiniciar outra transmissão. Nesse caso, o
Se o escravo solicitado existir no barramento, ele irá reiniciar dispositivo mestre podeseencontre outro bit de início no lugar do
pond com um bit de reconhecimento, também conhecido bit de parada ou último bit ACK quando estiver no modo de
como ACK. O mestre continua no modo de transmissão ou recepção.
no modo de recepção e o escravo continua no complemento,
O eu2O barramento C especifica três protocolos de mensagem;
no modo de recepção ou no modo de transmissão,
respectivamente. • Mensagem única em que um mestre grava dados em um
escravo.
Um bit de início é indicado por uma transição de alto para baixo
da linha SDAx enquanto a linha SCLx é mantida alta. O endereço • Mensagem única onde um mestre lê dados de um
e os bytes de dados são enviados, primeiro o bit mais escravo.
significativo (MSb). O bit Read / Write é enviado como lógico • Mensagem combinada em que um mestre inicia um mínimo de
quando o mestre pretende ler dados do escravo, e é enviado duas gravações, ou duas leituras, ou uma combinação de
como um zero lógico quando se pretende escrever dados no gravações e leituras, para um ou mais escravos.
escravo.
PRAZO Descrição
Todos MSSPx I2A comunicação C é orientada por bytes e
deslocada primeiro para o MSb. Seis registros SFR e 2 Transmissor O dispositivo que transfere os dados
sinalizadores de interrupção fazem a interface do módulo com o para o ônibus.
PIC® microcontrolador e software do usuário. Dois pinos, SDAx e Receptor O dispositivo que transfere os
SCLx, são exercidos pelo módulo para se comunicarem com dados do ônibus.
outros I externos2Dispositivos C. Mestre O dispositivo que inicia uma
transferência, gera sinais de relógio e
15.4.1 FORMATO BYTE
encerra uma transferência.
Toda comunicação em I2C é feito em segmentos de 9 bits. Escravo O dispositivo endereçado pelo
Um byte é enviado de um mestre para um escravo ou vice- mestre.
versa, seguido por um bit de reconhecimento enviado de
Multi-master Um barramento com mais de um dispositivo
volta. Após a oitava borda descendente da linha SCLx, o
que pode iniciar transferências de dados.
dispositivo de saída de dados no SDAx muda esse pino para
Arbitragem Procedimento para garantir que apenas um
uma entrada e lê um valor de reconhecimento no próximo
mestre por vez controle o barramento. A
pulso de clock.
arbitragem vencedora garante que a
O sinal do relógio, SCLx, é fornecido pelo mestre. Os dados mensagem não seja corrompida.
são válidos para alteração enquanto o sinal SCLx está baixo e
Sincronização Procedimento para sincronizar os relógios
são amostrados na transição positiva do relógio. Mudanças
de dois ou mais dispositivos no
na linha SDAx enquanto a linha SCLx está alta definem
barramento.
condições especiais no barramento, explicadas a seguir.
Ocioso Nenhum mestre está controlando o
15.4.2 DEFINIÇÃO DE I2C TERMINOLOGIA barramento e as linhas SDAx e SCLx
estão altas.
Há linguagem e terminologia na descrição de I2
Ativo Sempre que um ou mais dispositivos
Comunicação C que tem definições específicas para I2
mestre estão controlando o barramento.
C. O uso dessa palavra é definido abaixo e pode ser
Endereçado Dispositivo escravo que recebeu um
usado no restante deste documento sem explicação.
Escravo endereço correspondente e está sendo
Esta tabela foi adaptada do Phillips I2Especificação C.
cronometrado ativamente por um mestre.
Esses pinos devem ser definidos pelo usuário para entradas, com o bit R / W limpo e está pronto para
O eu2A especificação C define uma condição inicial como uma Uma reinicialização é válida a qualquer momento em que uma parada
transição de SDAx de um estado alto para baixo enquanto a linha seja válida. Um mestre pode emitir uma reinicialização se desejar
SCLx é alta. Uma condição de início é sempre gerada pelo mestre manter o barramento após encerrar a transferência atual. Um Restart
e significa a transição do barramento de um estado inativo para tem o mesmo efeito no escravo que um Start teria, redefinindo toda a
um estado ativo. A Figura 15-10 mostra as formas de onda para lógica do escravo e preparando-o para cronometrar em um endereço.
as condições de Início e Parada. O mestre pode querer endereçar o mesmo ou outro escravo.
Uma condição de parada é uma transição da linha SDAx de um estado escravo manterá o relógio e se preparará para registrar a saída dos
SDAx
SCLx
S P
Mudança de Mudança de
Dados permitidos Dados permitidos
Começar Pare
Doença Doença
Sr
Mudança de
Mudança de
Dados permitidos
Dados permitidos
Reiniciar
Doença
O nono pulso SCLx para qualquer byte transferido em I2C O modo MSSPx Slave opera em um dos quatro modos
é dedicado como um reconhecimento. Ele permite que selecionados nos bits SSPxM do registro SSPxCON1. Os modos
os dispositivos receptores respondam ao transmissor podem ser divididos em modo de endereçamento de 7 e 10 bits.
puxando a linha SDAx para baixo. O transmissor deve Os modos de endereçamento de 10 bits operam da mesma
liberar o controle da linha duranteissoÉ hora de mudar forma que os de 7 bits, com alguma sobrecarga adicional para
na resposta. O reconhecimento (ACK) é um sinal ativo lidar com os endereços maiores.
baixo, puxando a linha SDAx baixa indicada ao
Os modos com interrupções de bit Start e Stop operaram da
transmissor que o dispositivo recebeu os dados
mesma forma que os outros modos com SSPxIF adicionalmente
transmitidos e está pronto para receber mais.
definido após a detecção de uma condição de Start, Restart ou
O resultado de um ACK é colocado no bit ACKSTAT do Stop.
registro SSPxCON2.
15.5.1 ENDEREÇOS DO MODO ESCRAVO
Software escravo, quando o AHEN e os bits DHEN são
definidos, permitem que o usuário defina o valor ACK O registro SSPxADD (Registro 15-6) contém o endereço
enviado de volta ao transmissor. O bit ACKDT do registro do modo Slave. O primeiro byte recebido após uma
SSPxCON2 é definido / limpo para determinar a resposta. condição de Start ou Restart é comparado com o valor
O hardware escravo irá gerar uma resposta ACK se os armazenado neste registro. Se o byte corresponder, o
bits AHEN e DHEN do registro SSPxCON3 estiverem valor será carregado no registro SSPxBUF e uma
limpos. interrupção será gerada. Se o valor não corresponder, o
módulo fica inativo e nenhuma indicação é fornecida ao
Existem certas condições em que um ACK não será
software de que algo aconteceu.
enviado pelo escravo. Se o bit BF do registro SSPxSTAT
ou o bit SSPxOV do registro SSPxCON1 forem definidos O registro SSPx Mask (Registro 15-5) afeta o processo de
quando um byte for recebido. correspondência de endereços. VerSeção 15.5.9 “Registro
de máscara SSPx” Para maiores informações.
Quando o módulo é endereçado, após a 8ª borda
descendente de SCLx no barramento, o bit ACKTIM do 15.5.1.1 I2Modo de endereçamento C Slave de 7 bits
registro SSPxCON3 é definido. O bit ACKTIM indica o
tempo de reconhecimento do barramento ativo. No modo de endereçamento de 7 bits, o LSb do byte de dados
recebido é ignorado ao determinar se há uma correspondência de
O bit de status ACKTIM só está ativo quando o bit AHEN
endereço.
ou DHEN está habilitado.
15.5.1.2 I2Modo de endereçamento C Slave de 10 bits
Quando o R / W bisto de um byte de endereço A recepção do dispositivo escravo com AHEN e DHEN
recebido correspondente é limpo, o bit R / W do configurados opera da mesma forma que sem essas opções, com
registro SSPxSTAT é limpo. O endereço recebido é interrupções extras e alongamento de clock adicionado após a
carregado no registro SSPxBUF e confirmado. oitava borda descendente de SCLx. Essas interrupções adicionais
allow o software escravo para decidir se deseja ACK o endereço
Quando a condição de estouro existe para um endereço
de recebimento ou byte de dados, em vez do hardware. Esta
recebido, então not Acknowledge é fornecido. Uma
funcionalidade adiciona suporte para PMBus ™ que não estava
condição de estouro é definida quando o bit BF do
presente nas versões anteriores deste módulo.
registro SSPxSTAT é definido ou o bit SSPxOV do registro
SSPxCON1 é definido. O bit BOEN do registro SSPxCON3 Esta lista descreve as etapas que devem ser realizadas
modifica esta operação. Para obter mais informações, pelo software escravo para usar essas opções para I2
consulte o Registro 15-4. Comunicação C. A Figura 15-15 exibe um módulo usando
Uma interrupção MSSPx é gerada para cada byte de dados
endereço e armazenamento de dados. A Figura 15-16
transferido. O bit da bandeira, SSPxIF, deve ser limpo pelo
inclui a operação com o bit SEN do conjunto de registros
software.
SSPxCON2.
1. S bit de SSPxSTAT é definido; SSPxIF é definido se a
Quando o bit SEN do registro SSPxCON2 é definido,
interrupção na detecção de início forehabilitado.
SCLx será mantido baixo (extensão do clock) após
cada byte recebido. O relógio deve ser liberado 2. O endereço de correspondência com o bit R / W limpo é
configurando o bit CKP do registro SSPxCON1, exceto sincronizado. SSPxIF é definido e CKP limpo após a 8ª
às vezes no modo de 10 bits. VerSeção 15.2.3 "Modo borda descendente de SCLx.
Mestre SPI" para mais detalhes. 3. Slave limpa o SSPxIF.
4. O escravo pode olhar para o bit ACKTIM do
15.5.2.1 Recepção de endereçamento de 7 bits
registro SSPxCON3 para dissuadirmeu se o
Esta seção descreve uma sequência padrão de eventos para SSPxIF foi depois ou antes do ACK.
o módulo MSSPx configurado como um I2Escravo C no modo 5. O escravo lê o valor do endereço de SSPxBUF,
de endereçamento de 7 bits. Todas as decisões tomadas por limpando o BF bandeira.
hardware ou software e seus efeitos na recepção. A Figura 6. O escravo define o valor ACK com clock de saída para o
15-13 e a Figura 15-14 são usadas como referência visual mestre, definindo ACKDT.
para esta descrição.
7. O Slave libera o relógio ajustando o CKP.
Este é um processo passo a passo do que normalmente 8. SSPxIF é definido após um ACK, não após um NACK.
deve ser feito para cumprir2Comunicação C.
9. Se SEN = 1 a eslavoO hardware esticará o relógio
1. Bit de início detectado. após o ACK.
2. S bit de SSPxSTAT é definido; SSPxIF é definido se a interrupção 10. Slave limpa SSPxIF.
na detecção de início estiver habilitada.
Observação: SSPxIF ainda é definido após a 9ª borda descendente de
3. O endereço de correspondência com R / W bit clear é gravandoeived. SCLx mesmo se não houver esticão do relógio e BF tiver
4. O escravo puxa SDAx baixo enviando um ACK para o sido apagado. Somente se o NACK for enviado ao
mestre e define o bit SSPxIF. mestre, o SSPxIF não será definido.
5. O software limpa o bit SSPxIF. 11. SSPxIF definido e CKP limpo após a 8ª borda descendente
6. O software lê o endereço recebido de de SCLx para um byte de dados recebido.
SSPxBUF apagando o sinalizador BF. 12. O Slave examina o bit ACKTIM de SSPxCON3 para
7. Se SEN = 1; O software escravo define o bit CKP para determinar a fonte da interrupção.
liberar a linha SCLx. 13. O escravo lê os dados recebidos de SSPxBUF
8. O mestre registra um byte de dados. que limpa BF.
9. O escravo torna o SDAx baixo enviando um ACK para o 14. As etapas 7 a 14 são iguais para cada byte de dados
mestre e define o bit SSPxIF. recebido.
10. O software limpa SSPxIF. 15. Communicatíon é encerrado por qualquer um dos escravos
11. O software lê o byte recebido de SSPxBUF que enviando um ACK = 1, ou o mestre enviando uma condição de
limpa BF. parada. Se uma parada for enviada e a detecção de
interrupção na parada estiver desabilitada, o escravo só
12. Os passos 8-12 são repetidos para todos os bytes
saberá por polling do bit P do registro SSTSTAT.
recebidos do mestre.
13. O mestre envia a condição de parada, configurando o bit P de
SSPxSTAT, e o barramento fica ocioso.
DS41412B-page 224
Bus Master envia
Condição de parada
SCLx
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
PIC18 (L) F2X / 4XK22
S P
SSPxIF
SSPxIF definido no dia 9
Preliminares
Apagado por software Apagado por software borda de queda de
SCLx
BF
Primeiro byte
SSPxBUF é lido de dados é
acessível
em SSPxBUF
SSPxOV
O relógio é mantido baixo até que CKP seja definido como '1 '
SSPxIF
Preliminares
BF
Primeiro byte
de dados é
SSPxBUF é lido acessível
em SSPxBUF
SSPxOV
DS41412B-page 225
Mestre Releases SDAx Mestre envia
para escravo para a sequência ACK Condição de parada
FIGURA 15-16:
DS41412B-page 226
Endereço de Recebimento Recebendo dados ACK Dados recebidos
SDAx ACK =1
A7 A6 A5 A4 A3 A2 A1 ACK D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
SCLx
S 12 3 4 5 6 7 8 9 1 2 3 4 5 67 8 9 1 2 3 4 5 6 7 8 9 P
SSPxIF
Se AHEN = 1: SSPxIF é definido no
SSPxIF está definido dia 9 de quedage do Apagado por software Sem interrupt
O endereço é
PIC18 (L) F2X / 4XK22
Software escravo
limpa ACKDT para Software escravo
conjuntos ACKDT para
ACK o recebido
CKP byte não ACK
Preliminares
Quando AHEN =1:
Quando DHEN =1:
CKP é limpo por hardware e CKP definido por
CKP é limpo por hardware
SCLx é esticado software, SCLx é lançado
na 8ª borda descendente
de SCLx
ACKTIM
P
eu2C ESCRAVO, ENDEREÇO DE 7 BIT, RECEPÇÃO (SEN = 0, AHEN = 1, DHEN = 1)
Condição de parada
Versões principais
R/W=0 SDAx para escravo para sequência ACK
SSPxIF
Não emterrupt depois
Apagado por software
se não ACK
de Slave
BF
Recebido
endereço é carregado em Os dados recebidos são SSPxBUF pode ser
SSPxBUF disponível em SSPxBUF leia a qualquer momento antes
do próximo byte ser carregado
ACKDT
Preliminares
Slave envia
ACKDT para ACK
não ACK
o byte recebido
CKP
Quando AHEN = 1; CKP é nãot desmarcado se
Quando DHEN = 1;
na 8ª borda descendente Definido por software, não for ACK
na 8ª borda descendente de
de SCLx de um byte de SCLx de um byte de dados liberar SCLx
endereço, o CKP é limpo recebido, CKP é apagado
ACKTIM
P
eu2C ESCRAVO, ENDEREÇO DE 7 BIT, RECEPÇÃO (SEN = 1, AHEN = 1, DHEN = 1)
PIC18 (L) F2X / 4XK22
DS41412B-page 227
PIC18 (L) F2X / 4XK22
15.5.3 TRANSMISSÃO ESCRAVO 15.5.3.2 Transmissão de 7 bits
Quando o bit R / W do endereço de entradaWL byte é Um dispositivo mestre pode transmitir uma solicitação de leitura
definido e ocorre uma correspondência de endereço, o bit a um escravo e, em seguida, registrar os dados do escravo. A lista
R / W do registro SSPxSTAT é definido. O recebidode abaixo descreve o que o software de um escravo precisará fazer
Anúnciosvestido é carregado no registro SSPxBUF e um para realizar uma transmissão padrão. A Figura 15-17 pode ser
pulso ACK é enviado pelo escravo no nono bit. usada como referência a esta lista.
Após o ACK, o hardware escravo limpa o bit CKP e o pino 1. O Mestre envia uma condição de início no SDAx e
SCLx é mantido baixo (consulte Seção 15.5.6 “Alongamento SCLx.
do relógio” para mais detalhes). Esticando o relógio, o 2. S bit de SSPxSTAT é definido; SSPxIF é definido se a interrupção
mestre será incapaz de declarar outro pulso de clock até que na detecção de início for enabconduziu.
o escravo termine de preparar os dados de transmissão.
3. O endereço correspondente com o conjunto de bits R / W é recebido pelo bit
transferência de dados está concluída. Neste caso, quando o mestre sincronize os dados fora do escravo.
não ACK é travado pelo escravo, o escravo fica inativo e 10. SSPxIF é definido após a resposta ACK do
espera por outroer ocorrência do bit de início. Se a linha mestre ser carregada no registro ACKSTAT.
SDAx estava baixa (ACK), os próximos dados de transmissão 11. O bit SSPxIF é limpo.
devem ser carregados no registro SSPxBUF. Novamente, o 12. O software escravo verifica o bit ACKSTAT para
pino SCLx deve ser liberado configurando o bit CKP. ver se o mestre deseja registrar mais dados.
Uma interrupção MSSPx é gerada para cada byte de Nota 1: Se o mestre ACKs o relógio será
transferência de dados. O bit SSPxIF deve ser limpo pelo esticado.
software e o registro SSPxSTAT é usado para determinar o
status do byte. O bit SSPxIF é definido na borda descendente
2: ACKSTAT é o único bit atualizado no
do nono pulso de clock.
borda ascendente de SCLx (9º) em vez de
queda.
15.5.3.1 Colisão de barramento no modo escravo 13. As etapas 9-13 são repetidas para cada byte
transmitido.
Um escravo recebe uma solicitação de leitura e começa a transferir
dados na linha SDAx. Se uma colisão de barramento for detectada e o 14. Se o mestre enviar um não ACK; o relógio não é retido,
bit SBCDE do registro SSPxCON3 for definido, o bit BCLxIF do registro mas SSPxIF ainda está definido.
PIRx será definido. Uma vez que uma colisão de barramento é 15. O mestre envia uma condição de Reinício ou Parada.
detectada, o escravo fica inativo e espera ser endereçado novamente. 16. O escravo não é mais endereçado.
O software do usuário pode usar o bit BCLxIF para lidar com uma
colisão de barramento escravo.
SCLx
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
SSPxIF
BF
BF é automaticamente
Endereço recebido Os dados a serem transmitidos são apagado após a 8ª borda
é lido de SSPxBUF carregados em SSPxBUF descendente de SCLx
CKP
Quando R / W é definido CKP não é
hcampo por não
SCLx é sempre
mantida baixa após a 9ª borda Definido por software ACK
descendente de SCLx
Preliminares
ACKSTAT
R / W é copiado do byte de
endereço correspondente
D/A
eu2C ESCRAVO, ENDEREÇO DE 7 BIT, TRANSMISSÃO (AHEN = 0)
Indica um endereço
foi recebido
P
PIC18 (L) F2X / 4XK22
DS41412B-page 229
PIC18 (L) F2X / 4XK22
15.5.3.3 Transmissão de 7 bits com retenção de
endereço habilitada
Endereço de Recebimento R/W=1 Automático Transmitindo Dados Automático Transmitindo Dados ACK
SDAx ACK
A7 A6 A5 A4 A3 A2 A1 D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0
SCLx
SSPxIF
Apagado por software
BF BF é automaticamente
Endereço recebido Os dados a serem transmitidos são apagado após a 8ª borda
é lido de SSPxBUF carregados em SSPxBUF descendente de SCLx
ACKDT
Slave limpa
ACKDT para ACK
Morada
Preliminares
ACKSTAT
ACK do Mestre
resposta é copiada
para SSPxSTAT
CKP
Quando AHEN = 1; CKP não apagado
CKP é limpo por hardware Quando R / W = 1; Definido por software, depois de não ACK
depois de receber o endereço CKP é sempre lança SCLx
correspondente. apagado após ACK
eu2C ESCRAVO, ENDEREÇO DE 7 BIT, TRANSMISSÃO (AHEN = 1)
ACKTIM
ACKTIM é definido na 8ª queda ACKTIM foi apagado
borda de SCLx na 9ª borda ascendente de SCLx
R/W
D/A
PIC18 (L) F2X / 4XK22
DS41412B-page 231
PIC18 (L) F2X / 4XK22
15.5.4 RECEPÇÃO DE ENDEREÇO DE 10 BITS 15.5.5 ENDEREÇO DE 10 BITS COM ENDEREÇO OU RETENÇÃO
MODO ESCRAVO DE DADOS
Esta seção descreve uma sequência padrão de eventos para o A recepção usando endereçamento de 10 bits com AHEN ou
módulo MSSPx configurado como um I2Escravo C no modo de DHEN definido é a mesma que com os modos de 7 bits. A única
endereçamento de 10 bits. diferença é a necessidade de atualizar o registro SSPxADD
usando o bit UA. Todas as funcionalidades, especificamente
Figura 15-19 e é usada como uma referência visual para esta
quando o bit CKP é limpo e a linha SCLx mantida baixa, são as
descrição.
mesmas. A Figura 15-20 pode ser usada como uma referência de
Este é um processo passo a passo do que deve ser feito pelo um escravo no endereçamento de 10 bits com AHEN definido.
software escravo para realizar I2Comunicação C.
A Figura 15-21 mostra uma forma de onda padrão para um transmissor
1. O ônibus começa ocioso.
escravo no modo de endereçamento de 10 bits.
2. Mestre envia condição de início; S bit de SSPxSTAT está definido;
SSPxIF é definido se a interrupção na detecção de início estiver
habilitada.
Mestre envia
Condição de parada
SCLx
1 23456789 1 23456789 1 234 56789 1 23456789 P
S
SCLx é mantido baixo
enquanto CKP = 0
SSPxIF
Definido por hardware Apagado por software
na 9ª borda descendente
BF
Preliminares
Se o endereço corresponder O endereço de recebimento é Dados lidos
SSPxADD é carregado em
ler de SSPxBUF de SSPxBUF
SSPxBUF
UA
Quando UA = 1; O software atualiza
SCLx é mantido baixo SSPxADD e libera SCLx
CKP
DS41412B-page 233
Receber primeiro byte de endereço Receber segundo byte de Receber dados Receber dados
R/W=0
FIGURA 15-21:
DS41412B-page 234
SDAx 1 1 1 1 0 A9 A8 ACK endereço A7 A6 A5 A4 A3 A2 A1 A0 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5
SCLx S 1 2 3 4 5 6 7 8 9 UA 1 2 3 4 5 6 7 8 9 UA 1 2 3 4 5 6 7 8 9 1 2
SSPxIF
BF
Preliminares
Slave softwestão limpa
ACKDT para ACK
o byte recebido
UA
Mestre envia
Mestre envia Pare condição
Reiniciar evento Mestre envia
não ACK
SSPxIF
BF
Preliminares
com endereço recebido ler de SSPxBUF carregados em SSPxBUF
UA
O endereço alto é carregado
UA indica SSPxADD Depois que SSPxADD é de volta no SSPxADD
deve ser atualizado atualizado, UA é limpo
CKP e SCLx é lançado
R/W
R / W é copiado do byte de
endereço correspondente
D/A
Indica um endereço
foi recebido
eu2C SLAVE, ENDEREÇO DE 10 BIT, TRANSMISSÃO (SEN = 0, AHEN = 0, DHEN = 0)
PIC18 (L) F2X / 4XK22
DS41412B-page 235
PIC18 (L) F2X / 4XK22
15.5.6 ALONGAMENTO DO RELÓGIO 15.5.6.2 Modo de endereçamento de 10 bits
O alongamento do clock ocorre quando um dispositivo no barramento No modo de endereçamento de 10 bits, quando o bit UA é
mantém a linha SCLx baixa, pausando efetivamente a comunicação. O definido, o relógio está sempre esticado. Esta é a única vez que o
escravo pode esticar o relógio para permitir mais tempo para lidar SCLx é esticado sem que o CKP seja apagado. SCLx é liberado
com os dados ou preparar uma resposta para o dispositivo mestre. imediatamente após uma gravação em SSPxADD.
Um dispositivo mestre não se preocupa com o alongamento, pois
Observação: As versões anteriores do módulo não
sempre que estiver ativo no barramento e não estiver transferindo
estique o relógio se o segundo byte de endereço não
dados, ele estará se alongando. Qualquer alongamento feito por um
corresponder.
escravo é invisível para o software mestre e manipulado pelo
hardware que gera o SCLx. 15.5.6.3 Byte NACKing
O bit CKP do registro SSPxCON1 é usado para controlar o
Quando o bit AHEN de SSPxCON3 é definido; O CKP é limpo pelo
alongamento no software. Sempre que o bit CKP for
hardware após a oitava borda descendente de SCLx para um byte
apagado, o módulo aguardará até que a linha SCLx diminua
de endereço correspondente recebido. Quando o bit DHEN de
e, em seguida, o reterá. A configuração do CKP liberará o
SSPxCON3 é definido; O CKP é limpo após a oitava borda
SCLx e permitirá mais comunicação.
descendente de SCLx para os dados recebidos.
15.5.6.1 Alongamento do relógio normal O alongamento após a 8ª borda descendente de SCLx
permite que o escravo olhe para o endereço ou dados
Após um ACK se o bit R / W de SSPxSTAT estiver definido, uma
recebidos e decida se deseja ACK os dados recebidos.
solicitação de leitura, o hardware escravo limpará o CKP. Isso
permite que o escravo atualize o SSPxBUF com os dados a serem 15.5.7 SINCRONIZAÇÃO DO RELÓGIO E O
transferidos para o mestre. Se o bit SEN de SSPxCON2 estiver BIT CKP
definido, oeslavoO hardware sempre esticará o relógio após a
sequência ACK. Assim que o escravo estiver pronto; O CKP é Sempre que o bit CKP for apagado, o módulo aguardará
definido pelo software e a comunicação é retomada. até que a linha SCLx diminua e, em seguida, o reterá. No
entanto, limpar o bit CKP não ativará a saída SCLx baixa
Nota 1: O bit BF não tem efeito sobre se o até que a saída SCLx já tenha sido amostrada como
relógio será esticado ou não. Isso é baixa. Portanto, o bit CKP não ativará a linha SCLx até
diferente das versões anteriores do que um I externo2O dispositivo mestre C já afirmou a
módulo que não estenderiam o relógio, linha SCLx. A saída SCLx permanecerá baixa até que o bit
limpar CKP, se SSPxBUF fosse lido antes CKP seja definido e todos os outros dispositivos no I2O
da 9ª borda descendente de SCLx. barramento C lançou o SCLx. Isso garante que uma
2: As versões anteriores do módulo não gravação no bit CKP não viole o requisito de tempo
estique o relógio para uma transmissão se máximo mínimo para SCLx (consulte a Figura 15-22).
SSPxBUF foi carregado antes da 9ª borda
descendente de SCLx. Agora está sempre limpo
para solicitações de leitura.
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q2 Q3 Q4 Q1 Q2 Q3 Q4
SDAx DX DX ‚- 1
SCLx
Dispositivo mestre
CKP afirma relógio
Dispositivo mestre
relogio de lançamentos
WR
SSPxCON1
SCLx
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
S
SSPxIF
BF (SSPxSTAT <0>)
SSPxBUF é lido
GCEN (SSPxCON2 <7>)
'1'
Este registro é redefinido para todos '1 's sob qualquer condição
de Reset e, portanto, não tem efeito na operação SSPx padrão
até que seja escrito com um valor de máscara.
O modo mestre é habilitado configurando e apagando os O dispositivo mestre gera todos os pulsos de relógio serial e as
bits SSPxM apropriados no registro SSPxCON1 e condições de partida e parada. Uma transferência é encerrada
configurando o bit SSPxEN. No modo Master, as linhas com uma condição de parada ou com uma condição de início
SCLx e SDAx são definidas como entradas e são repetido. Uma vez que a condição de início repetido também é o
manipuladas pelo hardware MSSPx. início da próxima transferência serial, o I2O barramento C não
será liberado.
O modo mestre de operação é suportado pela geração de
interrupções na detecção das condições de partida e parada. Os No modo Transmissor Mestre, os dados seriais são enviados por
bits de parada (P) e partida (S) são apagados de uma meio do SDAx, enquanto o SCLx fornece o relógio serial. O
reinicialização ou quando o módulo MSSPx é desabilitado. primeiro byte transmitido contém o escravoadicionarressente o
Controle do eu2O barramento C pode ser usado quando o bit P do dispositivo receptor (7 bits) e o bit de leitura / gravação (R /
está definido ou o barramento está inativo. W). Neste caso, o bit R / W será lógico '0 '. Os dados seriais são
transmitidos em 8 bits por vez. Após cada byte ser transmitido,
No modo Firmware Controlled Master, o código do usuário
um bit de reconhecimento é recebido. As condições de início e
conduz todos os I2Operações do barramento C com base na
parada são emitidas para indicar o início e o fim de uma
detecção de condição de bit de partida e parada. A detecção de
transferência serial.
condição de partida e parada é o único circuito ativo neste modo.
Todas as outras comunicações são feitas pelo software do No modo Master Receive, o primeiro byte transmitido
usuário, manipulando diretamente as linhas SDAx e SCLx. contém o escravo advestido da transmissãotidispositivo (7
bits) e o bit R / W. Neste caso, o bit R / W será lógico '1 '.
Os eventos a seguir farão com que o bit da Sinalização de interrupção Assim, o primeiro byte transmitido é um endereço escravo
SSPx, SSPxIF, seja definido (interrupção SSPx, se habilitada): de 7 bits seguido por um '1 ' para indicar o bit de recepção.
Os dados seriais são recebidos via SDAx, enquanto o SCLx
• Condição inicial detectada
gera o relógio serial. Os dados seriais são recebidos 8 bits
• Condição de parada detectada
por vez. Depois que cada byte é recebido, um bit de
• Byte de transferência de dados transmitido / recebido
reconhecimento é transmitido. As condições de início e
• Confirmar transmitido / recebido parada indicam o início e o fim da transmissão.
• Início repetido gerado Um gerador de taxa de transmissão é usado para definir a saída
Nota 1: O módulo MSSPx, quando configurado em de frequência de clock no SCLx. VerSeção 15.7 “Gerador de taxa
eu2Modo C Master, não permite de transmissão” para mais detalhes.
enfileiramento de eventos. Por exemplo, o
usuário não tem permissão para iniciar uma
condição inicial e escrever imediatamente o
registro SSPxBUF para iniciar a transmissão
antes que a condição inicial seja concluída.
Neste caso, o SSPxBUF não será gravado e o
bit WCOL será definido, indicando que uma
gravação no SSPxBUF não ocorreu
SDAx DX DX ‚- 1
SCLx
Reduções de BRG em
Ciclos Q2 e Q4
BRG
03h 02h 01h 00h (espera) 03h 02h
Valor
O bit de gravação para SEN ocorre aqui Definir bit S (SSPxSTAT <3>)
TBRG
SCLx
S
TBRG
SDAx 1º bit
TBRG
SCLx
Sr TBRG
Início Repetido
A transmissão de um byte de dados, um endereço de 7 bits ou a No modo de transmissão, o bit ACKSTAT do registro
outra metade de um endereço de 10 bits é realizada SSPxCON2 é cleared quando o escravo enviou um
simplesmente escrevendo um valor no registrador SSPxBUF. Esta reconhecimento (ACK = 0) e é definido quando o escravo
ação definirá o bit de sinalizador Buffer Cheio, BF, e permitirá não reconhece (ACK = 1). Um escravo envia um
que o Gerador de Baud Rate comece a contar e inicie a próxima Reconhecimento quando reconhece seu endereço
transmissão. Cada bit de endereço / dados será deslocado para o (incluindo uma chamada geral) ou quando o escravo
pino SDAx depois que a borda descendente de SCLx for recebe seus dados corretamente.
declarada. SCLx é mantido baixo para uma contagem de rollover
15.6.6.4 Sequência de transmissão típica:
do gerador de taxa de transmissão (TBRG) Os dados devem ser
válidos antes que o SCLx seja liberado alto. Quando o pino SCLx é 1. O usuário gera uma condição de início definindo
liberado alto, ele é mantido dessa forma para TBRG. Os dados no o bit SEN do registro SSPxCON2.
pino SDAx devem permanecer estáveis por essa duração e 2. SSPxIF é definido pelo hardware na conclusão da
algum tempo de espera após a próxima borda descendente de inicialização.
SCLx. Depois que o oitavo bit é deslocado para fora (a borda
3. SSPxIF é limpo pelo software.
descendente do oitavo relógio), o sinalizador BF é limpo e o
4. O módulo MSSPx aguardará a hora de início necessária
mestre libera o SDAx. Isso permite que oslave dispositivo sendo
antes que qualquer outra operação ocorra.
endereçado para responder com um bit ACK durante o nono
tempo de bit se ocorrer uma correspondência de endereçourred, 5. O usuário carrega o SSPxBUF com o endereço do
ou se os dados foram recebidos corretamente. O status de ACK é escravo para transmitir.
escrito no bit ACKSTAT na transição positiva do nono relógio. Se o 6. O endereço é deslocado para fora do pino SDAx até que
mestre receber um reconhecimento, o bit de status de todos os 8 bits sejam transmitidos. A transmissão
reconhecimento, ACKSTAT, é apagado. Caso contrário, o bit está começa assim que SSPxBUF é gravado.
definido. Após o nono clock, o bit SSPxIF é definido e o clock 7. O módulo MSSPx muda no bit ACK do dispositivo
mestre (Baud Rate Generator) é suspenso até que o próximo byte escravo e escreve seu valor no bit ACKSTAT do
de dados seja carregado no SSPxBUF, deixando SCLx baixo e registro SSPxCON2.
SDAx inalterado (Figura 15-27).
8. O módulo MSSPx gera uma interrupção no final
Após a gravação no SSPxBUF, cada bit do endereço será do nono ciclo do relógio, definindo o bit SSPxIF.
deslocado na quedag borda de SCLx até que todos os
sete bits de endereço e o bit R / W sejam concluídos. Na 9. O usuário carrega o SSPxBUF com oito bits de
borda descendente do oitavo relógio, o mestre irá liberar dados.
o pino SDAx, permitindo que o escravo responda com 10. Os dados são deslocados para fora do pino SDAx até que todos os 8 bits
um reconhecimento. Na borda descendente do nono sejam transmitidos.
relógio, o mestre irá amostrar o pino SDAx para ver se o
11. O módulo MSSPx muda no bit ACK do
address foi reconhecido por um escravo. O status do bit ACK
dispositivo escravo e escreve seu valor no bit
é carregado no bit ACKSTAT Status do registro SSPxCON2.
ACKSTAT do registro SSPxCON2.
Seguindo a borda descendente da nona transmissão de
12. Os passos 8-11 são repetidos para todos os bytes de dados
relógio do endereço, o SSPxIF é definido, o sinalizador BF é
limpo e o Gerador de taxa de transmissão é desligado até transmitidos.
que outra gravação no SSPxBUF ocorra, mantendo SCLx 13. O usuário gera uma condição de Parada ou
baixo e permitindo que SDAx flutue. Reinício configurando os bits PEN ou RSEN do
registro SSPxCON2. A interrupção é gerada assim
15.6.6.1 Sinalizador de status BF que a condição Parar / Reiniciar for concluída.
No modo de transmissão, o bit BF do registro SSPxSTAT é
definido quando a CPU grava em SSPxBUF e é limpo quando
todos os 8 bits são deslocados.
SDAx A7 A6 A5 A4 A3 A2 A1 ACK = 0 D7 D6 D5 D4 D3 D2 D1 D0
SCLx 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
S P
SCLx mantido baixo
enquanto CPU
responde a SSPxIF
SSPxIF
Apagado pela rotina de serviço de
Apagado por software software da interrupção SSPx
Apagado por software
Preliminares
BF (SSPxSTAT <0>)
SEN
CANETA
R/W
FORMA DE ONDA DO MODO MASTER I2C (TRANSMISSÃO, ENDEREÇO DE 7 OU 10 BITS)
PIC18 (L) F2X / 4XK22
DS41412B-page 243
PIC18 (L) F2X / 4XK22
15.6.7 I2RECEPÇÃO DO MODO C MASTER 15.6.7.4 Sequência de recebimento típica:
A recepção do modo mestre é habilitada programando- 1. O usuário gera uma condição de início definindo
se o bit ReceiveEnable, RCEN, do registro SSPxCON2. o bit SEN do registro SSPxCON2.
Observação: O módulo MSSPx deve estar em um estado 2. SSPxIF é definido pelo hardware na conclusão da
Idle antes que o bit RCEN seja definido ou o bit inicialização.
RCEN será desconsiderado. 3. SSPxIF é limpo pelo software.
O Baud Rate Generator começa a contar e em cada rollover, o 4. O usuário escreve SSPxBvocêF com o endereço do escravo a
estado do pino SCLx muda (alto para baixo / baixo para alto) e os transmitir e o bit R / W definido.
dados são transferidos para o SSPxSR. Após a borda descendente 5. O endereço é deslocado para fora do pino SDAx até que
do oitavo relógio, o sinalizador de habilitação de recebimento é todos os 8 bits sejam transmitidos. A transmissão
automaticamente limpo, o conteúdo do SSPxSR é carregado no começa assim que SSPxBUF é gravado.
SSPxBUF, o bit de sinalizador BF é definido, o bit de sinalizador 6. O módulo MSSPx muda no bit ACK do dispositivo
SSPxIF é definido e o Gerador de taxa de transmissão é suspenso escravo e escreve seu valor no bit ACKSTAT do
da contagem , mantendo SCLx baixo. O MSSPx está agora no registro SSPxCON2.
estado Ocioso aguardando o próximo comando. Quando o buffer 7. O módulo MSSPx gera uma interrupção no final
é lido pela CPU, o bit da bandeira BF é automaticamente do nono ciclo do relógio, definindo o bit SSPxIF.
apagado. O usuário pode então enviar um bit de reconhecimento
no final da recepção, configurando o bit de habilitação de
8. O usuário configura o bit RCEN do registro SSPxCON2 e
sequência de reconhecimento, ACKEN, do registro SSPxCON2.
os relógios Master em um byte do escravo.
9. Após a 8ª borda descendente de SCLx, SSPxIF e BF são
15.6.7.1 Bandeira de status BF definidos.
10. O mestre limpa SSPxIF e lê o byte recebido de SS
Na operação de recepção, o bit BF é definido quando um
PxUF, limpa BF.
endereço ou byte de dados é carregado em SSPxBUF a partir de
SSPxSR. É limpo quando o registro SSPxBUF é lido. 11. O mestre define o valor ACK enviado ao escravo
no bit ACKDT do registro SSPxCON2 e inicia o
15.6.7.2 Sinalizador de status SSPxOV ACK por setting o bit ACKEN.
Na operação de recepção, o bit SSPxOV é definido quando 8 bits 12. Masters ACK é sincronizado para o escravo e
são recebidos no SSPxSR e o bit de sinalizador BF já está definido SSPxIF é definido.
a partir de uma recepção anterior. 13. O usuário limpa SSPxIF.
14. Os passos 8-13 são repetidos para cada byte
15.6.7.3 Sinalizador de status WCOL recebido do escravo.
Se o usuário grava o SSPxBUF quando um recebimento já 15. O Mestre envia um não ACK ou Parar para encerrar a
está em andamento (ou seja, SSPxSR ainda está mudando comunicação.
em um byte de dados), o bit WCOL é definido e o conteúdo
do buffer permanece inalterado (a gravação não ocorre).
Mestre de ônibus
ACK não foi enviado
termina
transferir
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
SCLx S P
Dados deslocados na borda descendente de CLK Definir SSPxIF no final do
recebimento Definir interrupção SSPxIF
Definir interrupção SSPxIF no final de Acknow-
Definir interrupção SSPxIF ledge sequência
no final do recebimento
no final da sequência de
SSPxIF reconhecimento
Definir bit P
Apagado por software Apagado por software Apagado por software
SDAx = 0, SCLx = 1 Apagado por software Apagado em (SSPxSTAT <4>)
Programas e SSPxIF
enquanto CPU
responde a SSPxIF
Preliminares
BF
O último bit é deslocado para SSPxSR e o
(SSPxSTAT <0>)
conteúdo é descarregado para SSPxBUF
SSPxOV
ACKEN
FORMA DE ONDA DO MODO MASTER I2C ™ (RECEPÇÃO, ENDEREÇO DE 7 BIT)
RCEN
Mestre configurado como receptor RCEN apagado ACK do Mestre RCEN apagado
programando SSPxCON2 <3> (RCEN = 1) automaticamente SDAx = ACKDT = 0 automaticamente
PIC18 (L) F2X / 4XK22
DS41412B-page 245
PIC18 (L) F2X / 4XK22
15.6.8 RECONHECER O TEMPO DE 15.6.9 TEMPO DE CONDIÇÃO DE PARADA
SEQUÊNCIA Um bit de parada é declarado no pino SDAx no final de uma
Uma sequência de reconhecimento é habilitada recepção / transmissão configurando o bit de habilitação de
configurando o bit de ativação de sequência de sequência de parada, PEN, do registro SSPxCON2. No final de
reconhecimento, ACKEN, do registro SSPxCON2. Quando uma recepção / transmissão, a linha SCLx é mantida baixa após a
este bit é definido, o pino SCLx é puxado para baixo e o borda descendente do nono relógio. Quando o bit PEN é
conteúdo do bit de dados de reconhecimento é apresentado definido, o mestre afirmará a linha baixa do SDAx. Quando a
no pino SDAx. Se o usuário deseja gerar um reconhecimento, linha SDAx é amostrada baixa, o Gerador de Baud Rate é
o bit ACKDT deve ser apagado. Caso contrário, o usuário recarregado e faz a contagem regressiva até '0 '. Quando o Baud
deve definir o bit ACKDT antes de iniciar uma sequência de Rate Generator atinge o tempo limite, o pino SCLx será elevado e
reconhecimento. O Gerador de Baud Rate então conta para um TBRG (Contagem de rollover do gerador de taxa de
um período de rollover (TBRG) e o pino SCLx está desativado transmissão) posteriormente, o pino SDAx será desativado.
(puxado para cima). Quando o pino SCLx é amostrado alto Quando o pino SDAx é amostrado alto enquanto SCLx é alto, o bit
(arbitragem de relógio), o Gerador de Baud Rate conta para T P do registro SSPxSTAT é definido. NOBRG posteriormente, o bit
BRG. O pino SCLx é então puxado para baixo. Em seguida, o PEN é limpo e o bit SSPxIF é definido (Figura 15-30).
bit ACKEN é apagado automaticamente, o Gerador de Baud
Rate é desligado e o módulo MSSPx entra no modo Idle 15.6.9.1 Sinalizador de status WCOL
(Figura 15-29). Se o usuário gravar o SSPxBUF quando uma sequência de
parada estiver em andamento, o bit WCOL será definido e o
15.6.8.1 Sinalizador de status WCOL conteúdo do buffer não será alterado (a gravação não
Se o usuário gravar o SSPxBUF quando uma sequência de ocorre).
reconhecimento estiver em andamento, o WCOL será
definido e o conteúdo do buffer não será alterado (a
gravação não ocorre).
SCLx 8 9
SSPxIF
Apagado em
SSPxIF definido em
Apagado em Programas
o fim de receber
Programas SSPxIF definido no final
da sequência de reconhecimento
Observação: TBRG = um período do gerador de taxa de transmissão.
Escreva para SSPxCON2, SCLx = 1 para TBRG, seguido por SDAx = 1 para TBRG
definir PEN após SDAx amostrado alto. O bit P (SSPxSTAT <4>) está definido.
SDAx ACK
P
TBRG TBRG TBRG
SCLx elevado após TBRG
SDAx afirmado baixo antes da borda ascendente do relógio para
configurar a condição de parada
• Transferência de endereço
• Transferência de dados
SDAx
interrupção (BCLxIF)
BCLxIF
Se o pino SDAx já estiver baixo, ou o pino SCLx já um fator durante uma condição de partida é que
estiver baixo, todos os seguintes ocorrerão: dois mestres de barramento não podem declarar
uma condição de partida ao mesmo tempo.
• a condição inicial é abortada,
Portanto, um mestre sempre ativará o SDAx antes
• o sinalizador BCLxIF é definido e
do outro. Esta condição não causa uma colisão de
• o módulo MSSPx é redefinido para seu estado Inativo barramento porque os dois mestres devem ter
(Figura 15-32). permissão para arbitrar o primeiro endereço após
A condição inicial começa com os pinos SDAx e SCLx a condição inicial. Se o endereço for o mesmo, a
desativados. Quando o pino SDAx é amostrado alto, o Baud arbitragem deve ser permitida para continuar na
Rate Generator é carregado e faz a contagem regressiva. Se parte de dados, condições de início ou parada
o pino SCLx for amostrado baixo enquanto SDAx estiver alto, repetidas.
ocorre uma colisão de barramento porque é assumido que
outro mestre está tentando conduzir um dado '1 ' durante a
condição inicial.
SDAx
SCLx
Definir SEN, habilitar condição inicial SEN apagado automaticamente devido a colisão de ônibus. O módulo
se SDAx = 1, SCLx = 1 SSPx foi redefinido para o estado Inativo.
SEN
SDAx com amostra baixa antes
Condição inicial. Defina BCLxIF.
S bit e SSPxIF definidos
BCLxIF porque SDAx = 0, SCLx = 1
SSPxIF
SDAx = 0, SCLx = 1
TBRG TBRG
SDAx
BCLxIF
Interrupção liberada
por software
S '0' '0'
FIGURA 15-35: REINICIALIZAÇÃO DE BRG DEVIDO À ARBITRAGEM SDA DURANTE A CONDIÇÃO DE INÍCIO
SDAx = 0, SCLx = 1
Conjunto S Definir SSPxIF
Menor que TBRG
TBRG
SCLx S
SCLx diminuiu após o tempo
limite de BRG
SEN
Definir SEN, ativar sequência de início
se SDAx = 1, SCLx = 1
BCLxIF '0'
SSPxIF
SDAx = 0, SCLx = 1, Interrupções apagadas
definir SSPxIF por software