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.

C6655的GPIO16—31不能产生GPIO中断(急)

Other Parts Discussed in Thread: SYSBIOS

目前项目需要GPIO28做GPIO中断输入,但是无法产生中断。

大概流程是这样的

1、设置GPIO28为输出,上升沿触发,GPIO_BITEN = 0x3.

2、将GPIO28的sysint映射到hostInt   0     

CpIntc_mapSysIntToHostInt(0, 12, 0);

CpIntc_enableSysInt(0, 12);

CpIntc_enableHostInt(0, 0);

CpIntc_dispatchPlug(12, &gpioIsr, 12, TRUE);

int eventId = CpIntc_getEventId(0);

     Hwi_Params_init(&params);
    params.eventId = eventId;
    params.enableInt = 1;

params.arg = 0;
    Hwi_create(5, &CpIntc_dispatch, &params, NULL);

 调试不同的GPIO(0——31)中断时发现GPIO中断状态寄存器只有低16能变为1,高16位始终为0.

流程就是这样,麻烦各位工程师帮忙看看哪里有问题?

项目最近几天就必须完成,所有比较急,麻烦给位了!

                                                        

  • GPIO0~15可以产生中断么,如果不可以的话应该是中断配置有问题,参考如下代码及在sysBios下进行中断配置的链接;如果可以那么需要注意需要设置BINTEN bit 1 为1以使能GPIO pins 31-16的中断即GPIO_BITEN = 0x2 ;

    参考下面的代码,以及using sysBios example配置。

    http://processors.wiki.ti.com/index.php/Configuring_Interrupts_on_Keystone_Devices

    cookie = Hwi_disable();

        /* Transfer completion ISR */
        CpIntc_dispatchPlug(sysInt, gpio_interrupt_handler, 0, TRUE);
        CpIntc_mapSysIntToHostInt(0, sysInt, hostInt);
        CpIntc_enableHostInt(0, hostInt);
        /* Enable the System Interrupt */
        CpIntc_enableSysInt(0, sysInt);

        eventId = CpIntc_getEventId(hostInt); 
        EventCombiner_dispatchPlug (eventId, CpIntc_dispatch,
                                    hostInt, TRUE);
        EventCombiner_enableEvent(eventId);

        vectId = eventId/32 + 7;
        Hwi_enableInterrupt(vectId);

        Hwi_enableIER(1u<<vectId);

        /* Restore interrupts */
        Hwi_restore(cookie);

  • 首先谢谢您的回答

    GPIO0--15能产生中断,我将BINTEM 设置为0x03和0x02都试过,始终不能产生中断,并且查看GPIO的手册时,发现所有的寄存器都只有低16bit是有效的,其余bit都是保留位。不知道这是为什么?

    目前我们改成使用GPIO5了。可以正常使用。

     

  • GPIO16~31所在pin是复用管脚,默认是GPIO disable,需要配置PIN_CONTROL_0 register相应bit使能相应的GPIO,如C6655 data manual手册3.3.20所述。