High Speed UARTs

IO复用情况

LPC3250 的7个串口中的UART1/2/7是高速串口。其中的IO复用见 LPC3250串口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 //  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值