hisi35xx串口驱动的完善

32 篇文章 1 订阅
6 篇文章 0 订阅

鉴于hisi的uart3还没有打通,ls /dev/ | grep ttyA* ,看到的只有ttyAMA0 和ttyAMA1,且使用应用程序打开ttyAMA1设备后,使用write函数,发送,示波器观察没有波形输出。

猜想是GPIO复用管脚没打开于是编写了GPIO复用管脚驱动,加载驱动,ttyAMA1可以正常使用 。每次启动程序都要加载此驱动,比较麻烦,所以想要在内核添加,搜索UART,定位UART的位置,位于:arch/arm/mach-353xx/core.c。如下所示,添加了UART3,把从CPU的屏蔽掉。改为主CPU用。

HIL_AMBA_DEVICE(uart0, "uart:0",  UART0,    NULL);
HIL_AMBA_DEVICE(uart1, "uart:1",  UART1,    NULL);
HIL_AMBA_DEVICE(uart3, "uart:3",  UART3,    NULL);	//

static struct amba_device *amba_devs[] __initdata = {
	&HIL_AMBADEV_NAME(uart0),
	&HIL_AMBADEV_NAME(uart1),
	&HIL_AMBADEV_NAME(uart3),	//
	
};
static struct clk_lookup lookups[] = {
	{
		/* UART0 */
		.dev_id		= "uart:0",
		.clk		= &uart_clk,
	},
	{
		/* UART1 */
		.dev_id		= "uart:1",
		.clk		= &uart_clk,
	},	
	//modify by lqh at 
	{
		/* UART3 */
		.dev_id		= "uart:3",
		.clk		= &uart_clk,
	},
	
	{ /* SP804 timers */
		.dev_id		= "sp804",
		.clk		= &sp804_clk,
	},
#ifdef CONFIG_HI3536_SYSCNT
	{ /* syscnt timers */
		.dev_id		= "syscnt",
		.clk		= &syscnt_clk,
	},
#endif
};

这里仅仅是配置UART外设,管脚却是没有配置,配置UART1和UART3管脚使之能用。

	/* init UART1 and UART3 IO*/
	reg = readl((volatile void *)IO_ADDRESS(REG_UART1_RX_MUXCTRL));
	reg |= 0x01;
	writel(reg, (volatile void *)IO_ADDRESS(REG_UART1_RX_MUXCTRL));

	reg = readl((volatile void *)IO_ADDRESS(REG_UART1_TX_MUXCTRL));
	reg |= 0x01;
	writel(reg, (volatile void *)IO_ADDRESS(REG_UART1_TX_MUXCTRL));

	reg = readl((volatile void *)IO_ADDRESS(REG_UART3_RX_MUXCTRL));
	reg |= 0x01;
	writel(reg, (volatile void *)IO_ADDRESS(REG_UART3_RX_MUXCTRL));

	reg = readl((volatile void *)IO_ADDRESS(REG_UART3_TX_MUXCTRL));
	reg |= 0x01;
	writel(reg, (volatile void *)IO_ADDRESS(REG_UART3_TX_MUXCTRL));

REG_UART1_RX_MUXCTRL具体平台的复用寄存器地址,看文档。
经过此配置uart1和uart3能工作了。
发现:
1、串口输入什么进去,该窗口就能输出什么!该功能是liunx的串口的会显功能。可以通过应用程序屏蔽掉。
options.c_lflag  &= ~(ICANON | ECHO | ECHOE | ISIG | NOFLSH|ECHOK|ECHONL);  /*屏蔽会显功能*/
设置超时功能
options.c_cc[VTIME] = 0; /* 0s*/经过此设置串口即可工作。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

john_liqinghan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值