1. 程式人生 > >HI3516A支援串列埠2和串列埠3

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