SylixOS Zynq平台私有中断绑定
发表于:2024-10-13 作者:千家信息网编辑
千家信息网最后更新 2024年10月13日,1. 概述本篇主要介绍在Zynq平台编写中断相关的驱动程序时,涉及CPU私有中断的相关绑定办法。2. 私有中断简介私有中断是多核CPU上特有的中断,私有中断只能被其所有者核心获取和响应,不会被其他核发
千家信息网最后更新 2024年10月13日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安全错误
数据库的锁怎样保障安全
国家网络安全教育举措
西藏网络安全宣传片
项目管理软件开发说明书
如何在基岩版登录服务器
ef框架连接数据库
sql复制表结构到另数据库
网络安全 个人信息界定
团油软件开发
数据库路线设置
数据库创建规则要加go吗
如何搞好本单位网络安全
软件开发是不是很辛苦
公司支付软件开发费用计入
全国地区sql数据库
青浦区质量软件开发售后服务
高速网络安全检测
企业网络技术安全技术设计
玩客云改造成下载服务器
新锐网络安全绘画
齐诺网络技术工作室
西藏网络安全宣传片
打印服务器能不能刷成软路由
白银淘宝软件开发
阿勒泰软件开发服务价格
销售服务器要懂什么
大连聚彩德互联网科技有限公司
大学生软件开发
万豪数据库 下载
网络安全技术风险分析与对策
通州电脑服务器回收找哪家