HI3516A支援串列埠2和串列埠3
在海思3516A平臺,預設是開啟了串列埠0和串列埠1的驅動,在/dev下面可以看見他們的節點: "/dev/ttyAMA0"和"/dev/ttyAMA1",但是並沒有串列埠2和串列埠3的節點,開啟核心的menuconfig介面,也找不到開啟串列埠2和串列埠3的配置,這就意味這3516對串列埠2和串列埠3並沒有驅動支援,需要自己動手了。
3516A的串列埠驅動的實現在 "osdrv\opensource\kernel\linux-3.4.y\arch\arm\mach-hi3516a\core.c",可以看到裡面只有串列埠0和串列埠1的定義。增加串列埠2和串列埠3步驟如下:
1、增加定義:
HIL_AMBA_DEVICE(uart2, "uart:2", UART2, NULL);
HIL_AMBA_DEVICE(uart3, "uart:3", UART3, NULL);
2、在結構裡增加device:
static struct amba_device *amba_devs[] __initdata = {
&HIL_AMBADEV_NAME(uart0),
&HIL_AMBADEV_NAME(uart1),
&HIL_AMBADEV_NAME(uart2),
&HIL_AMBADEV_NAME(uart3),
};
3、增加clock:
static struct clk_lookup lookups[] = {
{
/* UART0 */
.dev_id
= "uart:0",
.clk= &uart_clk,
}, { /* UART1 */
.dev_id
= "uart:1",
.clk= &uart_clk,
}, {
/* UART2 */
.dev_id
= "uart:2",
.clk= &uart_clk,
}, { /* UART3 */
.dev_id
= "uart:3",
.clk= &uart_clk,
},{ /* SP804 timers */
.dev_id
= "sp804",
.clk= &sp804_clk,
},
};
4、編譯核心
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-clean
makeARCH=arm CROSS_COMPILE=arm-hisiv300-linux- uImage
5、使用HiTool燒寫核心。燒錄完成,就可以在板子的/dev下面看見他們的節點了:"/dev/ttyAMA2"、"/dev/ttyAMA3"
另外,由於串列埠3是和串列埠1的rts複用,還可以gpio複用,因此使用串列埠3時要設定複用:
himm 0x200f0078 0x02 //uart3rx
himm 0x200f0080 0x02 //uart3tx
當然,串列埠1和2也是要設定的:himm 0x200f007c 0x01 //uart1rx
himm 0x200f0084 0x01 //uart1tx
himm 0x200f0088 0x01 //uart2rx
himm 0x200f008c 0x01 //uart2tx