试验硬件:正点原子领航者ZYNQ开发板(芯片xc7z020clg400-2)

试验软件:Vivado 2020.2与Vitis 2020.2

Vivado中的Block Design:

打开UART0,打开MIO与EMIO,EMIO位宽为1,正确设置DDR型号,设置FCLK为50MHz,VIO输出与EMIO输入对接,此时无需指定EMIO引脚,VIO输出默认为0。

Vitis中的代码:

#include "xil_printf.h"
#include "xgpiops.h"
#include "sleep.h"
#include "xparameters.h"
#include "xscugic.h"#define EMIO0 54UXGpioPs psGpio;XScuGic scuGic;void psGpio_Handler(void *CallBackRef);int main(void)
{xil_printf("begin!\r\n");// 初始化psGpioXGpioPs_Config *psGpio_configPtr;psGpio_configPtr = XGpioPs_LookupConfig(XPAR_XGPIOPS_0_DEVICE_ID);XGpioPs_CfgInitialize(&psGpio, psGpio_configPtr, psGpio_configPtr->BaseAddr);// 打开系统的中断处理功能Xil_ExceptionInit(); // 初始化异常句柄,只在很早版本的bsp中需要,此处为了兼容性保留Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, (Xil_ExceptionHandler)XScuGic_InterruptHandler,&scuGic); // 为IRQ注册中断处理程序Xil_ExceptionEnable(); // 使能系统中断功能// 初始化中断控制器XScuGic_Config *scuGic_config;scuGic_config = XScuGic_LookupConfig(XPAR_XSCUTIMER_0_DEVICE_ID); // 根据器件ID查找配置XScuGic_CfgInitialize(&scuGic, scuGic_config, scuGic_config->CpuBaseAddress);// 关联中断处理函数XScuGic_Connect(&scuGic, XPAR_XGPIOPS_0_INTR, (Xil_ExceptionHandler)psGpio_Handler, (void *)&psGpio);// 启用对应中断ID的中断源XScuGic_Enable(&scuGic, XPAR_XGPIOPS_0_INTR);// 注意psGPIO中断不需要设置中断优先级// 设置psGPIO中断类型XGpioPs_SetIntrTypePin(&psGpio, EMIO0, XGPIOPS_IRQ_TYPE_EDGE_RISING);// 使能psGPIO中断XGpioPs_IntrEnablePin(&psGpio, EMIO0);while(1){}return 0;
}void psGpio_Handler(void *CallBackRef)
{XGpioPs *psGpioPtr = (XGpioPs *)CallBackRef;if (XGpioPs_IntrGetStatusPin(psGpioPtr, EMIO0) == TRUE){xil_printf("This is EMIO0 Interrupt!\r\n");XGpioPs_IntrClearPin(psGpioPtr, EMIO0);}
}

试验现象:

)

此时ZYNQ的启动方式为QSPI,也就是从FLASH启动。

可以看到第一次烧写打印了"This is EMIO Interrupt",这表示烧写后自动进了一次中断,而第二次烧写则未打印,表明烧写未进入此中断。不进中断才是对的。

当设置启动方式为JTAG,从JTAG启动后,看一下这种情况会不会消失。

从上图可见,设置为JTAG启动后,烧写后不会自动触发一次EMIO中断了。

还有一种更通用的办法是在GPIO PIN中断使能之前,先清除一次中断状态,也可以防止烧写自动进一次EMIO中断,即加入一行代码:

XGpioPs_IntrClearPin(&psGpio, EMIO0);

如下:

 // 设置psGPIO中断类型XGpioPs_SetIntrTypePin(&psGpio, EMIO0, XGPIOPS_IRQ_TYPE_EDGE_RISING);// 使能之前先清除中断状态!XGpioPs_IntrClearPin(&psGpio, EMIO0);// 使能psGPIO中断XGpioPs_IntrEnablePin(&psGpio, EMIO0);

推测造成这种现象的原因是烧写前EMIO被FLASH中的程序控制着,可能中断状态就是1,而烧写也没有清除中断状态寄存器,所以烧写后自动进了一次中断,所以QSPI模式出现此问题,而JTAG模式不出现。

ZYNQ7000-GPIO EMIO中断实验 程序烧写后自动进一次中断的怪现象相关推荐

  1. 【嵌入式开发】LED 驱动 ( LED发光二极管原理 | 底板原理图分析 | 核心板原理图分析 | GPIO | 裸板程序烧写流程 )

    文章目录 开发板 的 LED 灯 作用 : 嵌入式软件的开发初期, 如 开发 BootLoader 代码 或者 Kernel 内核代码 过程中, 有效的调试方法有限, 此时通常使用 开发板上的 LED ...

  2. ZYNQ开发系列——把PS和PL程序烧写到FLASH中

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列--把PS和PL程序烧写到FLASH中 生成 fsbl.elf 生成 BOOT.bin 下载 BOOT.bin 文件到 ...

  3. c语言每次堆的变化是1k,DSPXC语言+程序烧写讲述.ppt

    DSPXC语言程序烧写讲述 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ...

  4. 51单片机程序烧写说明

    程序烧写说明 USBASP下载器使用方法 启动下载软件PROGISP1.6.7 烧录步骤: 设置编程器及接口,编程器选择USBASP,接口为USB(如图) 选择芯片,在选择芯片下拉列表可以选择正在使用 ...

  5. TI DSP TMS320C66x学习笔记之SPI Nor Flash多核程序烧写

    烧写工具链接: https://pan.baidu.com/s/1em4jWjbskpMmNd1uzscjjA 提取码: 82qg 经过一段时间的研究终于把TMS320C6657单核和双核的SPI N ...

  6. 【2020-08-05】.out文件的DSP程序烧写

    记录自己嵌入式的点滴 这里主要说明一下.out文件的DSP程序烧写,以及期间遇到的问题.嵌入式这一词仿佛包含了太广太广的领域,以至于在解释起来就显得很笼统.就个人的现阶段,暂时理解为单片机.FPGA. ...

  7. STM32 KEIL软件设置程序烧写起始地址选择

    转自  https://blog.csdn.net/alfredseng/article/details/53021583 STM32系列的mcu,这儿以cortex-M4为例,我们在线调试时,一般会 ...

  8. CCS使用教程04:程序烧写与仿真

    目录 01  CCS的介绍.下载与安装 1  CCS的介绍 2  下载 3  安装 02  创建一个CCS工程 1  工作空间 2  创建一个新的CCS工程 3  编译与生成 03  工程导入 1  ...

  9. NXP系列芯片程序烧写方法

    NXP (恩智浦半导体)是一家新近独立的半导体公司,由飞利浦公司创立,已拥有五十年的悠久历史,主要提供工程师与设计人员各种半导体产品与软件,为移动通信.消费类电子.安全应用.非接触式付费与连线,以及车 ...

最新文章

  1. jQuery中的动画
  2. 多校1010 Taotao Picks Apples
  3. 搭建分布式hadoop2.x集群
  4. 新人Unity下载安装
  5. 数组与集合的区别(概况)
  6. HDU 2201 熊猫阿波问题==金刚坐飞机问题
  7. 计算机点击管理无效,win10开始菜单没反应,二种解决办法!
  8. 惠普HP Deskjet F4238 多功能一体机驱动
  9. c++ opencv fitLine函数拟合直线
  10. 软件工程应用与实践(1)——项目简介,小组分工
  11. Temporary failure in name resolution错误解决方法
  12. ARM汇编指令立即数规范和判断
  13. VUE 前端中如何进行组件化开发?
  14. 兼容IE8的旋转角度
  15. ai人工智能将替代人类_只有人工智能才能将我们从假货世界中拯救出来(人工智能也在创造世界)...
  16. Acme的cmd line模式
  17. ZYNQ_使用PL-PS的中断
  18. Eclipse完美汉化教程
  19. 2015062006 - 床畔(2)
  20. Spring Boot(四):Spring Boot启动原理分析

热门文章

  1. svm的一些理解(网上收集)
  2. 常用计算机文章搜索方法总结
  3. BZOJ 4823 Luogu P3756 [CQOI2017]老C的方块 (网络流、最小割)
  4. HDU 6136 Death Podracing (堆)
  5. Atcoder AGC031B Reversi (DP计数)
  6. php实时上传多张图片,php实现多图片上传程序代码
  7. summerDao-比mybatis更强大无需映射配置的dao工具
  8. Integer.valueof(null)报错
  9. 微信开发--one.微信平台验证
  10. sqli-lab(16)