1. 程式人生 > >海思Hi3515的UART2和UART3是如何被載入到核心中的

海思Hi3515的UART2和UART3是如何被載入到核心中的

Hi3515的UART驅動位於drivers/serial/amba-pl011.c

arch/arm/mach-hi3515v100/core.c中只發現UART0UART1 對應的串列埠ttyAMA0 ttyAMA1 串列埠 但是查不到串列埠ttyAMA2 和ttyAMA3 ,在arch/arm/mach-hi3515v100/core.c增加了UART0 和UART1 但是在/dev/下面還是發現不了ttyAMA2 和ttyAMA3  通過修改/etc/init.d/S00devs 增加了ttyAMA2 和ttyAMA3 但是open不成功,請教各位幫幫我 謝謝大家

如何驅動串列埠3 和串列埠4  海思HI351自帶4個串列埠

首先了解到Hi3515 的串列埠掛載在AMBA匯流排上,驅動採用的是ARM AMBA PL011去的那個原始碼在核心drivers/serial/amba-pl011.c
具瞭解首先到開發板給定的核心查詢自身所帶的驅動檔案;查詢方法:進入到核心根目錄執行makemenuconfig命令 跳出如圖所示:
選擇Device Drivers 回撤->選擇 Character devices 回撤-》選擇Serial drives進入串列埠驅動目錄如圖所示:
進入後檢視需要將ARM AMBA PL011 載入進核心編譯;
Hi3515 的串列埠掛載在AMBA 總線上,所以我們必須將串列埠設備註冊到AMBA 匯流排,首先初始化AMBA 匯流排裝置連結串列,然後判斷是否有裝置要新增,如果有則呼叫__driver_attach 函式將新裝置新增至AMBA 匯流排裝置連結串列。
程式碼修改
A:我們知道了驅動程式碼在drivers/serial/amba-pl011.c

檔案中;根據Hi3515 H.264編解碼處理器使用者指南.pdf文件11.2UART篇章介紹Hi3515 提供了以下4 個UART 單元:?? UART0
主要用於除錯
UART1
主要用於接RS-485 匯流排和控制雲臺。
UART2、UART3
主要用於擴充套件介面,如外部MCU(Micro Controller Unit)。
目前只能看到UART0 和UART1 那麼就在arch/arm/mach-hi3515v100/core.c中所有出現uart0和uart1的地方都添上uart2和uart3
Line 169附近 增加
#define UART3_IRQ { INTNR_UART3, NO_IRQ }//oleitao 2012-03-21 add
Line 173 附近增加
HIL_AMBA_DEVICE(uart3, "uart:3",  UART3,    NULL);//oleitao 2012-03-21 add
Line 189行附近 增加
& HIL_AMBADEV_NAME(uart3),//oleitao 2012-03-22
B:根據海思文件知道UART2和UART3介面訊號收發與VI和GPIO的部分訊號線複用,UART2和UART3的接受和傳送分別對應管腳為VI0HS VI0VS 和VI2HS VI2VS;對應的暫存器分別為reg0(偏移地址0x0000)、reg1(偏移地址0x0004)和reg10(偏移地址0x0028)、reg11(偏移地址0x002C)(由於-v裝置沒有對IO暫存器使用)所以在串列埠初始化的地方直接對該地址設定1即可;
VI0HS VI0VS 和VI2HS VI2VS 管腳的具體複用情況。
00:VI0HS;
01:URXD2;
10:GPIO1_3;
最後在hisilicon_init_machine函式後面增加對這4個管腳複用設定為串列埠使用;
 writew(1, IO_ADDRESS(REG_BASE_IO));
 writew(1, IO_ADDRESS(REG_BASE_IO+0x0004));
 writew(1, IO_ADDRESS(REG_BASE_IO+0x0028));
 writew(1, IO_ADDRESS(REG_BASE_IO+0x002C));
然後編譯核心重新下載核心 查

            
                
                     看dev目錄下有了ttyAMA2 和ttyAMA3
然後用串列埠測試工具測試OK!

//

core.c加入& HIL_AMBADEV_NAME(uart2),後,用mknod建立裝置節點即可。 

//