TI中文支持网
TI专业的中文技术问题搜集分享网站

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

目前项目需要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.

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

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

                                                        

Andy Yin1:

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);

MaoQTian:

回复 Andy Yin1:

首先谢谢您的回答

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

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

 

赞(0)
未经允许不得转载:TI中文支持网 » C6655的GPIO16—31不能产生GPIO中断(急)
分享到: 更多 (0)