I/O

janeiro 5, 2008

Os macros de acesso das portas I/O (entrada e saída), estão descritos no arquivo io.h , geralmente em /usr/include/asm. Neste biblioteca encontra-se as rotinas necessárias para a acesso as portas de seu PC.

A chamada ioperm(), declarada em unistd.h, quando executada por um programa, necessita de privilégios de root. Para execução deste exemplo, você precisa ter estes privilégios na execução do programa gerado, por isso cuidado com o que você vai criar.

A sintaxe do ioperm() é:

ioperm(porta, número, permissão)

Onde:

porta : é a porta
número: é o número consecutivo de acesso a porta, por exemplo:
  ioperm(0x170,2,1)
Você terá acesso a porta 0x170 até 0x172, ou seja, terá acesso a 3 portas.
permissão: é especificado para se dar permissões do programa a portas (true(1), false(0)).

Uma outra forma de se acessar as portas é por meio da chamada open(), informando o endereço da porta (/dev/porta).

/proc/ioports

No arquivo /proc/ioports, estão descritas os endereços das portas em seu computador, nesse caso para saber o endereço de sua porta paralela:

cat /proc/ioports | grep parport

Isso irá exibir algo como:

0378-037a : parport0

Com esse dado, sua porta paralela esta em: 0x378.

Obtendo status de sua porta:

#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>
#include <stdlib.h>

#define PORTA 0x378 /* usando a porta pararela */

int main ()
{
/* obtendo acesso a porta */
if (ioperm(PORTA, 3, 1))
{
perror(“Erro na chamada ioperm()”);
exit(1);
}

/* obtendo status da porta */
printf (“Status da Porta é %d \n”, inb(PORTA+1));

return(0);
}

Devido algumas restriçoes do gcc na compilação é necessário passar parametros de otimização (-O2), por exemplo:

gcc -O2 -o porta porta.c

As vezes eu me arrependo de nunca ter feito eletrônica, mas René Descartes fala em um de seus livros, para ser um bom filosofo nunca faça filosofia. Se levar para o lado da informatica, então estou no caminho certo.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: