4.3 PROGRAMACION DEL PUERTO SERIAL
Enviado por chifirina • 9 de Junio de 2015 • 459 Palabras (2 Páginas) • 1.953 Visitas
Cuando se pretende realizar aplicaciones tales como programas de terminal, programadores de micro controladores (por ejemplo para el PIC), el acceso a el bajo nivel, a las señales de control del puerto serie, en concreto DCD,DTR,DSR,RTS,CTS y RI resulta muy importante como primer solución para el programador el acceso directo a los puertos de entrada y salida; Aunque esto implica dos inconvenientes: la necesidad de que el código corra con privilegios de supe usuario, el hecho de necesitar conocer con precisión como esta implementado el dispositivo físico.
Este último problema surge también si se decide hacer un controlador específico para una tarea específica.
Los puertos serie tienen asociados una serie de ficheros en el directorio /dev seguidos de un número que especifica que puerto es cada uno. Así pues /dev/cua0 sería el COM1 de MS-DOS; y en versiones más recientes del núcleo los puertos tienen asociados los ficheros /dev/ttyS acompañado de un número.
Para poder acceder a un periférico es preciso que su fichero asociado tenga permisos de acceso adecuados, igual que ocurre con el resto de los ficheros normales del disco duro. Puesto que los ficheros del dispositivo son del usuario root, es necesario hacer el cambio entrando como root, así para permitir que cualquiera pueda leer y escribir en el puerto serie. Un puerto serie dispone de los siguientes pines, cuyo número en el conector es el siguiente:
Todas las líneas están limitadas en corriente a unos 200mA. Esto protege al puerto en caso de que ocurra cualquier cortocircuito. Esta característica también es aprovechada por muchos circuitos simples que se conectan al puerto serie, de modo que se consigue una notable economía de componentes.
Debido a que las líneas TXD y RXD son controladas por el propio puerto serie y no por el procesador, en principio no resulta posible indicar directamente un valor de tensión en TXD o leer el que se encuentre en RXD. Todo lo que podemos hacer es enviar un byte al puerto para que este lo envíe por sí mismo en el formato indicado. Sin embargo, en la práctica, las UARTs disponen de un bit que, al activarlo, fuerzan un cero (+12 voltios) en dicho pin.
Por último, las funciones TIOCSBRK y TIOCCBRK permiten poner a cero (+12 volts) o devolver al estado normal, respectivamente, el pin TXD. Como dicho estado de reposo es un uno, estas funciones nos permiten controlar a voluntad dicha salida.
retorno=ioctl(fichero,TIOCSBRK,&argumento);
retorno=ioctl(fichero,TIOCCBRK,&argumento);
El puntero & argumento no es modificado, por lo que se puede dar cualquiera. Por supuesto, existen otras muchas funciones IOCTL para el puerto serie (man ioctl-list), pero todo lo que se puede hacer con ellas también resulta factible hacerlo con la librería TERMIOS. De esta manera así seria en Linux.
...