真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SylixOSZynq平臺(tái)私有中斷綁定

1. 概述

    本篇主要介紹在Zynq平臺(tái)編寫中斷相關(guān)的驅(qū)動(dòng)程序時(shí),涉及CPU私有中斷的相關(guān)綁定辦法。

全州網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)2013年至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

2. 私有中斷簡(jiǎn)介

    私有中斷是多核CPU上特有的中斷,私有中斷只能被其所有者核心獲取和響應(yīng),不會(huì)被其他核發(fā)現(xiàn)。常見的私有中斷有全局定時(shí)器,私有看門狗定時(shí)器,私有定時(shí)器等,Zynq平臺(tái)上還有來(lái)自PL的FIQ\IRQ。

3. 私有中斷的綁定方法

3.1      常規(guī)共享中斷綁定

    Zynq平臺(tái)使用的是GIC通用中斷框架,常規(guī)的共享中斷綁定和普通的中斷綁定沒(méi)有區(qū)別,在SylixOS上直接調(diào)用API_InterVectorConnect、API_InterVectorEnable這兩個(gè)函數(shù)即可綁定,綁定后中斷可由任意一個(gè)CPU核心響應(yīng)。

3.2      私有中斷綁定

    私有中斷只能有所有者核心獲取和響應(yīng),因此對(duì)應(yīng)的中斷和中斷服務(wù)是綁定在相關(guān)的CPU核心上。在SylixOS下綁定私有中斷需要讓常規(guī)共享中斷的綁定流程在對(duì)應(yīng)CPU核心上完成才能成功綁定。即在驅(qū)動(dòng)綁定私有中斷的時(shí)候創(chuàng)建一個(gè)綁定在對(duì)應(yīng)CPU核心上的綁定線程,然后由這個(gè)綁定線程去完成私有中斷綁定。綁定流程如圖 3.1示。

SylixOS Zynq平臺(tái)私有中斷綁定

圖 3.1私有中斷綁定流程

    Zynq平臺(tái)31號(hào)私有定時(shí)器中斷綁定框架如程序清單 3.1所示。

程序清單 3.1 Zynq平臺(tái)31號(hào)私有定時(shí)器中斷綁定框架

#define ZYNQ_VECTOR_NIRQ     31         /* 31號(hào)私有中斷           */
static LW_HANDLE  _G_bindthread       = LW_OBJECT_HANDLE_INVALID;
static LW_HANDLE  _G_syncSignal       = LW_OBJECT_HANDLE_INVALID; 
/***************************************************************************
** 函數(shù)名稱: __nIrqIsr
** 功能描述: 中斷服務(wù)程序
** 輸 入  : pvArg
** 輸 出  : NONE
** 返  回  : LW_NULL
***************************************************************************/
static irqreturn_t __nIrqIsr (PVOID  pvArg)
{
return  LW_IRQ_HANDLED;
}
/***************************************************************************
** 函數(shù)名稱: __bindThread
** 功能描述: 私有中斷綁定線程
** 輸 入  : pvArg
** 輸 出  : NONE
** 返  回  : LW_NULL
***************************************************************************/
static PVOID  __bindThread (PVOID  pvArg)
{
API_SemaphoreBPend(_G_syncSignal, 
LW_OPTION_WAIT_INFINITE);              /* 等待同步信號(hào)量      */
API_InterVectorConnect(ZYNQ_VECTOR_NIRQ,             /* 連接中斷服務(wù)程序    */
                     (PINT_SVR_ROUTINE)__nIrqIsr,
                     (PVOID)NULL,
                     "nIrq");
API_InterVectorEnable(ZYNQ_VECTOR_NIRQ);             /* 使能中斷            */
}
/***************************************************************************
** 函數(shù)名稱: __nIrqInit
** 功能描述: 中斷服務(wù)初始化
** 輸 入  : NONE
** 輸 出  : NONE
** 返  回  : 成功返回ERROR_NONE,失敗返回PX_ERROR
***************************************************************************/
INT  __nIrqInit (VOID)
{
LW_CLASS_CPUSET            cpuset;
 
_G_syncSignal = API_SemaphoreBCreate("SYNCSEM",     /* 創(chuàng)建同步等待信號(hào)    */
                                            0,
                                            LW_OPTION_OBJECT_GLOBAL,
                                            LW_NULL);
if (_G_syncSignal == LW_OBJECT_HANDLE_INVALID) {    /*判斷信號(hào)量創(chuàng)建是否成功*/
     printk ("BIND signal init failed !\r\n");
     return PX_ERROR;
}
/*
 *  設(shè)置線程CPU綁定屬性
*/
LW_CPU_ZERO(&cpuset);
LW_CPU_SET(0, &cpuset);
_G_bindthread = API_ThreadCreate("bindThread",      /* 創(chuàng)建綁定線程          */
                                   __bindThread,
                                   LW_NULL,
                                      LW_NULL);
if (_G_bindthread == LW_OBJECT_HANDLE_INVALID) {  /*判斷綁定線程是否創(chuàng)建成功*/
     printk ("BIND thread init failed !\r\n");
     return PX_ERROR;
}
 
API_ThreadSetAffinity(_G_bindthread,               /* 將綁定線程設(shè)置到CPU0上*/
sizeof(cpuset), 
&cpuset);    
API_SemaphoreBPost(_G_syncSignal);                 /* 發(fā)送信號(hào)啟動(dòng)綁定線程    */
}

網(wǎng)頁(yè)標(biāo)題:SylixOSZynq平臺(tái)私有中斷綁定
本文網(wǎng)址:http://weahome.cn/article/psehdo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部