AM335X下Linux使用所有6個串列埠,包括UART4、UART5
阿新 • • 發佈:2019-01-05
AM335X開發板總共有6個串列埠,其中因為UART4和UART5與其他功能複用,所以我們在使用的時候,並不使用所有串列埠。但是有的時候,我們恰恰是要用到儘量多的串列埠,這種情況下,則可以簡單的修改一下核心程式碼。UART4和UART5功能複用情況如下:
UART4 和 can 功能有衝突,預設情況下開啟can功能。
UART5 和 K2/K3按鍵有衝突,預設情況下使用按鍵。
注意:如果使用了uart4,那麼與uart4有衝突的can功能就不能使用了。同理,使用了uart5後,K2/K3按鍵功能也不能使用了。
具體步驟
1、開啟核心的檔案:
$vi arch/arm/mach-omap2/board-am335xevm.c
2、新增uart4、uart5功能腳定義程式碼(如果沒有)。
/* Module pin mux for uart3 */ static struct pinmux_config uart3_pin_mux[] = { {"spi0_cs1.uart3_rxd", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, {"ecap0_in_pwm0_out.uart3_txd", OMAP_MUX_MODE1 | AM33XX_PULL_ENBL}, {NULL, 0}, }; /* Module pin mux for uart4 */ static struct pinmux_config uart4_pin_mux[] = { {"uart0_ctsn.uart4_rxd", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP}, {"uart0_rtsn.uart4_txd", OMAP_MUX_MODE1 | AM33XX_PULL_ENBL}, {NULL, 0}, }; /* Module pin mux for uart5 */ static struct pinmux_config uart5_pin_mux[] = { {"mii1_col.uart5_rxd", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP}, {"rmii1_refclk.uart5_txd", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL}, {NULL, 0}, 3、新增初始化串列埠4、5程式碼(如果沒有),如下藍色部分。 static void uart3_init(int evm_id, int profile) { printk("--------uart3_init\n"); /* Configure Uart3*/ setup_pin_mux(uart3_pin_mux); return; } static void uart4_init(int evm_id, int profile) { printk("--------uart4_init\n"); /* Configure Uart4*/ setup_pin_mux(uart4_pin_mux); return; } static void uart5_init(int evm_id, int profile) { printk("--------uart5_init\n"); /* Configure Uart4*/ setup_pin_mux(uart5_pin_mux); return; } 4、新增串列埠4、5的註冊,如下藍色程式碼,並註釋掉can功能和keys按鍵功能,如下紅色程式碼。 {uart1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, {uart2_init, DEV_ON_BASEBOARD, PROFILE_ALL}, {uart3_init, DEV_ON_BASEBOARD, PROFILE_ALL}, {uart4_init, DEV_ON_BASEBOARD, PROFILE_ALL}, {uart5_init, DEV_ON_BASEBOARD, PROFILE_ALL}, // {d_can_init, DEV_ON_BASEBOARD, PROFILE_ALL}, // {gpio_keys_init, DEV_ON_BASEBOARD, PROFILE_ALL}, {gpio_led_init, DEV_ON_BASEBOARD, PROFILE_ALL}, {NULL, 0, 0},
5、重新編譯核心,並更新系統就可以了。
本文技術指導:米爾電子AM335X系列板卡研發工程師