Z80 PIO Funcionamento
Z80 PIO Funcionamento
Z80 PIO Funcionamento
TABLE OF CONTENTS
Chapter 2. Architecture
2.0 Overview ............................................ 4
Chapter 5. Timing
5.0 Output Mode (Mode 0).......................... 12
5.1 Input Mode (Mode 1)..........................… 13
5.2 Bidirectional Mode (Mode 2)...............… 13
5.3 Control Mode (Mode 3)......................... 14
Chapter 7. Applications
7.0 Extending the Interrupt Daisy Chain....... 18
7.1 I/O Device Interface............................... 18
7.2 Control interface.................................... 19
1.0 INTRODUCTION
O circuito Z8O Parallel I/O (PlO) é um dispositivo programável de duas portas que fornece uma
interface compatível com TTL entre dispositivos periféricos e o Z80-GPU. A CPU pode
configurar o Z8O-PIO para interagir com uma ampla gama de dispositivos periféricos sem
necessidade de outra lógica externa. Dispositivos periféricos típicos totalmente compatíveis com
o Z80-PIO incluem a maioria dos teclados, leitores de fita de papel e furadores, impressoras,
programadores PROM , etc. O Z8O-PIO é empacotado em um DIP de 40 pinos, ou um PLCC de
44 pinos, ou um OFP de 44 pinos. Versões NMOS e CMOS também estão disponíveis. As
principais características do Z80-PlO incluem.
Uma das características exclusivas do Z80-PlO que o separa de outros controladores de interface
é que toda a transferência de dados entre o dispositivo periférico e a CPU é realizada sob total
controle de interrupção. A lógica de interrupção do PIO permite o uso total das capacidades de
interrupção eficientes do Z80-CPU durante as transferências I/0. Toda a lógica necessária para
implementar uma estrutura de interrupção totalmente aninhada é incluída no PIO para que
circuitos adicionais não sejam necessários. Outra característica única do PlO é que ele pode ser
programado para interromper a CPU na ocorrência de condições de status especificadas no
dispositivo periférico. Por exemplo, o PlO pode ser programado para interromper se ocorrer
alguma condição de alarme periférico especificada. Esta capacidade de interrupção reduz a
quantidade de tempo que o processador deve gastar na sondagem do status periférico.
1.1 CARACTERÍSTICAS
• Qualquer um dos quatro modos distintos de operação pode ser selecionado para uma porta,
incluindo.
- Saída de bytes
- Entrada de bytes
- Barramento bidirecional de byte (disponível apenas na porta A)
- Modo de controle de bits.
Tudo com aperto de mão controlado por interrupção
• Lógica de interrupção prioritária Daisy Chain incluída para fornecer vetorização de interrupção
automática sem lógica externa.
A lógica de Port I/O é composta por 6 registradores com lógica de controle “hand-shake”
conforme mostrado na Figura 2-2. Os registros incluem um registro de entrada de dados de 8
bits, um registro de saída de dados de 8 bits, um registro de controle de modo de 2 bits, um
registro de máscara de 8 bits, um registro de seleção de entrada/saída de 8 bits e um registro
de controle de máscara de 2 bits .
O registro de controle de modo de 2 bits é carregado pela CPU para selecionar o modo de
operação desejado (saída de byte, entrada de byte, barramento bidirecional de byte ou modo de
controle de bit). Toda a transferência de dados entre o dispositivo periférico e a CPU é realizada
através dos registros de entrada e saída de dados. Os dados podem ser escritos no registrador
de saída pela CPU ou lidos de volta para a CPU a partir do registrador de entrada a qualquer
momento. As linhas de handshake associadas a cada porta são usadas para controlar a
transferência de dados entre o PIO e o dispositivo periférico.
Quando uma interrupção é aceita pela CPU no Modo 2, o dispositivo de interrupção deve
fornecer um vetor de interrupção de 8 bits para a CPU. Este vetor é usado para formar um
ponteiro para um local na memória do computador onde o endereço da rotina do serviço de
interrupção está localizado. O vetor de 8 bits do dispositivo de interrupção forma os oito bits
menos significativos do ponteiro indireto, enquanto o Registro I na CPU fornece os oito bits mais
significativos do ponteiro. Cada porta (A e B) possui um vetor de interrupção independente. O
bit menos significativo do vetor é automaticamente definido como 0 dentro do PIO, pois o
ponteiro deve apontar para dois isolamentos de memória adjacentes para um endereço
completo de 16 bits.
+5V GND
8 Data or Control
Internal Port
Logic A
Control I/O
Handshake
8
CPU Peripheral
CPU Data Bus Bus Internal Bus Interface
Interface 8 I/O
PIO Control
Lines 8
Port Data or Control
Interrupt B
Control I/O
Handshake
Input/Output
Select Reg
(8 Bits)
Mode
Control
Output Enable
Reg
(2 Bits)
Data
Output
Internal Bus Reg
(8 Bits)
8 Bit
Peripheral
Data Or
Control Bus
Mask Mask
Control Data
Reg Input
Reg (8 Bits) (8 Bits)
(2 Bits) Input Data
Ready
Handshake Handshake
Interrupt Control
Requests /Stobe Lines
Logic
Um diagrama da configuração do pino Z8O-PIO é mostrado na Figura 3-1. Esta seção descreve
a função de cada pino.
B/A Sel Port B ou A Select (entrada, alta ativa). Este pino define qual porta será acessada
durante uma transferência de dados entre o Z80-CPU e o Z8O-PIO. Um nível baixo neste pino
seleciona a porta A enquanto um nível alto seleciona a porta B. Freqüentemente, o bit de
endereço A0 da CPU será usado para esta função de seleção.
C/D Sel Control ou seleção de dados (entrada, alta ativa). Este pino define o tipo de
transferência de dados a ser realizada entre a UCP e o PIO. Um nível alto neste pino durante
uma gravação da CPU no PIO faz com que o barramento de dados Z80 seja interpretado como
um comando para a porta selecionada pela linha B/A Select. Um nível baixo neste pino significa
que o barramento de dados Z80 está sendo usado para transferir dados entre a CPU e o PlO
Freqüentemente, o bit de endereço Al da CPU será usado para esta função.
/CE Chip Enable (entrada, baixa ativa). Um nível baixo neste pino permite que o PIO aceite
comandos ou entradas de dados da CPU durante um ciclo de gravação ou transmita dados
para a CPU durante um ciclo de leitura. Esse sinal geralmente é uma decodificação de quatro
números de porta de E/S que abrangem as portas A e B, dados e controle.
Relógio do sistema (entrada). O Z80-PIO usa o relógio do sistema Z80 padrão para
sincronizar certos sinais internamente. Este é um relógio monofásico.
/M1 Ciclo Um da Máquina Sinal da CPU (entrada, ativo Baixo). Este sinal da CPU é usado como
um pulso de sincronização para controlar várias operações internas do PIO. Quando /M1 está
ativo e o sinal /RD está ativo, o Z80-CPU está buscando uma instrução da memória. Por outro
lado, quando /M1 está ativo e /IORQ está ativo, a CPU está reconhecendo uma interrupção.
Além disso, o sinal /Ml tem duas outras funções dentro do Z80-PIO.
/IORQ Solicitação de entrada/saída do Z80-CPU (entrada, baixa ativa). O sinal /IORQ é usado
em conjunto com os sinais B/A Select, C/D Select, ICE e /RD para transferir comandos e dados
entre o Z80-CPU e o Z80-¬PlO. Quando /CE, /RD e /IORQ estão ativos, a porta endereçada por
B/A irá transferir dados para a CPU (uma operação de leitura). Por outro lado, quando /CE e
/IORQ estão ativos, mas /RD não está ativo, então a porta endereçada por B/A será gravada a
partir da CPU com dados ou informações de controle conforme especificado pelo sinal C/D
Select. Além disso, se /IORQ e /M1 estiverem ativos simultaneamente, a CPU está
reconhecendo uma interrupção e a porta de interrupção colocará automaticamente seu vetor de
interrupção no barramento de dados da CPU se for o dispositivo de prioridade mais alta
solicitando uma interrupção.
8
/RD Reed Cycle Status do Z80-CPU (entrada, ativo baixo). Se /RD estiver ativo, uma operação
MEMORY READ ou I/O READ estiver em andamento. O sinal /RD é usado com os sinais A/B
Select, C/D Select, /CE e /IORQ para transferir dados do Z80-PIO para o Z80-CPU.
IEl Interrupt Enable In (Entrada, alta ativa). Este sinal é usado para formar uma cadeia de
interrupção prioritária quando mais de um dispositivo acionado por interrupção está sendo
usado. Um nível alto neste pino indica que nenhum outro dispositivo de prioridade mais alta está
sendo atendido por uma rotina de serviço de interrupção da CPU.
IEO Interrupt Enable Out (Saída ativa alta). O sinal IEO é o outro sinal necessário para formar
um esquema de prioridade em cadeia. É Alto somente se o IEI for Alto e a CPU não estiver
atendendo a uma interrupção deste PIO. Assim, este sinal bloqueia a interrupção de
dispositivos de prioridade mais baixa enquanto um dispositivo de prioridade mais alta está
sendo atendido por sua rotina de serviço de interrupção de CPU.
/INT Solicitação de interrupção (saída, dreno aberto, baixa ativa). Quando /INT está ativo, o
Z80-PIO está solicitando uma interrupção do Z80-CPU.
A7-AO Port A Bus (bidirecional, tri-state). Este barramento de 8 bits é usado para transferir
dados e/ou status ou informações de controle entre a Porta A do Z80-PIO e um dispositivo
periférico. A0 é o bit menos significativo do barramento de dados da Porta A.
/ASTDB Port A Strobe Pulse from Peripheral Device (entrada, baixa ativa) O significado deste
sinal depende do modo de operação selecionado para a Porta A como segue:
1. Modo de saída: O flanco positivo deste strode é emitido pelo periférico para acusar o
recebimento dos dados disponibilizados pelo PIO.
2. Modo de entrada: O strobe é emitido pelo periférico para carregar dados do periférico no
registro de entrada da Porta A. Os dados são carregados no PIO quando este sinal está ativo.
3. Modo bidirecional: Quando este sinal está ativo, os dados do registro de saída da Parte A são
direcionados para o barramento de dados bidirecional da Porta A. A borda positiva do
estroboscópio confirma o recebimento dos dados.
ARDY Registrador A Pronto (saída, ativo Alto). O significado deste sinal depende do modo de
operação selecionado para a Porta A como segue:
1. Modo de saída: Este sinal fica ativo para indicar que o registro de saída da Porta A foi
carregado e o barramento de dados periférico está estável e pronto para transferência para o
dispositivo periférico.
2. Modo de entrada: Este sinal está ativo quando o registro de entrada da porta está vazio e
pronto para aceitar dados do dispositivo periférico.
3. Modo bidirecional: Este sinal está ativo quando os dados estão disponíveis no registro de
saída da Porta A para transferência para o dispositivo periférico. Neste modo, os dados são
colocados no barramento de dados da Porta A, a menos que o ASTB esteja ativo.
9
4. Modo de controle: Este sinal é desabilitado e forçado a um estado Baixo.
B7- B0 Barramento da porta B (bidirecional, tri-state). Este barramento de 8 bits é usado para
transferir dados e/ou status ou informações de controle entre a Porta B do PIO e um dispositivo
periférico. O barramento de dados da Porta B é capaz de fornecer 1,5 m @ 1,5 V para acionar
os transistores Darlington. B0 é o bit menos significativo do barramento.
No modo bidirecional da Porta A, este sinal envia dados do dispositivo periférico para o registro
de entrada da Porta A.
BRDY Registrador B Pronto (saída, alto ativo). O significado deste sinal é semelhante ao de A
Ready com a seguinte exceção:
No modo bidirecional da Porta A, este sinal é Alto quando o registro de entrada da Porta A está
vazio e pronto para aceitar dados do dispositivo periférico.
19 15 A0
D0 14
D1 20 A1
1 13 A2
D2 12
40 A3
CPU D3 10
Data D4 39 A4
Bus 9 Port A
D5 38 A5 I/O
3 8 A6
D6 7
2 A7
D7 Z80-PIO
18
Port A/B SEL 6 ARDY
5 16 /ASTB
Control/Data SEL
27 B0
PIO 4
/Chip Enable 28
Control 37 B1
/M1
36 29 B2
/IORQ 30
35 B3
/RD 31 B4
32 Port B
26 B5 I/O
+5V 33
11 B6
GND 34
B7
25
21
BRDY
23 17 /BSTB
/INT
Interrupt 24
INT Enable In
Control 22
INT Enable Out
6 5 4 3 2 1 44 43 42 41 40
39 /RD
B//A 7
38 PB7
PA7 8
37 PB6
PA6 9
36 PB5
PA5 10
35 PB4
PA4 11
Z80-PIO 34 PB3
N/C 12
33 PB2
GND 13
32 PB1
PA3 14
31 PB0
PA2 15
30 +5V
PA1 16
29 CLK
PA0 17
18 19 20 21 22 23 24 25 26 27 28
4.0 RESET
1 Ambos os registros de máscara de porta são redefinidos para inibir todos os bits de dados de
porta.
2. As linhas do barramento de dados da porta são definidas para um estado de alta impedância
e os sinais de “handshake” prontos estão inativos (baixo) O modo 1 é selecionado
automaticamente.
Além do reset automático ao ligar, o PIO pode ser resetado aplicando um sinal /M1 sem a
presença de um sinal /RD ou /IORQ. Se nenhum /RD ou /IORQ for detectado durante /M1, o
PlO entrará no estado de reinicialização imediatamente após o sinal /M1 ficar inativo. O
propósito desta reinicialização é permitir que um único portão externo gere uma reinicialização
sem uma sequência de desligamento. Essa abordagem foi necessária devido à limitação da
embalagem de 40 pinos.
Uma vez que o PlO tenha entrado no estado de reset interno, ele é mantido lá até que o PIO
receba uma palavra de controle da CPU.
O PIO foi projetado para operar com o Z80-CPU usando a resposta de interrupção do Modo 2.
Este modo requer que um vetor de interrupção seja fornecido pelo dispositivo de interrupção.
Este vetor é utilizado pela UCP para formar o endereço para a rotina de serviço de interrupção
daquela porta. Este vetor é colocado no barramento de dados Z80 durante um ciclo de
reconhecimento de interrupção pelo dispositivo de maior prioridade solicitando serviço naquele
momento. (Consulte a seção do manual do usuário do Z80-CPU para obter detalhes sobre
como uma interrupção é atendida pela CPU). O vetor de interrupção desejado é carregado no
PIO escrevendo uma palavra de controle na porta desejada do PIO com o seguinte formato:
D7 D6 D5 D4 D3 D2 D1 D0
V7 V6 V5 V4 V3 V2 V1 0
D0 é usado neste caso como um bit sinalizador que, quando baixo, faz com que V7 a V1 seja
carregado no registrador vetorial. No momento da confirmação da interrupção, o vetor da porta
de interrupção aparecerá no barramento de dados Z80 exatamente como mostrado no formato
acima.
12
4.2 SELECTING AN OPERATING MODE SELECIONANDO UM MODO DE OPERAÇÃO
A porta A do PlO pode ser operada em qualquer um dos quatro modos distintos: Modo 0 (modo
de saída), Modo 1 (modo de entrada), Modo 2 (modo bidirecional) e Modo 3 (modo de controle).
selecionado para significado mnemônico; ou seja, 0 = Out, 1 = In, 2 Bidirecional. A Porta B pode
operar em qualquer um desses modos, exceto o Modo 2.
O modo de operação pode ser estabelecido escrevendo uma palavra de controle para o PIO no
seguinte formato:
D7 D6 D5 D4 D3 D2 D1 D0
M1 M0 X X 1 1 1 1
Mode Word X=Unused Signifies Modes Word To
Bit Be Set
D7 D6 Mode
0 0 0 (output)
0 1 1 (input)
1 0 2 (bidirectional)
1 1 3 (control)
Os bits D5 e D4 são ignorados. Os bits D3-D0 devem ser definidos como 1111 para indicar “Set
Mode”.
A seleção do Modo 0 permite que quaisquer dados gravados no registro de saída da porta pela
CPU sejam habilitados no barramento de dados da porta. O conteúdo do registrador de saída
pode ser alterado a qualquer momento pela CPU simplesmente escrevendo uma nova palavra
de dados na porta. Além disso, o conteúdo atual do registrador de saída pode ser lido de volta
para o Z80-CPU a qualquer momento através da execução de uma instrução de entrada.
Com o Modo 0 ativo, uma gravação de dados da CPU faz com que a linha de handshake Pronto
dessa porta vá para Alto para notificar o periférico de que os dados estão disponíveis. Este sinal
permanece alto até que um estroboscópio seja recebido do periférico. A borda de subida do
strobe gera uma interrupção (se tiver sido habilitada) e faz com que a linha Ready fique inativa.
Esse aperto de mão muito simples é semelhante ao usado em muitos dispositivos periféricos.
O modo 2 é um modo de transferência de dados bidirecional que usa todas as quatro linhas
de handshake. Portanto, somente a Porta A pode ser usada para operação no Modo 2. A
operação do Modo 2 usa os sinais de handshake da Porta A para controle de saída e os
sinais de handshake da Porta B para controle de entrada. Assim, APDY e BRDY podem
estar ativos simultaneamente. A única diferença operacional entre o Modo 0 e a parte de
saída do Modo 2 é que os dados do registro de saída da Porta A são permitidos no
barramento de dados da porta somente quando /ASTB está ativo para atingir uma
capacidade bidirecional.
13
Mode 3 operation is intended for status and control applications and does not utilize the
handshake signals. When Mode 3 is selected, the next control word sent to the PlO must define
which of the port data bus lines are to be inputs and which are outputs. The format of the control
word Is shown below:
D7 D6 D5 D4 D3 D2 D1 D0
I/O7 I/O6 I/O5 I/O4 I/O3 I/O2 I/O1 I/O0
Se qualquer bit for definido como um, a linha de barramento de dados correspondente será
usada como entrada. Por outro lado, se o bit for zerado, a linha será usada como uma saída.
D7 D6 D5 D4 D3 D2 D1 D0
Enable AND/ High/ Mask 0 1 1 1
Int. OR Low Follows
Se o bit D4 = 1, a próxima palavra de controle enviada ao PlO deve definir uma máscara da
seguinte forma:
14
D7 D6 D5 D4 D3 D2 D1 D0
MB7 MB6 MB5 MB4 MB3 MB2 MB1 MB0
Only those port lines whose mask bit is zero will be monitored for generating an interrupt is high,
the forced state of Ready will prevent input register data from changing while the CPU is reading
the PIO. Ready will go High again after the trailing edge of the /IORQ as previously described.
15
CHAPTER 5 TIMING TEMPO
A Figura 5-1 ilustra o tempo associado à operação do Modo 0. Um ciclo de saída é sempre
iniciado pela execução de uma instrução de saída pela CPU. Um pulso /WR* é gerado pelo PIO
durante uma operação de gravação de E/S da CPU e é usado para travar os dados do barramento
de dados da CPU no registro de saída das portas endereçadas (A ou B).
A borda ascendente do pulso /WR* então levanta o sinalizador Pronto após a próxima borda
descendente de para indicar que os dados estão disponíveis para o dispositivo periférico. Na
maioria dos sistemas, a borda de subida do sinal Pronto pode ser usada como um sinal de
travamento no dispositivo periférico, se desejado.
O sinal Ready permanecerá ativo até que: (1) uma borda positiva seja recebida da linha
estroboscópica indicando que o periférico recebeu os dados, ou (2) se já estiver ativo, Ready será
forçado para baixo um e meio ciclos após o borda inicial de /IORQ se o registro de saída da
porta for gravado.
Pronto retornará alto na primeira borda de descida de após a borda de fuga de /IORQ. Isso
garante que Ready esteja baixo quando os dados da porta estiverem mudando.
O sinal Pronto não ficará inativo até que ocorra uma borda descendente na linha do relógio ().
O propósito de atrasar a transição negativa do sinal Pronto até depois de uma transição negativa
do clock é que isso permite um esquema de geração muito simples para o pulso estroboscópico.
Simplesmente conectando a linha Ready à linha strobe, um strobe com duração de um período de
clock será gerado sem nenhuma outra lógica necessária.
A borda positiva do pulso strode gera automaticamente uma solicitação /INT se o flip-flop de
habilitação de interrupção tiver sido definido e este dispositivo for o dispositivo de prioridade
mais alta solicitando uma interrupção.
Se o PIO não estiver em um estado de reinicialização, o registro de saída pode ser carregado
antes que o Modo 0 seja selecionado. Isso permite que as linhas de saída da porta se tornem
ativas em um estado definido pelo usuário.
/WR*
Port Output
(8 Bits)
Ready
/Strobe
/INT
A Figura 5-2 ilustra o tempo de um ciclo de entrada. O periférico inicia este ciclo usando a linha
strobe após a CPU realizar uma leitura de dados. Um nível baixo nesta linha carrega dados no
registro de entrada da porta e a borda ascendente da linha estroboscópica ativa a linha de
solicitação de interrupção (/INT) se a habilitação de interrupção estiver definida e este for o
dispositivo de solicitação de prioridade mais alta.
A próxima borda descendente da linha do relógio () redefinirá a linha Pronto para um estado
inativo, significando que o registro de entrada está cheio e o carregamento adicional deve ser
inibido até que a CPU leia os dados. A CPU, no curso de sua rotina de serviço de interrupção,
lerá os dados da porta de interrupção. Quando isso ocorre, a borda positiva do sinal CPU/RD
aumentará a linha Ready com a próxima transição baixa de indicando que novos dados
podem ser carregados no PIO. Se já estiver ativo, Ready será forçado para baixo um e meio
períodos seguindo a borda de ataque de /IORQ durante uma leitura de uma porta PIO. Se o
usuário enviar dados estroboscópicos para o PIO somente quando estiver pronto.
/Strobe
Sample
Port Input
(8 Bits)
Ready
/INT
/RD*
5
.2
17
BIDIRECTIONAL MODE (MODE 2)
Este modo é meramente uma combinação do Modo 0 e do Modo 1 usando todas as quatro
linhas de handshake. Uma vez que requer todas as quatro linhas, está disponível apenas na
Porta A. Quando este modo é usado na Porta A, a Porta B deve ser definida para o Modo de
Controle de Bit. O mesmo vetor de interrupção será retornado para uma interrupção do Modo 3
na Porta B e uma interrupção de transferência de entrada durante a operação do Modo 2 da
Porta A. A ambigüidade é evitada se a Porta B for operada em modo polling e o registro de
máscara da Porta B for definido para inibir todos os bits.
A Figura 5-3 ilustra o tempo para este modo. É quase idêntico ao descrito anteriormente para
Modo 0 e Modo 1 com as linhas de handshake da Porta A usadas para controle de saída e as
linhas da Porta B usadas para controle de entrada. A diferença entre os dois modos é que, no
Modo 2, os dados são permitidos no barramento somente quando o A strobe é Baixo. A borda
ascendente deste strobe pode ser usada para travar os dados no periférico, pois os dados
permanecerão estáveis até depois dessa borda. A parte de entrada no Modo 2 opera de forma
idêntica ao Modo 1. Observe que tanto a Porta A quanto a Porta B devem ter suas interrupções
ativadas para obter uma transferência bidirecional acionada por interrupção.
O periférico não deve transferir dados para um barramento de dados de porta enquanto /ASTB
estiver ativo. A conexão de barramento é evitada se o periférico usar /BSTB para inserir dados
de entrada no barramento. O PIO usa o nível baixo /BSTB para travar esses dados. O PlO foi
projetado com um requisito de tempo de retenção zero para os dados ao travar neste modo, de
modo que esta estrutura de gating simples possa ser usada pelo periférico. Ou seja, os dados
podem ser desabilitados do barramento imediatamente após a borda de subida do strobe.
/WR
ARDY
/ASTB
/BSTB
BRDY
O modo de controle não utiliza os sinais de handshake e uma gravação ou leitura de porta
normal pode ser executada a qualquer momento. Ao gravar, os dados serão travados nos
registros de saída com o mesmo tempo do Modo 0. O ARDY será forçado para baixo sempre
que a Porta A for operada no Modo 3. O BRDY será mantido baixo sempre que a Porta B for
operada no Modo 3, a menos que a Porta A seja no Modo 2. Neste último caso, o estado de
BRDY não será afetado.
Ao ler o PIO, os dados retornados para a CPU serão compostos de dados de registro de saída
dessas linhas de dados de porta atribuídas como saídas e dados de registro de entrada dessas
linhas de dados de porta atribuídas como Entradas. O registrador de entrada conterá dados que
estavam presentes imediatamente antes da borda descendente de /RD. Consulte a Figura 5-4.
Uma interrupção será gerada se as interrupções da porta estiverem habilitadas e os dados nas
linhas de dados da porta satisfizerem a equação lógica definida pelos registradores de controle
de máscara de 8 bits e máscara de 2 bits. Outra interrupção não será gerada até que ocorra
uma mudança no estado da equação lógica. Uma interrupção do Modo 3 será gerada apenas
se o resultado de uma operação lógica do Modo 3 mudar de falso para verdadeiro. Por
exemplo, suponha que a equação lógica do Modo 3 seja uma função OR. Uma linha de dados
de porta não mascarada torna-se ativa e uma interrupção é solicitada. Se uma segunda linha de
dados de porta não mascarada se tornar ativa simultaneamente com a primeira, uma nova
interrupção não será solicitada, pois não ocorreu uma alteração no resultado da operação lógica
do Modo 3.
T1 T2 Tw* T3
Port
Data Word 1 Data Word 2
Data Bus
/INT
Data Match
Occurs Here
/IORQ
/RD
D7-D0 Data In
*Timing Diagram Refers to Bit Mode Read. Data Word 1 Placed On Bus
Algum tempo depois de uma interrupção ser solicitada pelo Thin PlO, a UCP enviará um
reconhecimento de interrupção (/M1 e /IORQ). Durante esse tempo, a lógica de interrupção do
PIO determinará a porta de prioridade mais alta que está solicitando uma interrupção. (Isto é
simplesmente o dispositivo com sua entrada de Habilitação de Interrupção alta e sua Saída de
Habilitação de Interrupção baixa). Para garantir que as linhas habilitadas daisy chain se
estabilizem, os dispositivos são impedidos de alterar seu status de solicitação de interrupção
quando /M1 está ativo. O dispositivo de prioridade mais alta coloca o conteúdo de seu registro
de vetor de interrupção no barramento de dados Z80 durante a confirmação da interrupção.
A Figura 8-1 ilustra o tempo associado às solicitações de interrupção. Durante o tempo /M1,
nenhuma nova solicitação de interrupção pode ser gerada. Isso dá tempo para os sinais Int
Enable passarem por até quatro circuitos PIO. O PIO, com IEI alto e lEO baixo durante /INTA,
colocará o vetor de interrupção de 8 bits da porta apropriada no barramento de dados neste
momento.
Se uma interrupção solicitada pelo PLO for confirmada, a porta solicitante está em serviço. lEO
desta porta permanecerá baixo até que um retorno da instrução de interrupção (RETI) seja
executado enquanto IEl da parte estiver alto. Se uma solicitação de interrupção não for
confirmada, lEO será forçado a subir por um ciclo /M1 após o PlO decodificar o opcode >ED'.
Esta ação garante que a instrução RETI de 2 bytes seja decodificada pela porta PLO adequada
(Figura 6-2).
A Figura 6-3 ilustra uma sequência típica de interrupção em repouso que pode ocorrer com
quatro portas conectadas em cadeia. Nesta sequência, a Porta 2A solicita e recebe uma
interrupção. Enquanto esta porta está sendo atendida, uma porta de prioridade mais alta (1B)
solicita e recebe uma interrupção. A rotina de serviço para a porta de maior prioridade é
concluída e uma instrução RETI é executada para indicar à porta que sua rotina foi concluída.
Neste momento, a rotina de serviço da porta de prioridade mais baixa é concluída.
Sample
/INT INT
/M1
IEO
IEI
T1 T2 T3 T4 T1 T2 T3 T4 T1
/M1
/RD
D7 - D0 ED 4D
IEI
IEO
Service Complete
+ HI HI HI HI
HI
IEI IEO IEI IEO IEI IEO IEI IEO
Sem qualquer lógica externa, um máximo de quatro dispositivos Z80-PIO podem ser
encadeados em uma estrutura de interrupção prioritária. Essa limitação é necessária para que o
status de habilitação de interrupção (IEO) ondula por toda a cadeia entre o início de /M1 e o
início de /IORQ durante um ciclo de reconhecimento de interrupção. Uma vez que o status de
habilitação de interrupção não pode mudar durante /M1, o endereço do vetor retornado à CPU é
assegurado como sendo do dispositivo de prioridade mais alta que solicitou uma interrupção.
Se mais de quatro dispositivos PIO devem ser acomodados, uma estrutura “Iook-ahead” pode
ser usada conforme mostrado na Figura 7-1. Com esta técnica, mais de trinta PlOs podem ser
encadeados usando a lógica TTL padrão.
Z80-
Data Bus
CPU
Neste exemplo, o Z80-PIO está conectado a um dispositivo terminal de E/S que se comunica
por meio de um barramento de dados bidirecional paralelo de 8 bits, conforme ilustrado na
Figura 7-2. A operação do Modo 2 (bidirecional) é selecionada enviando a seguinte palavra de
controle para a Porta A:
D7 D6 D5 D4 D3 D2 D1 D0
1 0 X X 1 1 1 1
Mode Control
As interrupções são então habilitadas pela borda de subida do primeiro /M1 após a palavra do
modo de interrupção ser definida, a menos que /M1 defina um ciclo de reconhecimento de
interrupção. Se uma máscara segue a palavra de modo de interrupção, as interrupções são
habilitadas pela borda de subida do primeiro /M1 seguindo a configuração da máscara.
Os dados agora podem ser transferidos entre o periférico e a CPU. O tempo para esta
transferência é conforme descrito na Seção 5.0.
ARDY
/ASTB
BRDY
/BSTB
D D D D
Data Bus S R R A
Z80- Z80- T Q C V
/IORQ
CPU PIO B V
/M1 Port Data Bus
/INT
I/O
B/A C/D /CE Terminal
Address
Address Bus Bus
Decoder
Uma aplicação típica do modo de controle é ilustrada na Figura 7-3. Suponha que um processo
industrial deva ser monitorado. A ocorrência de qualquer condição operacional anormal deve
ser relatada a um sistema de controle baseado em Z80-CPU. A palavra de status e controle de
processo tem o seguinte formato:
D7 D6 D5 D4 D3 D2 D1 D0
Special Turn Power Halt Temp Turn Pressure Pressure
Test on Failure Process Alarm Htrs on Alarm
Power Alarm ing On System
O PIO pode ser usado da seguinte maneira. A primeira porta A é definida para operação no
Modo 3, gravando a seguinte palavra de controle na porta A.
D7 D6 D5 D4 D3 D2 D1 D0
1 1 X X 1 1 1 1
23
Sempre que o Modo 3 for selecionado, a próxima palavra de controle enviada à porta deve ser
uma palavra de seleção de E/S. Neste exemplo, desejamos selecionar as linhas de dados de
porta A5, A3. e A0 como entradas e assim a seguinte palavra de controle é escrita:
D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 0 1 0 0 1
Em seguida, o vetor de interrupção desejado deve ser carregado (consulte o manual da CPU
para obter detalhes):
D7 D6 D5 D4 D3 D2 D1 D0
V7 V6 V5 V4 V3 V2 V1 0
D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 0 0 1 1 1
Enable OR Active Mask Interrupt Control
Interrupts Logic High Follows
D7 D6 D5 D4 D3 D2 D1 D0
1 1 0 1 0 1 1 0
Agora, se um sensor colocar um nível alto na linha A5, A3 ou A0, será gerado um pedido de
interrupção. A palavra de máscara pode selecionar qualquer combinação de entradas ou saídas
para causar uma interrupção. Por exemplo, se a palavra da máscara acima fosse:
D7 D6 D5 D4 D3 D2 D1 D0
0 1 0 1 0 1 1 0
Port A
Bus
A7 Spec. Test
A6 Turn On Pwr.
Z80-CPU Z80-PIO
A5 Pwr. Fail Alm.
A4 HALT
Industrial
D7-D0
A3 Temp. Alm. Processing
System
A2 Htrs. On
A1 Press. Sys.
A0 Press. Alm.
B/A C/D /CE
Address
A15-A0
Decoder
V7 V6 V5 V4 V3 V2 V1 0
M1 M0 X X 1 1 1 1
M1 M0 Mode
0 0 Output
0 1 Input
1 0 Bidirectional
1 1 Bit Control
Used in
Mode 3 Only
Se o bit "máscara segue" for alto, a próxima palavra de controle gravada na porta deve ser a
máscara:
MB = 0, Monitor bit
MB = 1, Bit de máscara de ser monitorado
Além disso, o flip-flop de habilitação de interrupção de uma porta pode ser definido ou
redefinido sem modificar o restante da palavra de controle de interrupção usando o seguinte
comando:
Enable X X X 0 0 1 1
Int.