1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
#include <time.h>
#include <fcntl.h>
#include <stdio.h>
#include <ctype.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <termio.h>
#include <syslog.h>
#include <pthread.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <semaphore.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <bits/signum.h>
#include <sys/resource.h>
int
uart_init(
int
arg,
int
baud)
{
int
fd;
char
port[20];
struct
termios Opt;
int
uartbiit[50]= {B115200,B9600,B19200,B4800,B2400,B1200};
sprintf
(port,
"/dev/s3c2410_serial%d"
,arg);
printf
(
"Use port: %s \n"
, port);
fd = open(port, O_RDWR);
//打开串口
if
(fd<0)
{
return
-1;
//没有打开返回
}
tcgetattr(fd,&Opt);
//初始化
tcflush(fd,TCIFLUSH);
cfsetispeed(&Opt,uartbiit[baud]);
//设置波特率
cfsetospeed(&Opt,uartbiit[baud]);
Opt.c_cflag |= CS8;
//设置数据位
Opt.c_cflag &= ~PARENB;
Opt.c_oflag &= ~(OPOST);
Opt.c_cflag &= ~CSTOPB;
Opt.c_lflag &= ~(ICANON|ISIG|ECHO|IEXTEN);
Opt.c_iflag &= ~(INPCK|BRKINT|ICRNL|ISTRIP|IXON);
Opt.c_cc[VMIN] = 64;
//最大长度
Opt.c_cc[VTIME] = 1;
//超时时间
if
(tcsetattr(fd,TCSANOW,&Opt) != 0)
//装载初始化参数
{
perror
(
"SetupSerial!\n"
);
close(fd);
return
-1;
}
return
(fd);
}
int
main()
{
int
fd, len = 0, i=0;
char
buf[300];
if
((fd = uart_init(1, 0)) <0)
//打开串口,波特率为115200;
{
printf
(
"Open uart err \n"
);
return
-1;
}
sprintf
(buf,
"Hello world !\n"
);
//输出内容
while
(1)
{
memset
(buf, 0 ,
sizeof
(buf));
#if 0
while
((len = read(fd,buf,64))>0)
{
printf
(
"%s\n"
,buf);
}
#endif
#if 1
int
nread;
while
((nread = read(fd, buf, 300))>0)
{
// printf("read len %d\t",nread);
// buf[nread] = '\0';
printf
(
"%s\n"
,buf);
write(fd,buf,
sizeof
(buf));
}
#endif
}
return
0;
}
|