• Nenhum resultado encontrado

Trabalho Prático Nº2 Escrita e Leitura em Portos IO

N/A
N/A
Protected

Academic year: 2021

Share "Trabalho Prático Nº2 Escrita e Leitura em Portos IO"

Copied!
7
0
0

Texto

(1)

Trabalho Prático Nº2

Escrita e Leitura em Portos IO

1. OBJECTIVOS

- Saber efectuar a escrita e leitura em portos de entrada saída num PC num com operativo DOS e Windows.

2. INTRODUÇÃO

Para este trabalho de escrita e leitura em porto num PC, vamos utilizar o Altifalante do PC para gerar sons o que implica que se efectuem leituras e escrita em portos de IO. É pois necessário entender o funcionamento do temporizador num PC, que é uma emulação do dispositivo 8254 e de como é efectuado o controlo do próprio altifalante.

No PC o relógio dos três contadores/temporizadores é o mesmo: uma onda quadrada de 1,19318 MHz, pelo que cada contagem tem uma duração de 838,1ns.

O canal 0 é o temporizador do sistema, a GATE está ligada a Vcc pelo que este

contador está sempre activo. O seu relógio é uma onda quadrada de 1,19318MHz. A saída do canal 0 provoca a IRQ0, que corresponde à interrupção 08h (INT 08h) do DOS e à interrupção 50H nos sistemas de 32bits, que corresponde a uma interrupção mascarável de mais alta prioridade, este canal é programado pela bios do PC para gerar na sua saída uma onda quadrada com a frequência de 18,206Hz que activa a IRQ0, resultando num pedido de interrupção a cada 54,936ms.

O canal 1 inicialmente foi o responsável pelo indicar dos instantes em que deveria ser efectuado o refrescamento da memória dinâmica, a saída deste canal é usada para gerar pedidos ao canal 0 do DMA (DRQ0). Nos PC’s dos nossos dias esse refrescamento já não é efectuado pelo canal 0 do DMA, mas sim por um circuito dedicado.

O canal 2 é usado para gerar para activar o altifalante do sistema. A saída do canal 2 corresponde à entrada do altifalante. A entrada de relógio deste canal

(2)

corresponde a uma onda quadrada de 1,193818 MHz, o controlo é efectuado pelo registo da porta 61H, em que os bits 0 e 1 têm as seguintes funções:

Bit Funções

61H.0 Speaker Data Enable

0: Não habilitado 1: Habilitado

61H.1 Timer Counter 2 Enable

0: Altifalante a ‘0’

1: Altifalante é equivalente ao valor OUT do contador 2

CANAL 2 1,193MHz

1/N

Figura 3.1: Temporização do canal 2, usado para gerar sons.

Passos para gerar sons no altifalante do PC: 1. Escrever 182 no porto 43H.

2. Escrever a frequência no porto 42H, como o valor a escrever é de 16 bits e o porto é de 8 bits é necessário escrever 2 vezes 8 bits no endereço 42H, o byte menos significativo é enviado em primeiro lugar.

3. Para activar altifalante os bits 0 e 1 do porto 61H deve ser colocados a nível alto, os restantes bits dos registos 61H devem ser mantidos inalterados pois

desempenham outras funções no PC

4. Efectuar uma pausa que corresponderá À duração do tom

5. Desligar o altifalante colocando os bits 0 e 1 do porto 61H a nível baixo. &

838,6 ns

altifalante 61H.0

61H.1

(3)

Modo Protegido de acesso aos portos IO no sistema operativo Windows de 32 bits

No tempo em que o DOS era o sistema operativo de computadores com procesadores Intel 8088 ou em modo real nos CPU que lhe sucederam o acesso aos porto de entrada saída eram directos e o DOS não efectuava a gesto do mesmo. Para o acesso a portos no espaço de endereçamento IO, podem ser usadas as instruções in e out. A linguagem C oferece instruções de alto nível para estas instruções. Por exemplo, uma escrita de 00h no porto I/O 300h é no Turbo C, efectuada do seguinte modo:

outportb(0x300, 0x00)

a que equivale:

mov al,0

mov dx,300h

out dx,al

Com o processador 80286 surgiu o funcionamento em modo protegido e posteriormente aperfeiçoado com o 80386. O funcionamento em modo protegido possibilitou o desenvolvimento de varias plataformas como sejam os sistemas operativos multitarefa Windows e Linux.

O funcionamento em modo protegido especifica: - Processamento lógico e aritmético a 32 bits - Recursos para segmentação

- Recursos para paginação e memória virtual - Conjunto de instruções ampliado

- Arquitectura Multitarefa

- Permite a execução de software escrito para modo real (modo virtual 8086)

Um PC com um processador 80386 ou superior em funcionamento em modo protegido é fundamentalmente um computador para multitarefa, porque é dotado de uma arquitectura multitarefa que permite a execução de vários programas concorrentes, (funcionamento em simultâneo) que partilham recursos de hardware ou de software. Cada programa (processo) em execução é visto pelo processador como uma ou mais tarefas. Instruções especificas e um “pipeline” adequado permite a comutação entre as execuções das tarefas sejam feitos de forma eficiente e transparente para os programas. As tarefas operam de forma independente umas das outras o funcionamento de uma tarefa não deverá influenciar na operação de outra.

(4)

O modo protegido define um ambiente para o controle e execução das tarefas, constituído por registos e estruturas de dados e tabelas, mapeadas em memória. Existem várias tabelas de descritores geridas pelo sistema operativo que permitem efectuar o controle e gestão das tarefas que estão em execução concorrente. Com o sistema operativo Windows os programas são executados em vários níveis de privilégio As porta I/O apenas são acessíveis quando o nível de privilégio da tarefa em execução (CPL - Current Previlege Level) for numericamente menor ou igual ao seu nível de privilégio de IO (IOPL - Input Output Privilege Level), ou seja CPL <= IOPL. Sendo o privilégio 0 (zero) o maior enquanto o privilégio 3 o menor, estes níveis de privilégios são conforme os anéis de funcionamento do software definidos como anéis (rings) em que o Kernel do sistema operativo é executado no nível 0 e os aplicativos são executados no nível 3, fazendo com que deste modo uma aplicação normalmente não possa ter acesso à leitura/escrita em modo protegido. Os “drivers” de dispositivos, que correspondem, a um conjunto de serviços disponibilizados pelo sistema operativo para tornar eficiente a comunicação entre o dispositivo de hardware e o CPU.

Um “driver” pode ser um módulo que está ligado dinâmicamente à aplicação através de uma “.dll” ou pode ser integrado na aplicação. Também existe o conceito de dispositivo virtual, ou seja um dispositivo como se hardware se tratasse através de “drives VxD” que interceptam todo acesso que se tenta fazer ao hardware.

Aplicação tenta aceder ao I/O

Aplicação comunica com um “device-driver”

A aplicação solicita serviços ao “device-driver” que tem privilégio

para aceder ao porto I/O

“device-driver” realiza o acesso ao porto I/O e efectua a transferência

de/para a aplicação

Figura 3.2: Exemplo de quando uma aplicação usa um “device-driver” para aceder a portos IO

(5)

O processador gera internamente “uma falha geral de excepção

Caso existe um atendimento da excepção com privilégio suficiente o

Aplicativo pode aceder ao porto IO Aplicação tenta

aceder ao I/O

Figura 3.3: Exemplo de quando uma aplicação sem privilégios tenta aceder a portos IO

LIVRARIA DINÂMICA “INPOUT32.DLL”

As livrarias podem ser ligadas ao código executável de uma forma estática e de uma forma dinâmica. A estática é utilizada para combinar as rotinas das livrarias com o código executável, quando o código do programa é criado o “linker” adiciona ao programa do código executável o código objecto correspondente às funções, este é o método mais comum para efectuar a ligação das livrarias, este método é de fácil implantação e eficiente, no entanto origina maior tamanho do código executável.

Na utilização de ligação dinâmica “.DLL”, ao contrário da estática, não é copiado nenhum código da livraria para o programa executável. O código executável fica com o nome da DLL necessária na qual a função necessária reside. Quando o programa é executado a DLL correspondente é carregada e são chamadas as funções necessárias. Este método limita o tamanho do código do programa mas tem um compromisso com a eficiência do mesmo.

Com a livraria dinâmica “Inpout32.dll” é possível o acesso em leitura e escrita em todas as versões de windows sem que seja necessário efectuar qualquer modificação. A DLL identifica a versão do sistema operativo sempre as que as funções de escrita ou leitura em portos são chamadas, se for o Windows 9x a dll usa as funções _inp() e _outp() , se o sistema operativo for o Windows NT, 2000 ou XP, é instalado um “drive” para operar ao nível anel zero do “Kernel” e a aplicação escreve e lê no porto por meio do “driver”, pelo que o programa do utilizador é indiferente à versão do sistema

(6)

operativo. Para a utilização das funções da livraria o ficheiro inpout32.dll deve ser colocado na directoria Windows/system32 e Hwinterface.sys em Windows/system32/sys

Figura 3.4: Fluxograma do funcionamento da livraria dinâmica Inpout32.dll

3. TRABALHO

1 Abra o projecto GeradorDeSons

2 Na “Solutions Explorer”, faça duplo-click em Form1.cs para visualizar os detalhes da forma Gerador De Sons no “Design View” 3 Examine a classe PortInterop.cs

using System;

using System.Runtime.InteropServices;

public class PortAccess

{

[DllImport("inpout32.dll", EntryPoint="Out32")]

public static extern void Output(int adress, int value);

/* For receiving from the ports */

[DllImport("inpout32.dll", EntryPoint="Inp32")]

public static extern int Input(int adress);

}

(7)

4 Em .Net é através do atributo Dllimport que se efectua o carregamento de um livraria dinâmica permitindo dessa forma utilizar as suas funções. De acordo com a definição da classe PortAccess temos os métodos para ler e escrever, respectivamente:

Int PortAcess.Input (int address)

void PortAcess.Input (int address,int valor)

5 No “Design View” faça duplo click em Form1 insira a chamada do método:

PortAccess.Output(0x43,182);

Sempre que for efectuado o carregamento da form1 escreve 182 no porto 0x43, na prática equivale a sempre que o programa for executado

6 No “Design View” faça duplo click no botão “Start” que pretende ser o início de som e insira a chamada do método:

PortAccess.Output(0x61,(PortAccess.Input(0x61)|0x03));

7 No “Design View” faça duplo click no botão “Stop” que pretende ser o fim de som e insira a chamada do método:

PortAccess.Output(0x61,(PortAccess.Input(0x61)&0xFC));

8 No “Design View faça duplo click em no botão “Escreve no Porto 42H” que pretender ser a frequência do som

// escreve 8 bits menos significativos

PortAccess.Output(0x42,Convert.ToUInt16(txtWrite.Text));

// escreve 8 bits mais significativos

PortAccess.Output(0x42,(Convert.ToUInt16(txtWrite.Text)>>8));

9 Execute o programa e teste o seu funcionamento

Referências

Documentos relacionados

Palestras Acadêmicas de Mediação, Cobranças e Redação de Peças 30 horas semanais Segunda a sábado; Sendo o sábado alternado entre um sábado de estágio para um de

O presente trabalho teve os seguintes objetivos: (1) determinar as alterações na composição químico-bromatológica e nas frações protéicas e de carboidratos, determinar as taxas

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação

Observou-se uma redução na velocidade curvilínea, na integridade de membrana pelo método de eosina-nigrosina e no potencial mitocondrial apenas no grupo filtrado, entre os tempos

A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se A espectrofotometria é uma técnica quantitativa e qualitativa, a qual se baseia no fato de que uma

O eletrodo proposto foi empregado com sucesso na determinação de ácido ascórbico em amostras comerciais; • Um eletrodo estável não enzimático, sensível e seletivo para a

Foram diagnosticadas nove doenças bióticas: vira cabeça do tomateiro (Tomato spotted wilt virus), oídio (Oidium sp.), murcha de fusário (Fusarium oxysporum), requeima

O jacarandá (Dalbergia brasiliensis) mostrou crescimento em altura próximo à altura média entre as espécies ensaiadas (1,23m), destacando-se também como espécie alternativa para