도와주세요!!
글 수 15,339
2006.11.14 23:47:37 (*.241.183.9)
10470
지금 EX-X5에서 ttyS00로 AVR에 1바이트 아스키코드값이나 원하는 문자등을 넘기려고 합니다.
AVR측에서 동장이 안되어서 ttyS00에 TX부분에 오실로스코프를 찍어보니
값이 날라가는데 혹시나 싶어서 다른 컴퓨터에서 하이퍼터미널로 값을 읽어드렸습니다.
원하는 값이 안나오고 특수문자 같은 쓰레기값이 하이퍼터미널창에서 나오는데
무엇이 문제인지 알고 싶습니다.
X5에서는 GTK에서 버튼을 눌러 시리얼값을 주도록 하였구요..시리얼 부분 소스 올립니다.
int handle;
struct termios oldtio,newtio;
//핸들과 termios 구조체를 선언한다.
char Buff[255];
char *Buff = data; //버튼 클릭시 해당하는 data값 "o"가 넘어옵니다.
// 아스키코드값을 넣으면 안되더군요. int형으로 선언해도요..
int RxCount;
int loop;
int w_count;
handle = open("/dev/ttyS00", O_RDWR | O_NOCTTY);//파일을 연다.
//읽기/쓰기 모드로 모뎀장치를 연다.(O_RDWR)
//데이터 전송시에 <ctrl>-c 문자가 오면 프로그램이 종료되지 않게
//controlling tty가 안되도록 한다(O_NOCTTY)
if(handle < 0)
{
printf("Serial Open Fil [/dev/ttyS00]rn" );
exit (0);
}
tcgetattr(handle, &oldtio); //현재 열려진 통신 포트의 상태를 읽어온다.
//사용이 끝난 후 통신 포트 상태를 이전으로 되돌리기 위해 기록.
memset( &newtio, 0, sizeof(newtio));
newtio.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
//전송속도 , 8N1, 모뎀제어 안함, 문자 수신 가능
newtio.c_iflag = IGNPAR | ICRNL; //패리티 에러 문자 바이트 무시
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;
tcflush(handle, TCIFLUSH); //통신 수행 이전에 전송되지 않았거나 수신처리
//안된 데이터를 모두 비운다.
tcsetattr(handle, TCSANOW, &newtio); // 모뎀 라인 초기화, 포트 setting을 마침
w_count=write(handle, Buff,1);
//수신된 문자를 다시 전송한다.
tcsetattr(handle, TCSANOW, &oldtio);
//프로그램에서 설정하기 이전의 상태로 포트 상태를 만든다.
주석부분 지운다고 {}등은 신경쓰지 않았고요. 변수 선언한 부분은 안보셔도 됩니다..
아시는분 답변 부탁드립니다 (__)