Salut tout le monde,
Voilà mon soucie, j’essais de faire communiquer un PIC( 12f629) avec un Atmel (AT91SAM9260) via le protocole RS 232. Jusque là c’est claire.
L’atmel (at91) et sur une carte d’évaluation la (AT91SAM9260-EK), le pic lui et sur une carte easyPIC5.
Sur la carte d’atmel y a un linux embarqué et pour le PIC j’utilise mikroC pour codé.
Entre l’ordinateur et l’atmel, j’envois et je reçois des données, via l’hyper terminal, sans problème.
Le soucie c’est que je reçois rien depuis le PIC. Les données sont envoyées, mais ils ne s’affichent pas. Par contre si j’enlève le câble du PIC et je le mets sur mon ordinateur, il suffit que j’appuis sur entré dans l’hyperTerminal et les donnés qui étaient sensées s’afficher avant, se montrent. Voilà un peu le problème. C’est comme si les données étaient stockées quelque parts. Si vous avez une piste ou une idée, je serai très reconnaissant.
voici les code que j'utilise:
the code for writing
the code for reading:Code:#include <stdio.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <termios.h> int initport(int portCom) { struct termios options; // Get the current options for the port... tcgetattr(portCom, &options); // Set the baud rates to 9600.. cfsetispeed(&options, B115200); cfsetospeed(&options, B115200); // Enable the receiver and set local mode... options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; // Set the new options for the port... tcsetattr(portCom, TCSANOW, &options); return 1; } int portCom; int main(){ portCom = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if (portCom == -1) { printf("port enable to open"); perror("open_port: Unable to open /dev/ttyS0 - "); return 1; }else{ printf("ofor wriiiting\n"); } initport(portCom); while(1==1){ usleep(10000); if(write(portCom,"coming",6)){ printf("writen\n"); } } close(portCom); }
Code:#include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <termios.h> int initport(int portCom) { struct termios options; // Get the current options for the port... tcgetattr(portCom, &options); // Set the baud rates to 9600.. cfsetispeed(&options, B115200); cfsetospeed(&options, B115200); // Enable the receiver and set local mode... options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; // Set the new options for the port... tcsetattr(portCom, TCSANOW, &options); return 1; } int portCom; char word[254]; int main(){ portCom = open("/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY); if (portCom == -1) { printf("port enable to open"); perror("open_port: Unable to open /dev/ttyS0 - "); return 1; }else{ fcntl(portCom, F_SETFL, 0); //fcntl(portCom, F_SETFL, FNDELAY); printf("for reading\n"); } initport(portCom); //while(1==1){ usleep(100000); int iIn = read(portCom, word, 254); word[iIn-1] = 0x00; if (iIn < 0) { if (errno == EAGAIN) { printf("SERIAL EAGAIN ERROR\n"); return 0; } else { printf("SERIAL read error %d %s\n", errno, strerror(errno)); return 0; } } printf("\n%s",word); //} close(portCom); }
-----