Chinaunix首页 | 论坛 | 博客
  • 博客访问: 416999
  • 博文数量: 380
  • 博客积分: 75
  • 博客等级: 民兵
  • 技术积分: 1925
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-05 15:35
文章分类

全部博文(380)

文章存档

2014年(1)

2013年(2)

2012年(19)

2011年(358)

我的朋友

分类:

2011-09-05 18:34:35

原文地址:High Speed UARTs 作者:chenxibing008

IO复用情况

LPC3250 的7个串口中的UART1/2/7是高速串口。其中的IO复用见 。

高速串口不能使用

文档描述:
Enable the LPC32xx high speed serial ports in the kernel driver configuration and select
which high speed serial ports of the 3 you want to use in the Linux kernel configuration
System Type--> menu. Add the device nodes to the /dev are using the following command:
[root@nxp /root]# mknod /dev/ttyTX0 c 204 196
[root@nxp /root]# mknod /dev/ttyTX1 c 204 197
[root@nxp /root]# mknod /dev/ttyTX2 c 204 198

已经根据文档,使能了高速串口:
#
# High speed UARTS
#
CONFIG_MACH_LPC32XX_HSUART1_ENABLE=y
CONFIG_MACH_LPC32XX_HSUART2_ENABLE=y
CONFIG_MACH_LPC32XX_HSUART7_ENABLE=y

但是,系统启动信息并没有任何有关于高速串口的提示,使用mknod命令建立设备节点后,往该节点发送字符,提示错误:
[root@nxp root]# mknod /dev/ttyTX0 c 204 196
[root@nxp root]# echo hello >/dev/ttyTX0
-sh: /dev/ttyTX0: No such device or address

而往普通串口发送是正常的:
[root@nxp root]# echo hello >/dev/ttyS1
[root@nxp root]# echo hello >/dev/ttyS2
[root@nxp root]# echo hello >/dev/ttyS3
[root@nxp root]# echo hello >/dev/ttyS0
hello
[root@nxp root]#

解决

    原来是设备驱动的串口,在非标准串口部分将LPC32XX的高速串口配置后即可。
    <*> LPC32xx high serial port support 

内核配置文件:
#
# Non-8250 serial port support
#
# CONFIG_SERIAL_AMBA_PL010 is not set
# CONFIG_SERIAL_AMBA_PL011 is not set
CONFIG_SERIAL_HS_LPC32XX=y

启动信息:
CLCD: Phytec LCD hardware, QVGA portrait display
Console: switching to colour frame buffer device 30x40
Serial: 8250/16550 driver4 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0x40090000 (irq = 9) is a 16550A
console [ttyS0] enabled
serial8250.0: ttyS1 at MMIO 0x40080000 (irq = 7) is a 16550A
serial8250.0: ttyS2 at MMIO 0x40088000 (irq = 8) is a 16550A
serial8250.0: ttyS3 at MMIO 0x40098000 (irq = 10) is a 16550A
lpc32xx_hsuart.0: ttyTX0 at MMIO 0x40014000 (irq = 26) is a lpc32xx_hsuart
lpc32xx_hsuart.0: ttyTX1 at MMIO 0x40018000 (irq = 25) is a lpc32xx_hsuart
lpc32xx_hsuart.0: ttyTX2 at MMIO 0x4001c000 (irq = 24) is a lpc32xx_hsuart
loop: module loaded
LPC32XX_mii_bus: probed

使用了udev后,无需手动建立设备节点了,在/dev/目录下已经有了ttyTX0~2节点,再次发送字符,可以正常了:
[root@nxp root]# ls /dev/ttyTX*
/dev/ttyTX0  /dev/ttyTX1  /dev/ttyTX2
[root@nxp root]# echo hello>/dev/ttyTX0
[root@nxp root]# echo hello>/dev/ttyTX1
[root@nxp root]# echo hello>/dev/ttyTX2
[root@nxp root]#

总结

    为了更加方便实用,最好修改内核配置文件,在选中
CONFIG_MACH_LPC32XX_HSUART1_ENABLE
CONFIG_MACH_LPC32XX_HSUART2_ENABLE
CONFIG_MACH_LPC32XX_HSUART7_ENABLE
    中的任何一个,都同时选中CONFIG_SERIAL_HS_LPC32XX,保证高速串口可以玩完全使用。

实际测试

    目前还没有仔细配置IO复用情况,高速串口测试如下:
ttyTX0——UART1,能发能收
ttyTX1——UART2,能发不能收
ttyTX2——UART7,不能收发

新版本问题


    2009-06-01,新版本的芯片高速串口不能使用,不能进行收发,引脚无信号。后来重新设置了UART_LOOP,禁止了全部串口的loopback功能,引脚有信号了:
文件:arch/arm/mach-lpc32xx/board-smartarm3250.c
601     //ABING
602     __raw_writel(0, io_p2v(0x40054008)); //turn off all uart's loopback

    但是波特率不对,程序设置为115200,PC机需要使用128000才能正确接收。

波特率问题解决,drivers/serial/hs_serial_lpc32xx.c文件中计算有BUG,进行了如下修正,注释了73~76的代码:
 70     /* Find the closest divider to get the desired clock rate */
 71     div = uartclk / rate;
 72     hsu_rate = (div / 14) - 1;
 73 //  if (hsu_rate != 0)
 74 //  {
 75 //      hsu_rate--;
 76 //  }
阅读(403) | 评论(0) | 转发(0) |
0

上一篇:I2S UDAl1380

下一篇:Standard UART's driver

给主人留下些什么吧!~~