problems using 823 serial port
Pergola, Michael
MichaelPergola at Danfoss.com
Fri Oct 26 05:25:01 EST 2001
Sergio,
Try incorporating these into your code:
io = open(MODEMDEVICE, O_RDONLY | O_NOCTTY | O_NDELAY);
cfsetispeed(&newtio, BAUDRATE); /* change port baud rate */
cfsetospeed(&newtio, BAUDRATE);
/* ignore ^C interrupt but enable flow control on input */
new_opts.c_iflag |= (IGNBRK | IXOFF);
/* disable flow control on output */
new_opts.c_iflag &= ~(IXON);
fcntl(fd, F_SETFL, 0);
Regards,
Michael Pergola
Software Engineer
Danfoss Air-Conditioning & Refrigeration Division
7941 Corporate Blvd.
Baltimore, MD 21236
> -----Original Message-----
> From: Sergio Massami Sakai [SMTP:Sakai at cpqd.com.br]
> Sent: Thursday, October 25, 2001 2:58 PM
> To: linuxppc-embedded at lists.linuxppc.org
> Subject: problems using 823 serial port
>
>
> Hi everybody,
>
> I´ve been trying to use the serial port of a FADS 823 board to control
> an external hardware and I had some problems.
>
> I´ve implemented and tested some functions using the serial port of my
> PC (running Red Hat 6.2) to make this hardware control and everything
> worked fine.
> But, when I tried to use the same functions (with the same serial port
> configuration) in my FADS board running the 2.4.4 Linux kernel version
> (from denx.de), I couldn´t read the messages that I received at my
> serial port (read returns -1).
>
> I´ve made another test using the non canonical example mentioned in
> Peter Baumann´s howto (Serial Programming Howto) to receive, at my
> board, messages that I sent from my PC using miniterm (I´ve used the non
> canonical example because the configuration that I use for receiving the
> messages at the serial port is similar).
> When I tried this, the board´s serial port driver didn´t buffer any
> message (well, I think so, cause I coudn´t read nothing) before I sent a
> Carriage Return or a Line Feed.
> For each message I send, I must to send a CR ou LF before. For example:
> PC FADS BOARD
> 1234 No response
> <CR>1234 1234
> <LF>1234 1234
>
> This fact doesn´t happen when I use the PC´s serial port to receive
> messages (using the same program).
> Does anyone know what could be the problem?
>
> Thanks,
>
> Sakai
>
> PS:
> The program that I have used for reading the serial port:
>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <termios.h>
> #include <stdio.h>
>
> #define BAUDRATE B9600
> #ifdef PPC
> #define MODEMDEVICE "/dev/ttyS0"
> #else
> #define MODEMDEVICE "/dev/ttyS1"
> #endif
>
> #define _POSIX_SOURCE 1 /* POSIX compliant source */
> #define FALSE 0
> #define TRUE 1
>
> volatile int STOP=FALSE;
>
> main()
> {
> int fd,c, res;
> struct termios oldtio,newtio;
> char buf[255];
>
> fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );
> if (fd <0) {perror(MODEMDEVICE); exit(-1); }
>
> tcgetattr(fd,&oldtio); /* save current port settings */
>
> bzero(&newtio, sizeof(newtio));
> newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
> newtio.c_iflag = IGNPAR;
> newtio.c_oflag = 0;
>
> /* set input mode (non-canonical, no echo,...) */
> newtio.c_lflag = 0;
>
> newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
> newtio.c_cc[VMIN] = 5; /* blocking read until 5 chars received
> */
>
> tcflush(fd, TCIFLUSH);
> tcsetattr(fd,TCSANOW,&newtio);
>
>
> while (STOP==FALSE) { /* loop for input */
> res = read(fd,buf,5); /* returns after 5 chars have been input */
> //buf[res]=0; /* so we can printf... */
> for (c=0;c<res;c++)
> printf("%02x ",buf[c]);
> printf(":%d\n",res);
> //printf(":%s:%d\n", buf, res);
> if (buf[0]=='z') STOP=TRUE;
> }
> tcsetattr(fd,TCSANOW,&oldtio);
> }
>
>
** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-embedded
mailing list