Busque no blog

segunda-feira, 8 de abril de 2013

Zilog - Usando os pinos de I/Os dos Microcontroladores Z8 encore XP - parte 2

Zilog - (PS0199) - Aprenda a usar as I/Os desse microcontrolador. Parte 2



         
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.