driver serie

20
  - r c ca : - Práctica 3 COMUNICACIÓN SERIE RS-232

Upload: dixon-jose-martinez

Post on 01-Nov-2015

3 views

Category:

Documents


0 download

DESCRIPTION

Comunicación serial RS-232

TRANSCRIPT

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 1

    Prctica 3COMUNICACIN SERIE RS-232

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 2

    Introduccin a la prctica Gestin de Entrada/Salida del PC.

    Anatoma de un manejador de dispositivo (driver) para Linux.

    Nociones bsica de programacin

    Enunciado de la prctica.

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 3

    Entrada / Salida 2 espacios de direcciones:

    uno para la E/S, otro para la memoria.=> juegos de instrucciones diferentes.

    2 tipos de sincronismo de E/S: E/S por consulta de estado, E/S por interrupcin.

    2 tipos de transferencia de E/S: Transferencia de bloques directo a

    memoria(DMA). Transferencia programada.

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 4

    Entrada/Salida (cont)

    Instrucciones IN/OUT (lectura/escritura)En C: inb (puerto) y outb (valor,puerto).

    Consulta de estado. Normalmente un bit de un puerto indica si est ocupado o terminado la operacin un dispositivo.

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 5

    Control de Interrupciones

    Puertos de E/S asociados: Maestro: 0x20 y 0x21

    Esclavo:0xA0 y 0xA1

    IRQ0...IRQ7=>8..15

    IRQ8...IRQ15=>70h..77h

    Interrupciones asociadas: Instrucciones tpicasEnviar el cdigo EOI:(0x20)

    outp(0x20,0x20)

    outp (0x20,0xA0)

    Habilitar/Deshabiltar IRQ

    outp(0, 0x21)

    outp (0xFF, 0xA1)

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 6

    Estructura de un S.Ofd=open("/dev/cmos",O_RDONLY);read(fd,buffer,20);ioctl(fd,5);

    PROGRAMA DE USUARIO

    file_operations: read -> CMOS_lectura ioctl-> CMOS-ioctl

    NCLEO DEL S.Odriver

    Acceso a los puertos : inp , outp.Interrupciones IRQ.HARDWARE

    dispositivos

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 7

    Instalacin de un driver

    Recompilacin del ncleo (kernel) Instalando un mdulo cargable.

    1. Se compila con opciones especiales.2. Se utiliza el comando insmod para cargarlo en

    memoria.3.Para descargarlo rmmod.Para obtener una lista de mdulos cargados actualesSe utiliza el comando lsmodLos pasos 1 y 2 los haremos con la ordenmake modA, make modB y el paso 3 con make limpia*

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 8

    Anatoma del driver init_module:(Se ejecuta en la carga del mdulo)

    Reservar recursos y establecer Rutina de Servicio de la Interrupcin.

    cleanup_module:(Se ejecuta en la descarga del mdulo)Liberar recursos

    file_operations:Establece la relacin entre las acciones dirigidas al dispositivos y las

    funciones de l driver

    request_region (BASE,8,NOMBRE_DRIVER);request_irq (IRQ,manipulador, SA_SHIRQ,NOMBRE_DRIVER,NULL);if(register_chrdev(MAJOR_DRIVER,NOMBRE_DRIVER,&func_serie)

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 9

    Operacin bsicasstatic struct file_operations func_serie ={

    NULL, /* lseek */

    leer_serie, /*read*/

    escribir_serie, /*write*/

    NULL, /*readdir*/

    serie_poll, /*poll*/

    serie_ioctl, /*ioctl*/

    NULL, /*mmap*/

    abrir, /*open*/

    NULL,

    cerrar, /*close*/

    NULL,/*fsync*/

    NULL,/*fassync*/

    NULL,/*check_media_change*/

    NULL, /*revalidate*/};

    Abrir un dispositivo : usuario:fd=open(/dev/pr_serie,O_RDWR)

    driver: Se ejecutar la funcin abrir.

    Cerrar un dispositivo:

    usuario: close(fd);

    driver: Se ejecutar la funcin cerrar.

    Leer/Escribir

    usuario: read ( fd, buff,n) /write (fd,buff,n)

    driver: leer_serie(filep,buff,n,ppos)

    escribir_serie(filep,buff,n,ppos)

    Ioctl

    Usuario: ioctl (fd,arg);

    driver: serie_ioctl(inode,f,i,l)// en i habr una copia del valor de arg.

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 10

    Funciones tiles (cont) wake_up_interruptible e interruptible_sleep_on.

    Para despertar y dormir un proceso hasta la llegada de una interrupcin.

    wait_queueEs una estructura de datos donde estn almacenados los procesos dormidos.

    static struct wait_queue *cola=NULL;void manipulador (int i,void *blah, struct pt_regs *regs){char iir;// printk ("Servicio de interrupcin \n");iir=sinp(UART_IIR); // sinp(UART_IIR) es igual inp(BASE+UART_IIR)

    if (cola!=NULL) wake_up_interruptible(&cola);}

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 11

    SincronismoSincronismo por consulta de estado

    Sincronismo por interrupcin.

    Ejecucin

    Dormido Preparado

    Finalizado

    Nuevo

    A CPU

    Expulsin de

    La CPU

    Espera

    a una

    Interr

    upci

    n

    (inter

    rupt_s

    leep_o

    n)

    Llegada de la Interrupcin

    (wakeup_interruptible_on)

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 12

    Tratamiento de bitsEn el archivo linux/serial.h se define las siguiente constantes

    - Registros:UART_(registro): p.e UART_LCR

    -Mascaras: UART_(bit)_(registro) (...010...0) :p.e UART_DLAB_LCR 0x80 10000000

    Complementar una mscara

    ~UART_(bit_(registro) (1..0...1): p.e ~UART_DLAB_LCR 0x7F 01111111

    Consultar el bit i-simo

    x & UART_(bit)_(registro) => (x7 ...x0)2 AND( ...010...) = (0..xi..0)

    Poner a uno en el bit i-simo

    x | UART_(bit)_ (registro) => (x7...x0)2 OR ( ...010...) = (...xi+1,1,xi-1...)

    Poner a cero en el bit i-simo

    X&~UART_(bit)_(registro) =>(x7 ...x0)2 AND ~( ...010...) = =>(x7 ...x0)2 AND ( ...101...) =(...xi+1,0,xi-1...)

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 13

    Nociones de CEl nombre de un vector especifica la direccin de comienzo.

    Los pases por referencia en C consiste en pasar la direccin de la variable vector.

    char buffer[20];

    char fg;

    scanf(%s,buffer); // Lee un cadena del teclado y la almacena en buffer

    scanf (%c,&c); // Lee un carcter y lo almacena en la direccin &c

    printf (%c %c,buffer[0],c); // visualiza en pantalla el primer carcter // de buffer y la variable c

    La primera componente de un vector en C es el ndice 0.

    El operando & es la direccin de una variable.

    El operando * es el contenido de la direccin que le precede.

    El operador [ ] indica el acceso a memoria de la direccin que le antecede ms el desplazamiento que hay en interior.

    dato[3] es igual *(dato+3).

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 14

    Funciones sinp y soutp

    extern int port;static inline int sinp

    (int offset){

    return (inb (port+offset));}

    static inline void soutp(int valor,int offset){outb (valor,port+offset);

    }

    Driverextern int fd;char sinp ( int puerto){char tmp[1];read(fd,tmp,puerto); return (tmp[0]);}void soutp (char valor,intpuerto){ char tmp[1];

    tmp[0]=valor;write (fd,tmp,puerto);

    }

    Usuario

    Slo se debe utilizar para el ejercicio 3

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 15

    Interrupciones Serie

    En el momento de atender una interrupcin, se tiene que resetear para permitir la activacin de otras. El origen vendr especificado en el registro UART_IIR.

    ORIGEN RESET

    - -

    OE,PE,FE,BI (ver LSR) LEER LSR

    Dato en RBR LEER RBR

    THR vaco LEER IIR

    CTS,DSR,RI,DCD (ver MSR) LEER MSR

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 16

    Ejercicio 1ADQUISICIN EN EL ANALIZADOR LGICO DE LA

    SEAL TRANSMISIN DE DATOS (TD)

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 17

    Ejercicio 2. PROGRAMACIN DE UN DRIVER PARA ACCESO A LA UART

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 18

    Ejercicio 3PROGRAMA DE USUARIO QUE INTERCAMBIE MAYSCULAS

    POR MINSCULAS Y VICERVERSA

    Test2 ejA/B/C

    driver 2 driver A/B/C

    UART UART

    COM 2 COM 1

    cable

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 19

    Ejercico 3 (cont)

  • F50 - Prctica 3: COMUNICACIN SERIE RS-232 20

    Resto de ejercicios

    EJERCICIO 5 PROGRAMAR UN DRIVER PARA ACCESO AL PUERTO SERIE DIRECTAMENTE CON SINCRONISMO POR INTERRUPCIN

    EJERCICIO 4 PROGRAMAR UN DRIVER PARA ACCESO AL PUERTO SERIE DIRECTAMENTE CON SINCRONISMO POR CONSULTA DE ESTADO.

    EJERCICIO 6 PROGRAMAR UN DRIVER PARA ACCESO AL PUERTO SERIE DIRECTAMENTE CON SINCRONISMO DE CONSULTA DE ESTADO MEJORADO CON LA FUNCIN DORMIR