i.MX8QXP Android Automotive12 增加 M4 GPIO 触发倒车影像功能

1. 概述

i.MX8QXP Android Automotive12  默认 M4 触发倒车影像方式是通过 M4 串口输入方式,输入 gear 2 触发打开倒车影像应用显示,输入 gear 4 关闭倒车影像应用显示。本文章介绍如何使用 M4 控制的 GPIO 触发倒车影像功能。

2. 代码修改

2.1 SCFW 资源分配

本文使用 ESAI0_TX3_RX2 引脚做此 GPIO 功能,修改 SCFW 源码,把 GPIO0 和 ESAI0_TX3_RX2 资源从 A 核释放到 M4,如下所示:

--- a/platform/board/mx8qx_mek/board.c
+++ b/platform/board/mx8qx_mek/board.c
@@ -778,6 +778,8 @@ sc_err_t mark_shared_resources(sc_rm_pt_t pt_src, sc_bool_t movable)
// SC_R_LVDS_1, movable));
BRD_ERR(rm_set_resource_movable(pt_src, SC_R_ISI_CH0,
SC_R_ISI_CH0, movable));
+ BRD_ERR(rm_set_resource_movable(pt_src, SC_R_GPIO_0,
+ SC_R_GPIO_0, SC_TRUE));

/* Move some pads not in the M4_0 subsystem */
BRD_ERR(rm_set_pad_movable(pt_src, SC_P_MIPI_CSI0_GPIO0_00,
@@ -786,6 +788,8 @@ sc_err_t mark_shared_resources(sc_rm_pt_t pt_src, sc_bool_t movable)
SC_P_MIPI_DSI0_I2C0_SDA, movable));
//BRD_ERR(rm_set_pad_movable(pt_src, SC_P_MIPI_DSI1_I2C0_SCL,
// SC_P_MIPI_DSI1_I2C0_SDA, movable));
+ BRD_ERR(rm_set_pad_movable(pt_src, SC_P_ESAI0_TX3_RX2,
+ SC_P_ESAI0_TX3_RX2, movable));

return err;
}

2.2 M4 源码修改

文件 1:
boards/mekmimx8qx/demo_apps/rear_view_camera/automotive.c
--- a/boards/mekmimx8qx/demo_apps/rear_view_camera/automotive.c
+++ b/boards/mekmimx8qx/demo_apps/rear_view_camera/automotive.c
@@ -14,6 +14,7 @@
 #include "automotive.h"
 #include "app_srtm.h"
 
+#include "fsl_gpio.h"
 
 #define APP_REAR_VIEW_CAMERA_TASK_PRIO              (4U)
 #define APP_AP_POWER_MONITOR_TASK_PRIO              (3U)
@@ -22,6 +23,8 @@
 #define APP_VIRTUAL_CONTROL_CONSOLE_TASK_PRIO       (2U)
 #define APP_HVAC_UI_EVENT_TASK_PRIO                 (4U)
 
+#define CAMERA_REAR_GPIO     LSIO__GPIO0
+#define CAMERA_REAR_GPIO_PIN 7
 EventGroupHandle_t g_xAutoUiEvent = NULL;
 EventGroupHandle_t g_xUIResourceBits = NULL;
 EventGroupHandle_t g_xAPStatus = NULL;
@@ -711,8 +714,12 @@ static void virtual_control_console_task(void *pvParameters)
     int ctrl_char_index;
     uint8_t *hist_str;
     uint8_t str_buf[MAX_COMMAND_STR_LENGTH];
+    uint8_t send2_buf[]="gear 2";
+    uint8_t send4_buf[]="gear 4";
     int ctrl_char_len = 0;
 
+    uint8_t  gpio_valve=3,flag2_send=0,flag4_send=0,flag_res2=0;
+
     edit_flag = false;
 
     PRINTF("Rear View Camera Demo\r\n=====================\r\n");
@@ -734,6 +741,22 @@ static void virtual_control_console_task(void *pvParameters)
         while (true)
         {
             status = DbgConsole_TryGetchar(ptr);
+            gpio_valve = GPIO_PinRead(CAMERA_REAR_GPIO,CAMERA_REAR_GPIO_PIN);
+            if((gpio_valve == 1) && (kStatus_Fail == status) && (flag2_send == 0))
+            {
+                strcpy(str_buf,send2_buf);
+                flag2_send = 1;
+                flag4_send = 1;
+                break;            
+            }
+            else if ((gpio_valve == 0) && (kStatus_Fail == status)&& (flag4_send == 1))
+            {
+                strcpy(str_buf,send4_buf);
+                flag2_send = 0;
+                flag4_send = 0;
+                break;
+            }
+        
             if (kStatus_Fail == status)
             {
                 vTaskDelay(5);

文件 2:

pin_mux.c、pin_mux.h
--- a/boards/mekmimx8qx/demo_apps/rear_view_camera/pin_mux.c
+++ b/boards/mekmimx8qx/demo_apps/rear_view_camera/pin_mux.c
@@ -231,6 +231,11 @@ void BOARD_InitPins(sc_ipc_t ipc)                          /*!< Function assigne
   {
       assert(false);
   }
+pad_set_all(ipc, BOARD_INITPINS_BB_CSI_REAR_B_PIN_FUNCTION_ID, 4U, SC_PAD_CONFIG_NORMAL, SC_PAD_ISO_OFF, 0x0 ,SC_PAD_WAKEUP_OFF);/* IOMUXD_CSI_RESET register modification value */
+  if (SC_ERR_NONE != err)
+  {
+      assert(false);
+  }
 }
 
 /***********************************************************************************************************************
diff --git a/boards/mekmimx8qx/demo_apps/rear_view_camera/pin_mux.h b/boards/mekmimx8qx/demo_apps/rear_view_camera/pin_mux.h
index f4237ba..35ad5cb 100644
--- a/boards/mekmimx8qx/demo_apps/rear_view_camera/pin_mux.h
+++ b/boards/mekmimx8qx/demo_apps/rear_view_camera/pin_mux.h
@@ -269,6 +269,14 @@
 #define BOARD_INITPINS_BB_CSI_RST_B_PIN_FUNCTION_ID               SC_P_CSI_RESET   /*!< Pin function id */
 #define BOARD_INITPINS_BB_CSI_RST_B_LABEL                "BB_CSI_RST_B/J13E[37]"   /*!< Label */
 #define BOARD_INITPINS_BB_CSI_RST_B_NAME                          "BB_CSI_RST_B"   /*!< Identifier name */
+
+/* andrew add */
+#define BOARD_INITPINS_BB_CSI_REAR_B_GPIO                             LSIO__GPIO0   /*!< GPIO device name: LSIO__GPIO1 */
+#define BOARD_INITPINS_BB_CSI_REAR_B_GPIO_PIN                                  7U   /*!< LSIO__GPIO3 pin index: 3 */
+#define BOARD_INITPINS_BB_CSI_REAR_B_PIN_NAME                           CSI_REAR   /*!< Pin name */
+#define BOARD_INITPINS_BB_CSI_REAR_B_PIN_FUNCTION_ID               SC_P_ESAI0_TX3_RX2   /*!< Pin function id */
+#define BOARD_INITPINS_BB_CSI_REAR_B_LABEL                "BB_CSI_REAR_B"   /*!< Label */
+#define BOARD_INITPINS_BB_CSI_REAR_B_NAME                          "BB_CSI_REAR_B"   /*!< Identifier name */
 /*!
  * @addtogroup pin_mux
  * @{

文件 3:boards/mekmimx8qx/demo_apps/rear_view_camera/rear_view_camera.c
--- a/boards/mekmimx8qx/demo_apps/rear_view_camera/rear_view_camera.c
+++ b/boards/mekmimx8qx/demo_apps/rear_view_camera/rear_view_camera.c
@@ -31,6 +31,8 @@
 
 #include "nxp_logo.h"
 
+#include "fsl_gpio.h"
+
 /*******************************************************************************
  * Definitions
  ******************************************************************************/
@@ -59,6 +61,9 @@
 
 #define APP_INVALID_PARTITION (0xFF)
 
+#define CAMERA_REAR_GPIO     LSIO__GPIO0
+#define CAMERA_REAR_GPIO_PIN 7
+gpio_pin_config_t rear_gpio_config = {kGPIO_DigitalInput, 0,};

@@ -153,6 +165,12 @@ void BOARD_InitHardware(void)
         PRINTF("Error: sc_pm_clock_enable failed\r\n");
     }
 
+    ret1 = sc_pm_set_resource_power_mode(ipc, SC_R_GPIO_0, SC_PM_PW_MODE_ON);
+      /* Power on Peripherals. */
+    if (ret1 != SC_ERR_NONE)
+    {
+        PRINTF("Error: Failed to power on GPIO0 ret1 = %d\r\n",ret1);
+    }
 
     /*
      *      * LPI2C1

@@ -178,36 +196,38 @@ void BOARD_InitHardware(void)
 
     platform_scu_mu_init();
     SOC_BootupAPCore();
+    /* Init CAMERA_REAR_GPIO GPIO. */
+    GPIO_PinInit(CAMERA_REAR_GPIO, CAMERA_REAR_GPIO_PIN, &rear_gpio_config);
 }

3.  测试结果

编译烧录启动后,把 ESAI0_TX3_RX2 引脚接 VCC 触发倒车影像应用显示,显示图像,如下所示:



以上为 i.MX8QXP Android Automotive12 增加 M4 GPIO 触发倒车影像功能!!!

参考文献《Android_User's_Guide.pdf》
              《Android_Quick_Start_Guide.pdf》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论