340 likes | 440 Views
Chip-Select e Controle de Interrupção. Sistemas Embarcados. Unidade de Chip-select. Chip-Select (unidade de seleção de chip) é um mecanismo fundamental para permitir à CPU acessar memórias e/ou periféricos externos O chip-select pode ser um sinal extraído de um endereço No exemplo, qualquer
E N D
Chip-Select e Controle de Interrupção Sistemas Embarcados
Unidade de Chip-select • Chip-Select (unidade de seleção de chip) é um mecanismo fundamental para permitir à CPU acessar memórias e/ou periféricos externos • O chip-select pode ser um sinal extraído de um endereço • No exemplo, qualquer • endereço entre 10000h e 1FFFFh, • ou iniciando em 30000h • 50000h ou 70000h, ... (A16=1) • habilita a SRAM SRAM
Unidade de Chip-Select • Utilizando um decodificador, pode-se selecionar um entre vários dispositivos (por exemplo, bancos de memória) Decodificador (MUX)
Unidade de Controle de Interrupção • As interrupções podem ser mascaráveis ou não-mascaráveis • As mascaráveis são controladas pela unidade de controle de interrupção • Interrupções podem surgir de periféricos do chip e de 5 pinos de interrupção externa • A unidade de controle de interrupção é responsável por sincronizar e priorizar as interrupções, e fornecer o vetor de tipo de interrupção à CPU • Há duas formas de a CPU processar pedidos de periféricos: Sondagem (polling) e interrupção • Sondagem exige que a CPU verifique constantemente as necessidades dos dispositivos periféricos • Interrupção elimina tal necessidade, liberando a CPU para tratar de outros assuntos
Unidade de Controle de Interrupção • Quando ocorre uma interrupção, a CPU para o processo principal, salva seu status e transfere a execução para a unidade periférica que a interrompeu. • Finalizada a interrupção, a CPU restaura o status, continuando a execução do processo principal exatamente no ponto em que foi interrompido. • Interrupções mascaráveis podem ser mascaradas individualmente ou globalmente • O Interrupt Enable bit do PSW é usado para habilitar ou desabilitar globalmente interrupções mascaráveis • Este controle é feito pelo programador através das instruções STI (Set Interrupt) ou CTI (Clear Interrupt) • O mascaramento individual de interrupções é feito através do registrador Interrupt Mask
Unidade de Controle de Interrupção • Uma função crítica da unidade de controle de interrupção é priorizar os pedidos de interrupção • A prioridade das fontes de interrupção pode variar de zero (maior prioridade) a sete (menor prioridade) • As fontes podem ser programadas para compartilhar um prioridade
Unidade de Controle de Interrupção • Prioridades de interrupções padrão após reset externo • Timer 0 maior prioridade que Timer 1 que tem maior prioridade que Timer 2 • Recepção serial tem maior prioridade que transmissão serial
Unidade de Controle de Interrupção • Ao atender uma interrupção, a CPU coloca o registrador PSW na pilha e zera o bit IE (habilita temporariamente todas as interrupções mascaráveis) • As interrupções mascaráveis são habilitadas pela instrução IRET ou explicitamente pelo programador • Habilitar instruções mascaráveis permite o aninhamento (nesting) de instruções • Regras para aninhamento de interrupções: • Uma fonte de interrupção não pode antecipar uma interrupção de maior prioridade • Uma fonte de interrupção não pode antecipar a si própria • A forma mais simples de usar o controle de interrupção é não utilizando o aninhamento • O problema é que interrupções de maior prioridade passam a ter que esperar até que uma interrupção em execução termine
Unidade de Controle de Interrupção • Sequência de interrupção • Quando a unidade de controle de interrupção (UCI) detectada uma interrupção, ela seta o bit correspondente no registrador de pedido de interrupção, indicando que a interrupção está pendente • Depois a UCI checa todas as fontes de interrupção pendentes, verifica se a interrupção não está mascarada e sua prioridade, assegura o pedido de interrupção e espera o reconhecimento da interrupção • Quando a UCI recebe o reconhecimento de interrupção, ela passa o tipo para a CPU, que dá início à sequência de processamento • Ao receber o reconhecimento de interrupção, a UCI limpa o bit correspondente no registrador de pedido de interrupção e set o bit correspondente no registrador In-Service • O programador é responsável por limpar o bit In-Service com a instrução EOI (End-Of-Interrupt)
Unidade de Controle de Interrupção • Resolução de Prioridade - o processo de aninhamento de interrupções exige um controle mais complexo, onde tais condições devem ser satisfeitas: • Seu bit correspondente na máscara de interrupção está limpo (não está mascarado) • Sua prioridade é maior do que o valor no registrador da máscara de prioridade • Seu bit In-Service está limpo • Sua prioridade é igual o maior do que aquela de qualquer interrupção cujo bit In-Service está setado
Unidade de Controle de Interrupção • Exemplo de Resolução de Prioridade • Assume-se as seguintes condições iniciais: • A UCI foi inicializada • Nenhuma interrupção está pendente • Nenhum bit In-Service está setado • Todas as interrupções não estão mascaradas • O esquema de prioridade padrão está sendo usado • O registrador de máscara de prioridade está setado para prioridade mais baixa (prioridade sete)
Unidade de Controle de Interrupção • Exemplo de Resolução de Prioridade • O exemplo usa as interrupções externas INT0 e INT3 para descrever o processo: • Uma transição low-to-high em INT0 seta seu bit de pedido de interrupção, de modo que a interrupção está agora pendente • A UCI assegura o pedido de interrupção à CPU e espera por um reconhecimento • A CPU assegura a interrupção • A UCI passa o tipo de interrupção para a CPU • A UCI limpa o bit INT0 no registrador de pedido de interrupção e seta o bit INT0 no registrador In-Service • A CPU executa a sequência de processamento, executando o apontador de interrupção INT0
Unidade de Controle de Interrupção • Exemplo de Resolução de Prioridade • O exemplo usa as interrupções externas INT0 e INT3 para descrever o processo: • Durante a execução de INT0, uma transição low-to-high em INT3 seta seu bit de pedido de interrupção • A UCI determina que INT3 tem prioridade menor do que INT0 (em execução, pois o bit In-Service de INT0 está setado). Logo o pedido de interrupção não é enviado para a CPU, de modo que INT3 permanece pendente no registro de pedido de interrupção • O apontador de interrupção INT0 completa e envia um comando EOI para limpar o bit INT0 no registrador In-Service • INT3, ainda pendente, agora possui prioridade de execução. A UCI assegura o pedido de interrupção e o processo segue como para o apontador INT0
Unidade de Controle de Interrupção • Interrupções que compartilham uma fonte simples • Pedidos de interrupções múltiplas podem compartilhar uma entrada de interrupção simples (ex.: TIMER 0, TIMER 1 e TIMER 2 compartilham uma entrada simples) • Embora compartilhem uma entrada, cada interrupção tem o seu próprio vetor de interrupção • O registrador de status de interrupção atua como um registrador de pedido de segundo nível • Ele contém um bit para cada interrupção Timer • Quando uma interrupção Timer ocorre, ambos o bit do registrador de status de interrupção individual e o bit do registrador de pedido de interrupção compartilhada são setados • Na sequência, a interrupção é processada como qualquer outra fonte de interrupção
Unidade de Controle de Interrupção • Cascateando com o 8259 externo • Os módulos 8259 permitem aumentar o número de pinos de interrupção externos • O modo cascade da UCI suporta o uso do 8259 • Os pinos e servem como entradas para interrupções externas fora do modo cascade • No modo cascade eles servem como saídas de reconhecimento de interrupção • Após reset, eles são configurados como entradas • Resistores de pullup asseguram que os pinos não flutuem. Os valores dos resistores devem ser altos o suficiente para prevenir sobrecarga dos pinos
Unidade de Controle de Interrupção • Usando o módulo 8259 externo no modo cascata
Unidade de Controle de Interrupção • Mode aninhado completamente especial • É uma característica opcional utilizada normalmente no modo cascata, aplicável somente a INT0 e INT1 • Nesse modo de interrupção, um pedido de interrupção é atendido mesmo se seu bit In-Service está setado • No modo cascata, um 8259 controla até oito interrupções externas que compartilham um pino de entrada de interrupção simples • Modo aninhado completamente especial permite que a estrutura de prioridade do 8259 seja mantida. Deste modo, enquanto o apontador de interrupção está executando, o 8259 recebe uma interrupção de maior prioridade de uma de suas fontes, e é assegurado que tal interrupção seja executada
Unidade de Controle de Interrupção • Sequência de reconhecimento de interrupção • Durante a sequência de reconhecimento de interrupção, a UCI passa o tipo de interrupção à CPU, que o multiplica por quatro para obter o endereço do vetor de interrupção • Os tipos de interrupções para todas as fontes são fixos e são passados pela UCI à CPU • A primeira indicação externa da sequência de reconhecimento de interrupção é a busca de CPU da tabela de vetor de interrupção
Unidade de Controle de Interrupção • Registrador de controle de interrupção • Cada fonte de interrupção tem seu próprio registro de controle de interrupção, que permite definir o seu comportamento
Unidade de Controle de Interrupção • Registrador de controle de interrupção • INT4:2 – Registradores de interrupção para pinos externos não cascateáveis
Unidade de Controle de Interrupção • Registrador de controle de interrupção • INT1:0 – Registradores de interrupção para pinos cascateáveis
Unidade de Controle de Interrupção • Registrador de pedido de interrupção
Unidade de Controle de Interrupção • Registrador de máscara de interrupção
Unidade de Controle de Interrupção • Registrador de máscara de prioridade
Unidade de Controle de Interrupção • Registrador In-Service
Unidade de Controle de Interrupção • Registrador de Sondagem
Unidade de Controle de Interrupção • Registrador de Status de Sondagem
Unidade de Controle de Interrupção • Registrador de EOI
Unidade de Controle de Interrupção • Registrador de Status de Interrupção
Unidade de Controle de Interrupção • Inicialização da UCI • Determine qual fonte de interrupção deseja-se utilizar • Determine se será utilizado o esquema de prioridade padrão ou um esquema próprio • Programe o registrador de controle de interrupção para cada fonte de interrupção • Para pinos de interrupções externas, selecione gatilho de borda ou de nível • Para INT0 ou INT1, habilite o modo cascata, modo de aninhamento completamente especial, ou ambos • Se está usando um esquema de prioridade próprio, programe o nível de prioridade para cada fonte
Unidade de Controle de Interrupção • Inicialização da UCI • Programe a máscara de prioridade com um nível de máscara de prioridade se deseja mascarar interrupções baseadas em prioridade (o nível padrão é sete) • Set o bit de máscara no registrador de máscara de interrupção para quaisquer interrupções que se deseje desabilitar