This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] SK-TDA4VM:SK-TDA4VM EVM -从 R7微控制器访问 SW3

Guru**** 2544000 points
Other Parts Discussed in Thread: TDA4VM, SK-TDA4VM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1423581/sk-tda4vm-sk-tda4vm-evm---access-sw3-from-r7-microcontroller

器件型号:SK-TDA4VM
主题中讨论的其他器件:TDA4VM

工具与软件:

我们正在执行一个项目、要从 TDA4VM 上的一个 R7微控制器中读取 SW3用户按钮状态。

我们在 EVM 开发板上使用 SDK 08_06_01 (蓝色的)。

我们修改了 ipc-echo-test 示例、并参考了 GPIO 闪烁测试以查看 GPIO 驱动程序的工作原理。  我们已修改了以下文件以尝试对 WKUP_GPIO0_4引脚进行多路复用(EVM 用户指南对此引脚进行了说明)、以将开关映射到正确的引脚。

文件:J721E_pinmux_data.c

静态引脚多路复用 PerCfg_t gWkup_gpio0PinCfg[]=
  /* MCU_MCAN1_TX -> WKUP_GPIO0_4 -> G25;作为输入*/
  {
    PIN_WKUP_GPIO0_4、PIN_MODE (7)|\
    ((PIN_PULL_DISABLE | PIN_INPUT_ENABLE)(~PIN_PULL_DIRECTION))
  }、
  {PINMUX_END}
}
引脚多路复用板 Cfg_t gJ721E_WkupPinmuxData[]=
  {0truegWkup_gpio0PinCfg}、
  {PINMUX_END}
};
然后、在我们的 c 代码中、我们得到以下代码:
#define GPIO_SW3_PORT_NUM  0 /*唤醒 GPIO0 */
  根据*/、为 SW3定义#define GPIO_SW3_PIN_NUM 4 /* GPIO0_4
#define Switch3_GPIO_INDEX  0
/* GPIO 驱动程序板特定的引脚配置结构*/
GPIO_PinConfig gpioPinConfigs[]=
  /*启用中断的输入引脚*/
  GPIO_DEVICE_CONFIG (GPIO_SW3_PORT_NUMGPIO_SW3_PIN_NUM)| GPIO_CFG_IN_INT_RISING | GPIO_CFG_INPUT
};

/* GPIO 驱动程序回调函数*/
GPIO_CallbackFxn gpioCallbackFunctions[]=
  null
};

/* GPIO 驱动程序配置结构*/
GPIO_V0_Config GPIO_V0_CONFIG =
  gpioPinConfigs、
  gpioCallbackFunctions
  sizeof (gpioPinConfigs)/ sizeof (GPIO_PinConfig)、
  sizeof (gpioCallbackFunctions)/ sizeof (GPIO_CallbackFxn)、
  0x8U
};

//为 EVM SW3 GPIO 设置 GPIO
void SetupEvmGPIO()
  APP_printf ("Randys MCU_2_1 SetupEvmGPIO\r\n");
  //--------------- 用于 GPIO 的 Board/HW INIT----------------
  board_initCfg boardCfg
  GPIO_V0_HwAttrs GPIO_cfg

  /*获取默认配置*/
  GPIO_socGetInitCfg (GPIO_SW3_PORT_NUM&GPIO_cfg);

   boardCfg = Board_init_PINMUX_CONFIG |
    BOARD_INIT_MODULE_CLOCK |
    BOARD_INIT_UART_stdio;
  board_init (boardCfg);

  /*==必须执行其他中断路由才能将唤醒 GPIO 传递到主域内核。 */
  /*将默认 GPIO 端口从主 GPIO0更改为唤醒 GPIO0以访问 TP45 */
  GPIO_cfg.baseAddr = CSL_WKUP_GPIO0_BASE;
  GPIO_configIntRouter (GPIO_SW3_PORT_NUMGPIO_SW3_PIN_NUM0、&GPIO_cfg);

  /*对于 J721E EVM、没有 GPIO 引脚直接连接到 LED */
  /* J7ES:使用唤醒 GPIO0_6 --> TP45进行测试*
  /*设置默认的 GPIO 初始化配置*/
  GPIO_socSetInitCfg (GPIO_SW3_PORT_NUM&GPIO_cfg);

  //--------------- 用于 GPIO 的软件初始化-------------------------------------------------------
  GPIO_init ();

  /*设置回调函数*/
  //GPIO_setCallback (Switch3_GPIO_INDEX、AppGpioCallbackFxn);

  /*在特定 GPIO 引脚上启用 GPIO 中断*/
  //GPIO_enableInt (Switch3_GPIO_index);

  //尝试读取按钮、索引到 GPIO_V0配置数组中
  uint32_t swVal = GPIO_read (Switch3_GPIO_INDEX);
  const uint8_t NUM_LOOPs = 100
  for (int i = 0I < NUM_LOOPs;++I)
  {
    UART_printf ("SW3值为%d、循环%d%d\r\n"swVal、iNUM_LOOKS);
    APP_printf ("SW3值为%d、循环%d%d\r\n"swVal、iNUM_LOOKS);
    taskP_sleep(500 );
    swVal = GPIO_read (开关3_GPIO_INDEX);
  }
}
UART_print 无法正常工作、但我们能够在 remoteproc5 (MCU2_1) 跟踪输出中看到输出。
我看不到按钮状态变化。