Aula Teórica 7 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica07.pdf · Todos os PC´s com...

6
Periféricos e Interfaces Ano lectivo 2003/2004 Docente: Ana Paula Costa 1 Aula Teórica 7 Sumário: 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 uma bateria, de forma a que a informação lá guardada não desapareça quando o PC está desligado. Esta memó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 alguma informação sobre a configuração do sistema e seus periféricos (tipo de disco rígido, quantidade de memória RAM, etc.). Durante o arranque da máquina a BIOS lê a informação da memória CMOS e utiliza-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 a 0DH) 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és de dois portos, nos endereços 70H e 71H. É preciso indicar o byte que se pretende aceder no porto 70H e depois 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 data actualizadas em background (mesmo quando o PC está desligado da corrente).

Transcript of Aula Teórica 7 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica07.pdf · Todos os PC´s com...

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 * /}