Una vez que tenemos la tarjeta de E/S lista y hemos
probado que llegan todas las señales correctamente y funcionan todas sus
puertas, podemos comenzar a realizar el driver, o la librería para su control
directo.
Con esta librería podremos
manejar ya sus puertos de forma transparente y configurar de forma sencilla la
tarjeta.
Para ello, como
siempre, primero crearemos la cabecera con las constantes de control y
configuración y las funciones de llamada.
Para manejar los
puertos de esta tarjeta necesitaremos:
Una función de configuración de
tarjeta que llamaremos PioConfig.
Una función de envío a puerto que llamaremos OutPio.
Una función de lectura de puerto que
llamaremos InPio.
Aquí pongo la
definición de la cabecera. En la siguiente entrada pondré la definición de las
funciones que aquí llamo.
48IOCENT.ASM
; Copyright (C) 2013 José Ángel Moneo Fernández ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; You should have received a copy of the GNU General Public License ; along with this program. If not, see <http://www.gnu.org/licenses/
;DIRECCIONAMENTO DE PUERTOS DE LA TARJETA 48IOCENT
;USART 1
PA0 EQU 0
PB0 EQU 1
PC0 EQU 2
P0 EQU 3 ;REGISTRO DE CONTROL
;USART 2
PA1 EQU 4
PB1 EQU 5
PC1 EQU 6
P1 EQU 7 ;REGISTRO DE CONTROL
;CONFIGURACIONES DE LOS PUERTOS
PSALIDA EQU 80H
PA EQU 10010000B
PB EQU 10000010B
PCH EQU 10001000B
PCL EQU 10000001B
;lee un dato del puero 8255 indicado y lo devuelve en al o en la variable indicada
InPio macro dest,puerto
ifndef _inpio
extrn _inpio:near
endif
mov ax,puerto
push ax
call _inpio
ifdif <reg>,<al>
mov dest,al
endif
endm
;envío un dato del puero 8255 indicado
OutPio macro puerto,dato
ifndef _outpio
extrn _outpio:near
endif
mov ax,puerto
push ax
mov al,dato
push ax
call _outpio
endm
;CONFIGURA UN PUERTO 8255 DE LA TARJETA
;PARA DEFINIR LOS MODOS DE FUNCIONAMIENTO DE LOS PUERTOS BASTARA
;INDICAR LOS QUE SEAN DE ENTRADA, LOS DEMAS SERAN DE SALIDA
;ASI PA-I PB-O PCH-I SE INDICARA COMO.. "PA" OR "PCH"
;EN EL CASO DE TODO COMO SALIDA SE INDICARA "PSALIDA"
; PIOCONFIG P0,PA,PB ESTO CONFIGURARIA EL 8255 0 CON LOS PUERTOS
; A Y B COMO ENTRADA
; el puerto C podrá ser definido por nible como entrada o salida
PioConfig macro pio,cnfg0,cnfg1,cnfg2,cnfg3
ifndef _outpio
extrn _outpio:near
endif
mov ax,pio
push ax
ifnb <cnfg3>
mov al,cnfg0 or cnfg1 or cnfg2 or cnfg3
else
ifnb <cnfg2>
mov al,cnfg0 or cnfg1 or cnfg2
else
ifnb <cnfg1>
mov al,cnfg0 or cnfg1
else
mov al,cnfg0
endif
endif
endif
push ax
call _outpio
endm
No hay comentarios:
Publicar un comentario
Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.