我们使用的是AM3352处理器,运行linux系统,使用TI官方SDK6.0开发,相应linux系统内核版本为:linux-3.2.0-psp04.06.00.11。
系统调试串口使用的是uart1,现在需要使用uart2作为通信串口与一个470MHz的无线模块通信,需要波特率为14400才能正常通信。
百度了一种方法,通过应用层修改分频实现设定任意波特率:
http://blog.chinaunix.net/uid-9543173-id-1988980.html
但实际测试时发现无法使用,这种方法最终会调用到一个omap-serial.c里面的serial_omap_verify_port函数,异常终止,但该函数显示禁止内核修改串口参数的提示:
static int serial_omap_verify_port(struct uart_port *port, struct serial_struct *ser)
{
/* we don't want the core code to modify any port params */
dev_dbg(port->dev, "serial_omap_verify_port+\n");
return -EINVAL;
}
即便我们将函数调用过程中一些异常信息屏蔽,最终执行完成后,也提示分频和波特率修改成功,但是最终仍然无法按照设定的波特率和外设正常通信。
难道是AM335x不支持串口非标波特率?请问哪位有在AM335x下设定串口非标波特率的方法,非常感谢。
Jian Zhou:
从TRM的table 19-6看到,14400这个波特率是支持的啊,修改下底层驱动的寄存器配置就可以了
kai zong:
回复 Jian Zhou:
我们先修改底层代码试试,但还是想能用内核已经提供的方法,在应用层解决这个问题。
jiew:
回复 Jian Zhou:
請問UART2 底層驅動暫存器是那些檔案??
在linux-3.2.0-psp04.06.00.11/ 下的哪一個目錄檔案???
Jian Zhou:
回复 jiew:
在应用层设置termios这个变量的波特率属性,起作用么?
Eric panda:
回复 Jian Zhou:
因为是非标准的波特率,所以用termios这个变量的cfsetispeed()与cfsetospeed()并没有B14400这个选项。
Jian Zhou:
回复 Eric panda:
那你直接修改驱动层试试,driver/tty/serials/omap-serials.c
Jian Zhou:
回复 jiew:
jjew,你的办法应该是可行的,实际可以测一下
kai zong:
回复 jiew:
谢谢jjew,你的方法可以工作。
现在也只能这样做,看来是必须要修改底层代码了。