这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 电源与模拟 » [原创]超越者Spartan-6FPGA开发板】+MicroBlaze触摸按键中

共2条 1/1 1 跳转至

[原创]超越者Spartan-6FPGA开发板】+MicroBlaze触摸按键中断2

工程师
2021-06-13 17:26:19     打赏

   
    


    1.4、管脚约束


    


    二、程序设计


    2.1、程序中函数定义
    


    2.2、主要代码
    key.c

  1. #include <stdio.h>

  2. #include "platform.h"

  3. #include "xparameters.h"

  4. #include "xintc.h"

  5. #include "xgpio.h"

  6. #include "xil_exception.h"

  7. #include "led.h"


  8. #define KEY_DEV_ID       XPAR_AXI_GPIO_KEY_DEVICE_ID  //按键 AXI GPIO ID

  9. #define INTC_DEVICE_ID   XPAR_AXI_INTC_KEY_DEVICE_ID  //中断控制器ID

  10. #define EXCEPTION_ID     XIL_EXCEPTION_ID_INT         //中断异常ID

  11. #define AXI_GPIO_INTR_ID XPAR_INTC_0_GPIO_1_VEC_ID    //AXI GPIO中断ID


  12. static XIntc    Intc;                                 //中断控制器实例

  13. static XGpio    KEY_Gpio;                             //GPIO中断实例 按键


  14. int key_intr_flag = 0;  //中断标志

  15. int int_flag=0;


  16. void GpioHandler(void *CallbackRef)

  17. {

  18.     XGpio *GpioPtr = (XGpio *)CallbackRef;

  19.         key_intr_flag = 1;                   //接收到中断,标志信号拉高

  20.         XGpio_InterruptDisable(GpioPtr, 1);  //关闭中断

  21.         XGpio_InterruptClear(GpioPtr, 1);    //清除中断

  22.         XGpio_InterruptEnable(GpioPtr, 1);   //使能中断

  23. }


  24. void init_key(void)

  25. {

  26.         xil_printf("AXI GPIO INTERRUPT TEST!\r\n");


  27.         XGpio_Initialize(&KEY_Gpio, KEY_DEV_ID);                        //AXI_GPIO器件初始化

  28.         XGpio_SetDataDirection(&KEY_Gpio, 1, 1);


  29.         XIntc_Initialize(&Intc, INTC_DEVICE_ID);                        //初始化中断控制器

  30.         //关联中断ID和中断服务函数

  31.         XIntc_Connect(&Intc,AXI_GPIO_INTR_ID,(Xil_ExceptionHandler)GpioHandler,&KEY_Gpio );



  32.         XGpio_InterruptEnable(&KEY_Gpio, 1);                    //使能中断


  33.         XGpio_InterruptGlobalEnable(&KEY_Gpio);                  //使能全局中断


  34.         XIntc_Enable(&Intc,AXI_GPIO_INTR_ID);                        //在中断控制器上启用中断向量


  35.         XIntc_Start(&Intc, XIN_REAL_MODE);                                //启动中断控制器

  36.         //设置并打开中断异常处理

  37.         Xil_ExceptionInit();

  38.         Xil_ExceptionRegisterHandler(EXCEPTION_ID,

  39.                         (Xil_ExceptionHandler)XIntc_InterruptHandler,&Intc);

  40.         Xil_ExceptionEnable();

  41. }


  42. void key_hdl(void)

  43. {

  44.         u32 Delay;

  45.         if(key_intr_flag)                                        //检测中断标志信号有效

  46.         {

  47.                 int_flag= ~int_flag;

  48.                 if(int_flag==0)

  49.                 {

  50.                         led0_on();

  51.                 }

  52.                 else

  53.                 {

  54.                         led0_off();

  55.                 }

  56.                 xil_printf("INTC \r\n");

  57.             key_intr_flag = 0;              //中断标志清零

  58.         }

  59. }


复制代码

       三、程序执行

   按下和松开触摸按键开关,中断分别执行一次,上升沿和下降沿执行。同时LED0点亮和关闭各执行一次。
    





关键词: Spartan-6     FPGA     开发板     MicroB    

工程师
2021-06-14 17:06:01     打赏
2楼

感谢楼主分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]