Como exemplo segue parte da rotina SENSMAT do MSX
...
1459 OUT (0AAh),A
145B IN A,(0A9h)
...
Nos TKs (e ZXs) a seleção da linha é feita utilizando-se a parte alta das linhas de endereço, o que implica que a seleção da linha ocorre na mesma instrução que a leitura.
...
;; KEY-LINE
L0296: IN A,(C)
...
Nos TKs o clock do Z80 é de aproximadamente 3,57MHz, o que significa que cada ciclo de clock dura aproximadamente 280ns.
Olhando-se o diagrama de temporização do manual do Z80 podemos então ter uma idéia da temporização envolvida na leitura do teclado dos TKs:
A execução da instrução "IN" dura 4 ciclos de clock : T1, T2, TW e T3.
Logo no início do ciclo T1, o Z80 ativa a linha de endereços. Nesse momento acontece a seleção da linha. A partir deste momento, o barramento de endereços fica estável até o final da execução.
Logo após o início do ciclo T2, os sinis /IORQ e /RD são ativados. Só a partir deste momento é que é possível identificar que o TK está fazendo a leitura do teclado.
Ao final do ciclo T2 o Z80 insere automaticamente o ciclo de espera TW. É neste momento (mais precisamente na borda de descida do CLOCK) que o Z80 faz a amostragem do sinal /WAIT. O tempo transcorrido desde a descida do sinal de /IORQ à amostragem do sinal de /WAIT é de aproximadamente 390ns
Quando acontece a borda de descida do sinal de CLOCK no ciclo D3 o Z80 amostra o estado das colunas, Mas note que é necessário que o sinal de dados seja válido um pouco antes, para que o Z80 consiga armazenar internamente o estado das linhas de dado (tempo de acomodação). Com isso o tempo transcorrido entre a descida do sinal de /IORQ e os dados estarem estáveis no barramento para serem lidos pelo Z80 é de aproximadamente 600ns
Um pouco após a leitura, ainda no ciclo T3 os sinais/ IORQ e /RD são desativados.
Em resumo:
- O tempo de resposta para a ativação do sinal /WAIT do Z80, caso este seja utilizado, é de apenas 390ns
- O tempo de resposta necessário para ativar o valor das colunas (teclas) no barramento do Z80 é de apenas 600ns
Estes tempos caem para 350ns e 560ns se considerarmos uns 40ns de atraso nas lógicas de decodificação.
Para se ter uma idéia dos requisitos necessários a um microcontrolador para atender a estes tempos, vamos considerar alguns exemplos:
AVR:
A latência mínima para atender a uma interrupção é de 7 ciclos de clock
Para acionar um pino de saída, no caso o WAIT são necessários mais pelo menos 2 ciclos de clock. No total temos então 9 pulsos de clock.
Para atender isso em menos de 350ns o AVR precisaria de um clock de aproximadamente 26MHz
...
IRQ: ; 7 ciclos de latencia
cbi PORTB,WAITPIN ; 2 ciclos de clock
...
...
IRQ: ; 7 ciclos de latencia
in SavStatus,SREG ; +1 Salva Status
in YL,PIND ; +1 lê o valor das linhas A8..A15
ld temp,Y ; +2 temp=memoria[YH:YL]->prepara dado
out DDRB,temp ; +1 escreve dado
;=12 ciclos
...
Nenhum comentário:
Postar um comentário