专家您好,
我在写一个GPIO中断的驱动,设置GPIO 15 引脚为中断引脚,方向为输出,然后软件触发中断,可以读到CSL_GPIO_getInterruptStatus (hGpio, pinNum15)不为0(说明产生了中断),但进不了中断服务函数。
我怀疑是我的中断mapping有问题,请专家帮我看下我的map代码哪里出了故障?主要是下面有注释的几行代码的变量赋值不知是否匹配:
/***************************************
** 设置GPIO 15 引脚为中断引脚, 代码略
***************************************/
extern void GPIO_ISR();
CSL_IntcContext intcContext;
CSL_IntcEventHandlerRecord EventHandler[10];
CSL_IntcObj intcObjMsi;
CSL_IntcHandle hMsiTest;
CSL_Status intStat;
CSL_IntcGlobalEnableState state;
CSL_IntcEventHandlerRecord EventRecord;
void CPINTC_config()
{
int CICn = 1; // CIC1
int eventID = 7;// //查C6657手册表7-35得知 GPINT15
int channel = 9;// 通道我随便选了一个
CSL_CPINTC_Handle hnd = 0;
hnd = CSL_CPINTC_open(CICn);
if (hnd == 0) {
return;
}
CSL_CPINTC_disableAllHostInterrupt(hnd);
CSL_CPINTC_mapSystemIntrToChannel (hnd, eventID , channel);
CSL_CPINTC_clearSysInterrupt (hnd, eventID);
CSL_CPINTC_enableSysInterrupt (hnd, eventID);
CSL_CPINTC_enableHostInterrupt (hnd, channel);
CSL_CPINTC_enableAllHostInterrupt(hnd);
}
void intc_config()
{
int vectIdMsi = CSL_INTC_VECTID_4;// 4~15任选一个
int event = 89;//查C6657手册表7-33得知 GPINT15
intcContext.eventhandlerRecord = EventHandler;
intcContext.numEvtEntries = 10;
CSL_intcInit(&intcContext);
CSL_intcGlobalNmiEnable();
CSL_intcGlobalEnable(&state);
hMsiTest = CSL_intcOpen (&intcObjMsi, event, &vectIdMsi, &intStat);
EventRecord.handler = &GPIO_ISR;
EventRecord.arg = (void*)hMsiTest;
CSL_intcPlugEventHandler(hMsiTest,&EventRecord);
CSL_intcHwControl(hMsiTest,CSL_INTC_CMD_EVTENABLE, NULL);
}
Peishu Yan:
你好 请问您的参考例程是哪个呢?方便提供一下吗,您的这些库函数是从哪里获取的呢??希望能得到您的回复!