GPIOPS中断成功,问题仍旧存在 ZEDBOARD,ZYNQ-7000

Wow ,congratulations! I have work out the interrupt finally. Just after such a exhausting time.

Thanks to the meanful blogs: http://forums.xilinx.com/t5/Zynq-7000-All-Programmable-SoC/%E7%94%A8SDK%E7%BC%96%E5%86%99GPIO%E4%B8%AD%E6%96%AD%E7%A8%8B%E5%BA%8F%E6%97%B6%E5%87%BA%E7%8E%B0%E7%9A%84%E9%97%AE%E9%A2%98/m-p/314191/highlight/false#M111

I just add a sentence: XGpioPs_IntrDisablePin(pGpioPs,50) and it works!

Now a screen shot for memory!

    XGpioPs* pGpioPs=(XGpioPs*)CallBackRef;

    XGpioPs_IntrDisablePin(pGpioPs,50);

    xil_printf("Gpio Handler...\n");

    XGpioPs_IntrEnablePin(pGpioPs,50);

But I just commented the sentence and re-build the application, it runs either! I don't know why?

and i have noticed that although i just press BTN8 once ,but it prints "Gpio Handler..." 2 times!

The interrupt remains undetected if:

XScuGic_SetPriorityTriggerType(&ScuGic,52,0xFF,0x01);

 But it remains interrupt detected if:

XScuGic_SetPriorityTriggerType(&ScuGic,52,0xa0,0x03);

The total application is shown as follows:

static void GpioHandler(void *CallBackRef, int Bank, u32 Status)

{

    xil_printf("Gpio Handler...\n");

}

int main()

{

    u32 data;

    XGpioPs Gpio;

    XGpioPs_Config *ConfigPtr;

    ConfigPtr = XGpioPs_LookupConfig(0);

    XGpioPs_CfgInitialize(&Gpio, ConfigPtr, ConfigPtr->BaseAddr);

 

    XGpioPs_SetDirectionPin(&Gpio,50,0x0);

    XGpioPs_SetOutputEnablePin(&Gpio,50,0x1);

 

    XGpioPs_SetIntrTypePin(&Gpio,50,XGPIOPS_IRQ_TYPE_EDGE_FALLING);

    XGpioPs_SetCallbackHandler(&Gpio, (void *)&Gpio, GpioHandler);

    XGpioPs_IntrEnablePin(&Gpio,50);

 

    XScuGic ScuGic;

    XScuGic_Config* pScuGicCfg;

    pScuGicCfg=XScuGic_LookupConfig(XPAR_SCUGIC_SINGLE_DEVICE_ID);

    XScuGic_CfgInitialize(&ScuGic,pScuGicCfg,pScuGicCfg->CpuBaseAddress);

    XScuGic_Connect(&ScuGic, 52,

                    (Xil_ExceptionHandler)XGpioPs_IntrHandler,

                    (void *)&Gpio);

    XScuGic_SetPriorityTriggerType(&ScuGic,52,0xA0,0x01);

    XScuGic_Enable(&ScuGic,52);

 

    Xil_ExceptionInit();

    Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,&ScuGic);

    Xil_ExceptionEnable();

 

    xil_printf("Intr test: \n");

 

    while(1)
    {

    }

 

}

  

I notify that the XGpioPs_GetPinNumber remains go wrong at the pin 50; it says pin 50 belongs to bank 0.

I don't know why?

posted @ 2013-06-15 22:38  dragen1860  阅读(2078)  评论(0编辑  收藏  举报