芯路恒电子技术论坛

 找回密码
 立即注册

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

热搜: 合集
查看: 180|回复: 1

【zynq课程笔记】【AC880】【裸机】【第14课 】【Zynq编程原理与实验】

[复制链接]

该用户从未签到

108

主题

52

回帖

1973

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1973
发表于 2026-2-10 10:05:24 | 显示全部楼层 |阅读模式
实验目标

使用PS侧按键0,以中断的方式

先初始化PIO基本功能,还是先初始化GIC中断?


第一步

先初始化GPIO作为输入输出的基本功能
初始化GPIO驱动

定义Gpio驱动对应的实例
static XGpioPs Gpio; /* The Instance of the GPIO Driver */

根据GPIO设备ID查找配置信息
XGpioPs_Config *ConfigPtr; /*为GPIO的设备信息创建一个指针*/
ConfigPtr = XGpioPs_LookupConfig(DeviceId);/*根据设备ID查找到GPIO的配置信息*/
(要用到GPIO的设备ID,需要包含哪个头文件?)
初始化GPIO驱动
XGpioPs_CfgInitialize(Gpio, ConfigPtr, ConfigPtr->BaseAddr);


第二步

设置本例中用到的GPIO的基本工作模式(输入(MIO47)、输出(MIO7)、初始值)
        XGpioPs_SetDirectionPin(Gpio, Output_Pin, 1);
        XGpioPs_SetOutputEnablePin(Gpio, Output_Pin, 1);
        XGpioPs_WritePin(Gpio, Output_Pin, 0x0);


第三步

初始化GIC控制器驱动
定义GIC控制器对应的实例
static XScuGic Intc; /* The Instance of the Interrupt Controller Driver */

根据GIC设备ID查找配置信息
XScuGic_Config *IntcConfig; /* Instance of the interrupt controller */
IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);

初始化GIC驱动
Status = XScuGic_CfgInitialize(Intc, IntcConfig,        IntcConfig->CpuBaseAddress);


第四步

注册CPU的总异常/中断服务函数
Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
                                (Xil_ExceptionHandler)XScuGic_InterruptHandler,
                                Intc);


第五步

注册/绑定具体外设的中断服务函数
        Status = XScuGic_Connect(Intc, GpioIntrId,
                                (Xil_ExceptionHandler)XGpioPs_IntrHandler,
                                (void *)Gpio);[


第六步

设置具体外设的中断相关的寄存器(使能、禁止、中断检测类型)
        /* Enable falling edge interrupts for all the pins in bank 0. */
        XGpioPs_SetIntrType(Gpio, GPIO_BANK, 0x00, 0xFFFFFFFF, 0x00);

        /* Set the handler for gpio interrupts. */
        XGpioPs_SetCallbackHandler(Gpio, (void *)Gpio, IntrHandler);


        /* Enable the GPIO interrupts of Bank 0. */
        XGpioPs_IntrEnable(Gpio, GPIO_BANK, (1 << Input_Pin));


第七步

在GIC中允许该外设的中断源向Cpu发出中断



第八步

打开CPU的总中断开关,此时Cpu就可以开始接受并响应中断了。



第九步

从用户编写程序的角度,具体外设的中断服务函数要开始仔细编写了,前面的全部直接使用SDK提供的驱动库,套模板就可以,最后这一步,才是用户真正要做的。

回复

使用道具 举报

该用户从未签到

108

主题

52

回帖

1973

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1973
 楼主| 发表于 2026-2-10 10:08:35 | 显示全部楼层
GPIO_Interrupt.rar (5.54 MB, 下载次数: 48)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

GMT+8, 2026-2-25 10:00 , Processed in 0.056772 second(s), 38 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表