- 论坛徽章:
- 0
|
用的芯片是AT91SAM9x35,有6路串口,usart0-usart3,uart0-uart1,在/arch/arm/mach-at91/board-sam9x5ek.c下面默认开启了usart0,对应ttyS1,ttyS0为DBGU口。
static void __init ek_map_io(void)
{
/* Initialize processor and DBGU */
cm_map_io();
/* USART0 on ttyS1. (Rx, Tx) */
at91_register_uart(AT91SAM9X5_ID_USART0, 1, 0);
}
我想再开启一路串口使用,就在上面添加了
static void __init ek_map_io(void)
{
/* Initialize processor and DBGU */
cm_map_io();
/* USART0 on ttyS1. (Rx, Tx) */
at91_register_uart(AT91SAM9X5_ID_USART0, 1, 0);
at91_register_uart(AT91SAM9X5_ID_USART2, 2, 0);
}
这样应该会出现ttyS0,ttyS1,ttyS2的,重新烧写,启动,打印信息中出现了
atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL
atmel_usart.1: ttyS1 at MMIO 0xf801c000 (irq = 5) is a ATMEL_SERIAL
atmel_usart.2: ttyS2 at MMIO 0xf8024000 (irq = 7) is a ATMEL_SERIAL
#cat /proc/tty/driver/atmel_serial
0: uart:ATMEL_SERIAL mmio:0xFEFFF200 irq:1 tx:1026 rx:39 RTS|CTS|DTR|DSR|CD|RI
1: uart:ATMEL_SERIAL mmio:0xF801C000 irq:5 tx:0 rx:0 DSR|CD|RI
2: uart:ATMEL_SERIAL mmio:0xF8024000 irq:7 tx:0 rx:0 CTS|DSR|CD|RI
貌似出现了设备节点,下面进行读写操作,用串口调试助手查看收发数据。
发送部分程序:
fd = open("/dev/ttyS2",O_RDWR | O_NOCTTY );
if(fd == -1)
{
perror("Can't Open Serial Port\n");
return -1;
}
printf("Open Serial OK!\n");
tcgetattr(fd,&opt);//获取当前配置
cfmakeraw(&opt);
cfsetispeed(&opt,B9600); /*设置输入输出为9600Bps*/
cfsetospeed(&opt,B9600);
tcsetattr(fd, TCSANOW, &opt);//设置新配置
retv=write(fd,sbuf,lenth);
if(retv==-1)
{
perror("retv write 1\n");
}
printf("The number of send data is:%d\n",retv);
close(fd)<0;
接收程序,和上面差不多。
操作新生成的ttyS2,就是发送不出数据,但可以接收数据。用同样的测试程序操作ttyS1,既能发数据也能收数据,这是怎么回事?
网上看到说要这样写:at91_register_uart(AT91SAM9X5_ID_USART2, 2, ATMEL_UART_RTS|ATMEL_UART_CTS);
但还是一样问题,求大神指点下! |
|