工具与软件:
我想在 HwiP_createDirect()中注册中断处理程序、以避免 masterISR 调用我的中断处理程序。 然而,实验结果表明,使用 Hwip_createDirect()注册的中断处理程序无法正确触发。
我的代码与此类似、 在 R5FSS0 CORE0上运行
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <ti/csl/arch/csl_arch.h>
#include <ti/csl/hw_types.h>
#include <ti/csl/soc.h>
#include <ti/drv/sciclient/examples/common/sci_app_common.h>
#include <ti/drv/sciclient/sciclient.h>
#include <ti/drv/sciclient/soc/sysfw/include/j721e/tisci_clocks.h>
#include <ti/drv/sciclient/soc/sysfw/include/j721e/tisci_devices.h>
#include <ti/osal/HwiP.h>
#include <ti/osal/osal.h>
#include <ti/csl/arch/r5/csl_arm_r5_pmu.h>
#include <ti/csl/arch/r5/csl_vim.h>
#include <ti/csl/arch/r5/src/interrupt_priv.h>
#define INT_NUM_IRQ 32U
volatile uint32_t cnt_flag = 0;
volatile uint32_t t1 = 0;
volatile uint32_t t2 = 0;
volatile uint32_t t3 = 0;
void irq_func(){cnt_flag++;}
/* ========================================================================== */
/* Macros & Typedefs */
/* ========================================================================== */
int main(void) {
SciApp_consoleInit();
Sciclient_ConfigPrms_t config = {SCICLIENT_SERVICE_OPERATION_MODE_POLLED,
NULL};
int32_t status = CSL_PASS;
status = Sciclient_init(&config);
if (status != CSL_PASS) {
SciApp_printf("SCIClient Init Failed\nstatus: %d", status);
return 0;
}
HwiP_Params p_hwipParams;
HwiP_Params_init(&p_hwipParams);
HwiP_Handle p_handle;
p_handle = HwiP_createDirect(INT_NUM_IRQ, irq_func, &p_hwipParams);
SciApp_printf("handle: %p\n",p_handle);
SciApp_printf("before post: %u\n",cnt_flag);
int32_t ret = HwiP_post(INT_NUM_IRQ);
if (ret != osal_OK) {
SciApp_printf("not supported");
}
SciApp_printf("after post: %u\n",cnt_flag);
return 0;
}
代码运行后的输出如下所示:
handle: 8001be98 before post: 0
显然,代码卡在 Hwip_post ()中。
但是、如果我将 HwiP_createDirect 替换为 HwiP_create、代码会按预期运行。
所以我认为 Hwip_createDirect 中可能有一些错误。
电流环路 :
-
SoC:TDA4VM
-
开发板: 和 J721EXSOMXEVM
软件 SDK 版本 :