这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 综合技术» 电源与模拟» [原创]超越者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

  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 跳转至

回复

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