SylixOS Zynq平台私有中断绑定
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,1. 概述本篇主要介绍在Zynq平台编写中断相关的驱动程序时,涉及CPU私有中断的相关绑定办法。2. 私有中断简介私有中断是多核CPU上特有的中断,私有中断只能被其所有者核心获取和响应,不会被其他核发
千家信息网最后更新 2025年02月02日SylixOS Zynq平台私有中断绑定
1. 概述
本篇主要介绍在Zynq平台编写中断相关的驱动程序时,涉及CPU私有中断的相关绑定办法。
2. 私有中断简介
私有中断是多核CPU上特有的中断,私有中断只能被其所有者核心获取和响应,不会被其他核发现。常见的私有中断有全局定时器,私有看门狗定时器,私有定时器等,Zynq平台上还有来自PL的FIQ\IRQ。
3. 私有中断的绑定方法
3.1 常规共享中断绑定
Zynq平台使用的是GIC通用中断框架,常规的共享中断绑定和普通的中断绑定没有区别,在SylixOS上直接调用API_InterVectorConnect、API_InterVectorEnable这两个函数即可绑定,绑定后中断可由任意一个CPU核心响应。
3.2 私有中断绑定
私有中断只能有所有者核心获取和响应,因此对应的中断和中断服务是绑定在相关的CPU核心上。在SylixOS下绑定私有中断需要让常规共享中断的绑定流程在对应CPU核心上完成才能成功绑定。即在驱动绑定私有中断的时候创建一个绑定在对应CPU核心上的绑定线程,然后由这个绑定线程去完成私有中断绑定。绑定流程如图 3.1示。
图 3.1私有中断绑定流程
Zynq平台31号私有定时器中断绑定框架如程序清单 3.1所示。
程序清单 3.1 Zynq平台31号私有定时器中断绑定框架
#define ZYNQ_VECTOR_NIRQ 31 /* 31号私有中断 */static LW_HANDLE _G_bindthread = LW_OBJECT_HANDLE_INVALID;static LW_HANDLE _G_syncSignal = LW_OBJECT_HANDLE_INVALID; /***************************************************************************** 函数名称: __nIrqIsr** 功能描述: 中断服务程序** 输 入 : pvArg** 输 出 : NONE** 返 回 : LW_NULL***************************************************************************/static irqreturn_t __nIrqIsr (PVOID pvArg){return LW_IRQ_HANDLED;}/***************************************************************************** 函数名称: __bindThread** 功能描述: 私有中断绑定线程** 输 入 : pvArg** 输 出 : NONE** 返 回 : LW_NULL***************************************************************************/static PVOID __bindThread (PVOID pvArg){API_SemaphoreBPend(_G_syncSignal, LW_OPTION_WAIT_INFINITE); /* 等待同步信号量 */API_InterVectorConnect(ZYNQ_VECTOR_NIRQ, /* 连接中断服务程序 */ (PINT_SVR_ROUTINE)__nIrqIsr, (PVOID)NULL, "nIrq");API_InterVectorEnable(ZYNQ_VECTOR_NIRQ); /* 使能中断 */}/***************************************************************************** 函数名称: __nIrqInit** 功能描述: 中断服务初始化** 输 入 : NONE** 输 出 : NONE** 返 回 : 成功返回ERROR_NONE,失败返回PX_ERROR***************************************************************************/INT __nIrqInit (VOID){LW_CLASS_CPUSET cpuset; _G_syncSignal = API_SemaphoreBCreate("SYNCSEM", /* 创建同步等待信号 */ 0, LW_OPTION_OBJECT_GLOBAL, LW_NULL);if (_G_syncSignal == LW_OBJECT_HANDLE_INVALID) { /*判断信号量创建是否成功*/ printk ("BIND signal init failed !\r\n"); return PX_ERROR;}/* * 设置线程CPU绑定属性*/LW_CPU_ZERO(&cpuset);LW_CPU_SET(0, &cpuset);_G_bindthread = API_ThreadCreate("bindThread", /* 创建绑定线程 */ __bindThread, LW_NULL, LW_NULL);if (_G_bindthread == LW_OBJECT_HANDLE_INVALID) { /*判断绑定线程是否创建成功*/ printk ("BIND thread init failed !\r\n"); return PX_ERROR;} API_ThreadSetAffinity(_G_bindthread, /* 将绑定线程设置到CPU0上*/sizeof(cpuset), &cpuset); API_SemaphoreBPost(_G_syncSignal); /* 发送信号启动绑定线程 */}
私有
线程
核心
平台
定时器
程序
成功
信号
函数
服务
功能
名称
常规
框架
流程
所有者
清单
信号量
同步
驱动
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
莹石云连接服务器异常
我的世界服务器妹子
旭亚七客互联网科技有限公司
数据库查一个表格
mac软件开发平台
数据库的累加是线程安全的吗
厦门云安网络安全
安徽net软件开发服务
依米康有没有软件开发资质
ipv6公网服务器有哪个
开源图像数据库
平板电脑服务器搭建
从俄乌战争说网络安全
泰拉瑞亚联机注册服务器
网络安全与信息化技术论文
重汽的软件开发
c 数据库线程安全
福建软件开发涉密资质证书
如果邮箱的服务器堵了
数据库什么叫做算术溢出错误
推进网络安全工作
天龙八部手游服务器登记哪里看
软件开发研究生方向
中文的数据库类型
河北志诚网络技术
浙江易桥软件开发公司
数据库连接一直转圈
大学校园网络安全等级要求
浙江语音网络技术服务创新服务
惠普服务器 自检过不去