Continuação :
Dando continuidade com o nosso trabalho sobre o uso e configuração das I/Os dos microcontroladores da Zilog linha Z8 Encore, vamos falar mais um pouco dos periféricos e outras particularidades do microcontrolador e desenvolver algum exemplo prático.
Configurando os I/Os para operação de funções alternativas.
Quando os pinos de I/Os são configurados para operação de funções alternativas, é dado acesso a funções especiais do microcontrolador como os TIMERS, Comunicação serial e demais periféricos. Para definir as I/Os para operação de funções alternativas, o registro de endereço do port em questão, deve ser definido como tipo de função alternativa que se queira naquele pino ou port e o registro de controle deve ser preenchido com valores pertinentes aos pinos do port específico envolvido com a função que se deseja usar nesse pino. A tabela a seguir lista as funções alternativas associadas com cada pino do port dos microcontroladores Z8 Encore XP.
Tabela – Mapeamento de funções alternativas dos PORTS
PORT | Pino | Mnemônico | Descrição da função alternativa | |||
PORTA | PA0 | T0IN | Entrada do timer 0 | |||
PA1 | T0OUT | Saída do timer 0 | ||||
PA2 | N/A | Sem função alternativa | ||||
PA3 | CTS0 (Ativo EM 0) | UART 0 limpa antes de enviar | ||||
PA4 | RXD0/IRRX0 | UART 0/IrDA 0 recebe dados | ||||
PA5 | TXD0/IRTX0 | UART 0/IrDA 0 transmite dados | ||||
PA6 | SCL | I²C clock ( OPEN-DRAIN automaticamente) | ||||
PA7 | SDA | I²C Data ( Open-drain automaticamente ) | ||||
PORTB | PB0 | ANA0 | Entrada analógica do ADC | |||
PB1 | ANA1 | Entrada analógica do ADC | ||||
PB2 | ANA2 | Entrada analógica do ADC | ||||
PB3 | ANA3 | Entrada analógica do ADC | ||||
PB4 | ANA4 | Entrada analógica do ADC | ||||
PB5 | ANA5 | Entrada analógica do ADC | ||||
PB6 | ANA6 | Entrada analógica do ADC | ||||
PB7 | ANA7 | Entrada analógica do ADC | ||||
PORTC | PC0 | T1IN | Entrada do Timer 1 | |||
PC1 | T1OUT | Saída do Timer 1 | ||||
PC2 | SS (ATIVO EM 0 ) | SPI seletor de escravo | ||||
PC3 | SCK | SPI serial clock | ||||
PC4 | MOSI | SPI saída mestre, entrada escravo | ||||
PC5 | MISO | SPI entrada mestre, saída escravo | ||||
PC6 | T2IN | entrada do Timer 2 | ||||
PC7 | T2OUT | Saída do Timer 2 | ||||
PORTD | PD0 | T3IN | Entrada do Timer 3 | |||
PD1 | T3OUT | Saída do Timer 3 | ||||
PD2 | N/A | Sem função alternativa | ||||
PD3 | N/A | Sem função alternativa | ||||
PD4 | RXD1/IRRX1 | UART 1/ IrDA 1 recebe dados | ||||
PD5 | TXD1/IRTX1 | UART 1/ IrDA 1 transmite dados | ||||
PD6 | CTS1 (Ativo em 0 ) | UART 1 limpa para enviar | ||||
PD7 | RCOUT | Saída do oscilador RC do timer watch-dog | ||||
PORTE | PE[7:0] | N/A | Sem função alternativa | |||
PORTF | PF[7:0] | N/A | Sem função alternativa | |||
PORTG | PG[7:0] | N/A | Sem função alternativa | |||
PORTH | PH0 | ANA8 | Entrada analógica do ADC | |||
PH1 | ANA9 | Entrada analógica do ADC | ||||
PH2 | ANA10 | Entrada analógica do ADC | ||||
PH3 | ANA11 | Entrada analógica do ADC |
Por exemplo, digamos que se decida usar o periférico Timer 0 do microcontrolador Z8 Encore XP, configurando ou definindo o pino do PORTA para operação de função alternativa. Só e somente a função de saída no pino é considerado nesse exemplo.
O código do exemplo 1, mostra como é configurado ou definido o pino PA1 do PORTA para operação de função alternativa configurando os bits apropriados no registradores adequados.
Exemplo 1 :
/***************************************************/
// inicialização //
/***************************************************/
PAADDR = 0x02 ; // Registro do endereço do PORTA seleciona sub-registro de função alternativa.
PACTL |= 0X02 ; // Registro de controle do PORTA seta saída do TIMER0.
PAADDR = 0X01 ; // Registro de endereço do PORTA sub-registro de direção de dados.
PACTL &= 0Xfd ; // Registro de controle do PORTA define bit 1 como saída, se Timer 0 selecionado.
PAADDR = 0X03 ; // Registro de endereço do PORTA seleciona o sub-registro de controle de saída.
PACTL &= 0Xfd ; // Registro de controle do PORTA define o bit 1 como push-pull.
PAADDR = 0X00 ; // Permite bloquear os sub-registros contra alterações inadvertidas depois de
configurados.
Exemplo 2 :
/*****************************************************/
// Inicialização //
/*****************************************************/
PAADDR = 0X02 ; // Registro de endereço do PORTA seleciona sub-registro de função alternativa.
PACTL |= 0X01 ; // Registro de controle do PORTA define entrada do Timer0.
PAADDR = 0X01 ; // Registro de endereço do PORTA seleciona sub-registro de direção de dados.
PACTL |= 0X01 ; // Registro de controle do PORTA define bit 0 como entrada, se Timer 0 selecionado.
PAADDR = 0X00 ; // Permite bloquear os sub-registros contra alterações inadvertidas depois de
configurados.
NOTA: Os registros dos ports de A~H selecionam as funcionalidades dos I/Os acessíveis através dos registros de controle dos ports de A~H. Definindo os pinos dos ports como 1 nos registros dos endereços dos ports de A~H, através dos registros de controle dos ports, habilita o port correspondente para operação de função alternativa.
Definindo as I/Os como operação de modo misto.
Agora que aprendemos como definir os pinos dos microcontroladores Z8 Encore como entrada, saída e operação de função alternativa, temos, aqui, um exemplo de como usar, simultaneamente, pinos diferentes no mesmo PORT como entrada, saída e operação de função alternativa.
Por exemplo, assuma que você queira usar o pino do Timer 0 como saída definindo isso no pino PA1 do PORTA. Deseja-se usar os pinos PA4 e PA5 como entrada, deseja-se, também, usar os pinos PA6 e PA7 como saídas dreno aberto. Depois de definir isso nos registradores, você deseja ler dados dos pinos [4,5] e escrever dados nos pinos [6,7] com lógica [1,0].
O código a seguir ilustra melhor como configurar o PORTA para operação mista.
/******************************************************************************/
// Inicialização //
/*****************************************************************************/
PAADDR = 0x02 ; // Registro de endereço do PORTA seleciona sub-registro de função alternativa.
PACTL |= 0x02 ; // Registro de controle do PORTA define saída do Timer 0, demais pinos livres como I/O.
PAADDR = 0x01 ; // Registro de endereço do PORTA seleciona sub-registro de direção de dados.
PACTL &= 0x3d ; //3d = 00111101 define os bits 1,6 e 7 como saída e os pinos 4 e 5, como entrada.
PAADDR = 0X03 ; // Registro de endereço do PORTA seleciona o sub-registro de controle de saída.
PACTL &= 0Xfd ; // Registro de controle do PORTA define o bit 1 como push-pull.
PAADDR = 0X00 ; // Permite bloquear os sub-registros contra alterações inadvertidas depois de configurados.
data = code ; // Lê os dados do registro de entrada do PORTA para dentro da variável 'data'.
data = data & 0x03 ; // Faz uma operação lógica AND com 00110000 para mascarar os valores dos bits 4 e 5.
PAOUT = data | 0x40 ; //Faz uma operação lógica OR do valor em data com 01000000 e escreve no registro de saída do PORTA para setar os bits [6,7] para [1,0].
Conclusão :
Os pinos de I/Os são facilmente configuráveis usando os registros de endereços de ports junto com os registros de controle dos ports e seus respectivos sub-registros como explicado nesse documento.
O pino de qualquer I/O pode ser usado como fonte de interrupção externa quando configurados, somente, como entrada.
A tabela neste documento, acima descrita, demonstra que as funções de periféricos on-chip dos microcontroladores Z8 Encore XP depende de posição de bitsnos ports.
O acesso aos I/Os dos ports é feito através do registro de dados de entrada e de saída.
Nesse ponto, finalizamos a parte de ensinar a acessar, configurar e usar os recursos de pinos e periféricos dos microcontroladores da Zilog para quem tivesse alguma dúvida. Nos posts seguintes, estarei procurando implementar algumas aplicações de exemplos para que o que foi ensinado possa ser visto no mundo real e ajudar aos demais a entenderem o fascinante mundo dos microcontroladores, em especial, os da zilog, a projetarem seus circuitos e projetos. Espero que tenham gostado e até a terceira parte dessa série.