aula teórica 7 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/teoricas/teorica07.pdf · todos os pc´s com...
Post on 14-Feb-2019
215 Views
Preview:
TRANSCRIPT
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
1
Aula Teórica 7
Sumár io:A memória CMOS e o relógio de tempo real.
Leitura Recomendada:Capítulo 18 - Hans-Peter Messmer, The Indispensable PC Hardware Book, Addison-Wesley.Capítulo 7 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press.
CMOS
Todos os PC´s com CPU 80286 ou superior têm 64 bytes de memória especial que é mantida por umabateria, de forma a que a informação lá guardada não desapareça quando o PC está desligado. Estamemória é chamada CMOS (Complementary Metal Oxide Semiconductor) ou NVR (non-volatile RAM).
Este espaço de armazenamento permanente é usado para manter um relógio de tempo real e algumainformação sobre a configuração do sistema e seus periféricos (tipo de disco rígido, quantidade dememória RAM, etc.). Durante o arranque da máquina a BIOS lê a informação da memória CMOS eutiliza-a para determinar a configuração actual, a data e a hora do sistema.
Figura nº 1 – Estrutura física da CMOS.
A CMOS-RAM e o relógio de tempo real estão ambos integrados num chip, originalmente o MC146818.
Os 64 bytes da CMOS podem ser acedidos individualmente. Os primeiros 14 bytes (endereços 00H a0DH) são reservados para a data e hora, e para os registos de estado e controlo do relógio de tempo real.Os restantes 50 bytes contêm informação sobre a configuração do PC.
Os 64 bytes da CMOS não são mapeados no espaço de endereçamento normal. Eles são acedidos atravésde dois portos, nos endereços 70H e 71H. É preciso indicar o byte que se pretende aceder no porto 70H edepois ler/escrever nessa posição através do porto 71H.
• Relógio de tempo real
O relógio de tempo real é independente do processador e de todos os outros chips e mantém a hora e dataactualizadas em background (mesmo quando o PC está desligado da corrente).
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
2
Figura nº 2 – Parte da CMOS dedicada ao relógio de tempo real.
Quando se faz o boot do sistema, a BIOS lê os dados do relógio de tempo real da CMOS e converte-os nocorrespondente número de ticks, valor que é usado para inicializar o contador armazenado no endereço0040H:006CH, que é depois mantido pela interrupção 08H.
Os registos de estados do relógio de tempo real permitem saber o estado do relógio e da bateria e realizarconfigurações no relógio.
Registo A – Bit UIP se a actualização do relógio estiver em curso, os registos do relógio de tempo realficam inacessíveis. Bit Rate altera a taxa do relógio, em Hz.
Registo B – Bit SET desactiva a actualização do relógio (registos 0, 2, 4, 7, 8, 9, e 50 da CMOS). Bit DM,por defeito os dados são guardados no formato BCD, se se alterar o valor deste bit, passam a ficar embinário. Todas as funções DOS e BIOS assumem o formato BCD, portanto é preciso ter cuidado ao mudareste bit. Bit 24h, selecciona o modo de apresentação das horas: de 12 ou 24 horas. No caso de estar noformato 12 horas, para distinguir entre p.m. e a.m. é preciso consultar o bit mais alto do registo queguarda as horas (04H), se o valor do bit for 1 é p.m..
Registo C – Os bits PI, AI e UI activam vários pedidos de interrupções.
Registo D – O relógio tem uma função que monitoriza permanentemente o estado da bateria. Se avoltagem cair abaixo de um determinado valor, a função coloca o bit VAL a 0 para indicar que os dadosarmazenados poderão não ser válidos. A BIOS verifica o estado do registo D durante o processo de boot,para detectar se a bateria está ok.
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
3
Figura nº 3 – Os registos de estados do relógio de tempo real.
• Bytes relativos à configuração do sistema
Vamos ver apenas os mais importantes.
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
4
Figura nº 4 – Parte da CMOS dedicada à configuração do sistema.
O byte de diagnóstico (0EH) – Os seus bits são activados dependendo de certos erros que podem ocorrerdurante o arranque da máquina, no POST (Power On Self Test).
O byte de configuração (14H) – Especifica alguma informação sobre o hardware do sistema.
O byte do endereço 10H indica os tipos de duas drives de disquetes. Quatro bits para cada drive: Os bits 4a 7 para a drive 0 e os bits 0 a 3 para a drive 1.
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
5
Figura nº 5 – Bytes de diagnóstico (0EH) e de configuração (14H) na CMOS.
Figura nº 6 – Byte do tipo de drives de disquete.
Curiosidade: O relógio de tempo real tem um alarme que pode ser usado para gerar uma interrupção auma hora específica do dia. Para isso é necessário criar uma interrupt handler que execute uma acçãoquando a interrupção do alarme ocorrer. A BIOS fornece um conjunto de serviços para aceder ao alarme
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
6
do relógio de tempo real através da interrupção 1AH (ver página 391 do livro PC Bible para maisinformações).
• Exemplo de programação da CMOS
/* Exercício para saber qual o dia da semana e hora actual e depois alterar o dia da semana para Domingoe a hora para 12h00, directamente na CMOS * /
#include <dos.h>#include <stdio.h>
void main(void){ unsigned char v;
/* para ver os valores originais */ outportb (0x70, 0x06); /* aceder ao byte do dia da semana * / v = inportb (0x71);
switch (v) { case 0: printf("Hoje é Domindo\n” ); break; case 1: printf("Hoje é Segunda\n” ); break; case 2: printf("Hoje é Terça\n” ); break; case 3: printf("Hoje é Quarta\n” ); break; //… }
outportb (0x70, 0x04); /* aceder ao byte da hora actual * / v = inportb (0x71); printf("São %d horas\n",v);
/* para alterar os valores */ outportb (0x70, 0x06); /* aceder ao byte do dia da semana * / outportb (0x71, 0x00); /* 0 = Domingo * / outportb (0x70, 0x04); /* aceder ao byte da hora actual * / outportb (0x71, 0x0C); /* 0CH = 12 horas * /}
top related