zoukankan      html  css  js  c++  java
  • GPIOPS中断成功,问题仍旧存在 ZEDBOARD,ZYNQ7000

    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?

  • 相关阅读:
    Session的配置
    插件编程小窥
    今日遇到了困难,顺便看了下SMO
    初识三层架构
    .NET文件类库
    JQuery学习笔记
    反射整理学习<二>
    通俗道破单例模式
    菜鸟写代码生成器最后一天完结篇
    卧谈会:委托与事件
  • 原文地址:https://www.cnblogs.com/dragen/p/3138134.html
Copyright © 2011-2022 走看看