TDA2XX的RTOS系统怎么实现GPIO输入中断

TDA2XX的RTOS系统,设置GPIO1_0作为输入中断,设置中断的代码应该是什么?

\ti_components\drivers\pdk_01_10_04_05\packages\ti\csl\example\gpio\gpio_interrupt中的设置中断为

void configurGpioInterrupt()
{
#if IRQ_XBAR_CFG_REQUIRED
/* XBar configuration */
CSL_xbarIrqConfigure(IRQ_XBAR_CPU_ID,IRQ_XBAR_INST_NO,IRQ_XBAR_INDEX);
#endif
Intc_Init();
Intc_IntEnable(interrupt_num);

Intc_IntRegister(interrupt_num, (IntrFuncPtr) gpioIsr, (void *) 0);
Intc_IntPrioritySet(interrupt_num, 1, 0);
Intc_SystemEnable(interrupt_num);
}

这代码应该不是用于ipu和rtos系统,可用于ipu和rtos系统的设置中断的函数代码是什么?

  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 使用的开发包为PROCESSOR_SDK_RADAR_03_08_00_00

  • 您好

    分享的示例是如何使用以及可以使用的代码的示例。.

    有关其他示例,客户可以查看以下指南:https://www.ti.com/lit/ug/spruex3v/spruex3v.pdf

    第3.4章涉及hw区间

    以及E2E上的示例

  • Daniel:

       感谢您的回复,参考示例,对于gpio1_0,我写的gpio输入中断代码为:

    #define ISS_TIMESTAMP_IRQ1_BASE (SOC_GPIO1_BASE)
    #define ISS_TIMESTAMP_IRQ1_PIN (0)
    #define ISS_TIMESTAMP_IRQ1_INTR_ID (51)
    #define ISS_TIMESTAMP_IRQ1_XBAR_ID (CSL_XBAR_INST_IPU1_IRQ_51)
    #define ISS_TIMESTAMP_IRQ1_SRC (CSL_XBAR_GPIO1_IRQ_1)
    #define ISS_TIMESTAMP_IRQ1_CLKCTRL (CM_WKUPAON_GPIO1_CLKCTRL)
    #define ISS_TIMESTAMP_IRQ1_CLKCTRL_MASK (CM_WKUPAON_GPIO1_CLKCTRL_IDLEST_MASK)

    Void IssTimestamp_irqIsr(UInt32 arg)
    {
    //    uint32_t key;
        Vps_printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11gpioIsr\n");
        Task_sleep(20);
      //  key=Hwi_disable();

        // Do something!

      //  Hwi_restore(key);

        GPIOPinIntClear(ISS_TIMESTAMP_IRQ1_BASE, GPIO_INT_LINE_1, ISS_TIMESTAMP_IRQ1_PIN);
    }

    BspOsal_IntrHandle gIntrHandle;
    Int32 IssTimestamp_irqConfigIntr(Void)
    {
        Int32 status = SYSTEM_LINK_STATUS_SOK;
        const UInt32 cpuIntrNum = ISS_TIMESTAMP_IRQ1_INTR_ID;

          /* Configure the crossbar */
        BspOsal_irqXbarConnectIrq((UInt32) cpuIntrNum, ISS_TIMESTAMP_IRQ1_SRC);

        /* Configure the Interrupt */
        BspOsal_clearIntr((UInt32) cpuIntrNum);
        gIntrHandle = BspOsal_registerIntr(
            (UInt32) cpuIntrNum, &IssTimestamp_irqIsr,
            NULL;

        //Intc_IntPrioritySet(intrId, 0, 0);
        if (NULL == gIntrHandle)
        {
            Vps_printf(" UTILS: TIMER OVF INTERRUPT: HWI Create Failed !!!\n");
            status = SYSTEM_LINK_STATUS_EFAIL;
        }

        return status;
    }


    int gpio_init_func(void)
    {
        volatile uint32_t gpio_pin_value = 0;
        int i=0;
       Bsp_platformSetPinmuxRegs((UInt32) 0xE,(UInt32) CTRL_CORE_PAD_WAKEUP0, BSP_PLATFORM_IOPAD_CFG_DEFAULT);          
       padconfig_PrcmEnable();

        GPIODebounceTimeConfig(ISS_TIMESTAMP_IRQ1_BASE, 0xFF);
        GPIODebounceFuncControl(ISS_TIMESTAMP_IRQ1_BASE, ISS_TIMESTAMP_IRQ1_PIN,GPIO_DEBOUNCE_FUNC_ENABLE);

    //    GPIOModuleReset(ISS_TIMESTAMP_IRQ1_BASE);
        /*Reset GPIO*/
    //    GPIOModuleEnable(ISS_TIMESTAMP_IRQ1_BASE);
        /*Enable GPIO*/

        /* Set pin direction as input*/
        GPIODirModeSet(ISS_TIMESTAMP_IRQ1_BASE, ISS_TIMESTAMP_IRQ1_PIN, GPIO_DIR_INPUT);
        GPIOIntTypeSet(ISS_TIMESTAMP_IRQ1_BASE, ISS_TIMESTAMP_IRQ1_PIN,GPIO_INT_TYPE_FALL_EDGE);

        /*Clear interrupt*/
        GPIOPinIntDisable(ISS_TIMESTAMP_IRQ1_BASE, GPIO_INT_LINE_1, ISS_TIMESTAMP_IRQ1_PIN);
        GPIOPinIntClear(ISS_TIMESTAMP_IRQ1_BASE, GPIO_INT_LINE_1, ISS_TIMESTAMP_IRQ1_PIN);
        /*Enable interrupt*/
        GPIOPinIntEnable(ISS_TIMESTAMP_IRQ1_BASE, GPIO_INT_LINE_1, ISS_TIMESTAMP_IRQ1_PIN);

        Vps_printf("gpio_init_func enter 111\n");
        Task_sleep(20);

        IssTimestamp_irqConfigIntr();

        Vps_printf("gpio_init_func enter 2222\n");
        Task_sleep(20);

        return 0;
    }
    编译测试,代码应该是停留在这一行代码没有继续往下运行
    gIntrHandle = BspOsal_registerIntr(
            (UInt32cpuIntrNum, &IssTimestamp_irqIsr,
            NULL;
    能指导下这句代码有什么问题吗?
  • 您好

    编译测试,代码应该是停留在这一行代码没有继续往下运行

    你能再解释一下发生了什么吗?是它不能编译吗?你有错误日志吗?

  • 您好

    编译测试,代码应该是停留在这一行代码没有继续往下运行

    你能再解释一下发生了什么吗?是它不能编译吗?你有错误日志吗?