Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Capitulo USB PDF
Capitulo USB PDF
Integrado
Otra alternativa es emplear un lenguaje de alto nivel con una mayor cantidad
de abstracciones, la cuales son más fáciles de usar y reducen los tiempos de
desarrollo. Tal vez los lenguajes de alto nivel más comunes para la programación de
controladores es el C y C++, pero también existen otros lenguajes variantes del BASIC
y el Pascal. Una vez escrito el programa en el lenguaje de alto nivel, será necesario
emplear un compilador para traducirlo, ya sea a lenguaje de Ensamblador o
directamente a lenguaje de máquina. Es importante considerar que el código de
Ensamblador generado por los compiladores tiende a ser más largo e ineficiente que
aquel directamente desarrollado en lenguaje de Ensamblador. Esta desventaja puede
ser critica en ciertas aplicaciones que requieren un programas compactos y de una
alta velocidad de ejecución. Un vez que el compilador ha generado el código de
Ensamblador (.asm), será necesario utilizar un ensamblador para generar el código
binario de máquina.
CICLO DE DISEÑO:
Con los ejemplos de las lecciones que Microchip proporciona de forma gratuita
en su página web, podemos comenzar a entender el funcionamiento del dispositivo.
ORGANIZACIÓN DE LA MEMORIA:
La Memoria de Datos esta formada con ‘file registers’. Las instrucciones que
necesitan acceder a estos datos utilizan 12 bits, por lo que sólo pueden direccional
4096 posiciones. Estos ‘file registers’ son agrupados en páginas de forma que
podemos acceder a distintas páginas con dos bits más significativos del Registro
BSR<3:0>. Para cargar un valor literal en el registro BSR se utiliza la instrucción
MOVLB.
Todas las instrucciones se pueden ajustar a uno de los tres formatos que
especificamos a continuación:
2. Bit Instruction: Opera sobre un bit especifico dentro del registro. Formada
por 7 bits para la dirección del dato, 3 bit numéricos y los restantes 4 bit
para el código de la instrucción.
;******************************************************************
;
; PROYECTO FIN DE CARRERA
; PLACA DETECTOR DE MOVIMIENTO
; ENCENDER LED 1
;
; Realizado: MARTA ARENAS MAS
; Fecha: 22-Mayo-2008
; Versión: v1
;
;******************************************************************
;
; Ficheros Utilizados: P18F2550.INC
; 18F2550.LKR
;
;******************************************************************
;******************************************************************
ORG 0x00 ; Inicio en el Vector de Reset
goto INICIO ; Va a la primera instrucción del programa
ORG 0x18 ; Salta los Vectores de Interrupción
;******************************************************************
; Comienza el programa
INICIO
;******************************************************************
; Fin del programa
END
Respecto a los puntos finales, además del EP0 (que siempre se utiliza), se
necesitará otro más para pasar los datos del periférico al Host. La dirección de los
datos será de entrada y el tipo de transferencia que utilizado será tipo bulk, masiva.
Utilizaremos el EP1, que es bidireccional y tiene tres modos de comunicación, bulk,
Interrupción o isócrona.
Los instaladores de clase y dispositivo son DLLs. Windows tiene una serie de
instaladores por defecto que el Administrador de Dispositivos utiliza para localizar y
cargar drivers para dispositivos pertenecientes a clases soportadas por el sistema
operativo.
• Versión: Especifica el sistema operativo para el que está destinado el fichero INF.
Para dispositivos que utilizan WDM (Windows Driver Model) drivers, el valor
puede ser $Windows 98$, $Windows NT$ o $Chicago$, independientemente del
sistema operativo que esté instalado en el ordenador. En esta sección se indica
también el nombre de la clase de los dispositivos instalados con este fichero así
como un identificador de clase que es utilizado por el registro del sistema para
identificar a los dispositivos pertenecientes a esta clase.
• ClassInstall: En esta sección se indica si se ha de instalar una nueva clase. El
Administrador de Dispositivos únicamente procesa la sección si una clase de
dispositivo aún no está instalada en el sistema. Aquí será donde indicaremos el
icono, el nombre y la descripción de la clase así como el nombre del archivo DLL
(tempusbci.dll) que instalará la nueva clase en el Administrador de Dispositivos.
• Manufacturer: Esta sección contiene el identificador de vendedor y de producto,
que en nuestro caso se corresponde con (USB\ VID_04D8 & PID_0011). Cuando
el Administrador de Dispositivo encuentra una coincidencia entre estos valores y
los identificadores obtenidos del dispositivo durante la enumeración, sabe que ha
encontrado el archivo INF correcto.
• DestinationDirs: Indica el directorio o directorios donde se copiarán los ficheros.
• Strings: Define las cadenas referenciadas en las otras secciones.
El último paso ha sido la edición del Driver suministrado por Microchip de tal
forma que apareciera en el Administrador de Dispositivos una nueva clase con un
icono personalizado.
C:\WINDDK\3790.1830\src\general\toaster\classinstaller.
Incluye varios directorios que contienen todos estos ficheros, aunque el único
interesante para nosotros es el directorio classinstaller. Dentro de este directorio
sustituiremos el icono del ejemplo por el que nosotros vayamos a utilizar, en este caso
el icono se llama icon.ico, y el fichero tostrcls.def lo sustituiremos por otro llamado
picusbci.def que contendrá el siguiente código:
LIBRARY PICUSBCI
EXPORTS
PicUSBClassInstaller
DWORD CALLBACK
PicUSBClassInstaller(
IN DI_FUNCTION InstallFunction,
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
)
Debemos entonces modificar el archivo .inf suministrado por Micrchip, para que
lea la dll creada por la DDK. El driver en sí lo suministra Microchip y no debemos
modificarlo, aunque podría estudiarse, ya que existen limitaciones de velocidad en el
driver que proporciona y no acepta la velocidad completa de los dispositivos USB, sin
embargo es un estudio complejo que no es necesario en el proyecto.
Las funciones más importantes para el manejo del USB, son entre otras:
• Oscilador en modo HSPLL con los valores pre y post-escala adecuados para
obtener una frecuencia interna de 48MHz necesaria para la comunicación con USB
de alta velocidad.
• Habilitación del regulador interno del módulo USB
• Deshabilitación del Wachdog Timer que no vamos a utilizar en el proyecto
Tras la inicialización del USB se configurarán los registros del convertidor A/D y
se comenzará con la lectura consecutiva de las señales analógicas procedentes de las
entradas AN0, AN1 y AN2 y el envío de los resultados obtenidos por el módulo USB.
La conversión y el envío de datos se realiza insertando un retraso de 0.5ms entre cada
conversión y envío, lo que permite controlar que las conversiones y los envíos se
realicen de forma ordenada.
LED ON
Inicialización registros USB
Enumeración
¿Dispositivo
Enumerado?
Sí
Conversión A/D
Transmisión de datos