国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于S3C44BOX處理器的VxWorks中斷設(shè)計(jì)

發(fā)布時(shí)間:2010-5-4 15:17    發(fā)布者:我芯依舊
關(guān)鍵詞: S3C44BOX , VxWorks , 中斷設(shè)計(jì)
引言

硬件中斷處理在實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)中起著十分重要的作用,它是外部事件通知操作系統(tǒng)的最常用手段。中斷的正常運(yùn)行是操作系統(tǒng)穩(wěn)定工作的先決條件。VxWorks作為一款優(yōu)秀的實(shí)時(shí)嵌入式系統(tǒng),通常采用中斷的方式來滿足系統(tǒng)實(shí)時(shí)性要求。因此,熟悉其中斷的處理過程對于VxWorks操作系統(tǒng)的開發(fā)至關(guān)重要。本文通過基于S3C44B0X處理器VxWorks嵌入式操作系統(tǒng)的BSP移植,詳細(xì)分析了VxWorks操作系統(tǒng)基于ARM處理器的中斷處理方法。

1 ARM異常中斷處理

ARM體系結(jié)構(gòu)支持復(fù)位(Reset)等7種異常中斷類型,各異常中斷的向量地址及中斷的處理優(yōu)先級如表1所示。當(dāng)異常中斷發(fā)牛時(shí),硬件邏輯根據(jù)異常類型給程序計(jì)數(shù)器(PC)強(qiáng)制賦值,使程序從表1給出的相應(yīng)的矢量地址開始執(zhí)行異常處理程序。在異常中斷向量表中指定了各異常中斷與其處理程序的對應(yīng)關(guān)系,一般來說,矢量地址處將包含一條指向相應(yīng)程序的轉(zhuǎn)移指令,從而可跳轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序。異常中斷向量表存放在存儲(chǔ)器的0地址處,大小為32字節(jié),每個(gè)異常中斷占4字節(jié)大小,保留了4字節(jié)空間。

表1 各異常中斷的向量地址以及中斷處理優(yōu)先


S3C44BOX的中斷控制器町以接收來自26個(gè)中斷源的30個(gè)中斷請求,其中有4個(gè)外部中斷(EINT/4/5/6/7)是邏輯或的關(guān)系,它們共用一條中斷請求線。當(dāng)片內(nèi)外圍中斷和片外中斷模式設(shè)定為IRQ時(shí),如有多重中斷發(fā)生,中斷控制器經(jīng)過優(yōu)先級判斷選擇其中一個(gè)中斷,通過IRQ向ARM7TDMI內(nèi)核發(fā)出IRQ中斷請求。另外.在中斷服務(wù)程序中需特別注意:必須加入對L_ISPC或F_ISPC寄存器相應(yīng)的中斷位寫1操作,來清除只讀中斷掛起寄存器INTPEND的掛起位,以使中斷正常運(yùn)行。

2 VxWorks中斷處理機(jī)制

VxWorks中斷處理主要包括:保存被中斷任務(wù)的上下文,調(diào)用中斷服務(wù)程序(ISR),中斷返回恢復(fù)被中斷任務(wù)的上下文,其具體流程如圖1所示。對被中斷任務(wù)現(xiàn)場信息的保存,在S3C44B0處理器體系結(jié)構(gòu)中,VxWorks采用集中式的保存方式,即在內(nèi)存中專門設(shè)置一個(gè)中斷保存堆棧.所有中斷的現(xiàn)場信息都統(tǒng)一保存在此堆棧中。堆棧的定位和大小初始化依據(jù)指定參數(shù)在系統(tǒng)啟動(dòng)時(shí)進(jìn)行配置。對于堆棧的大小,必須足夠大,以滿足最壞情況下中斷嵌套的深度。


圖1 VxWorks中斷處理執(zhí)行流程

2.1 異常向量表的生成及實(shí)現(xiàn)

當(dāng)異常發(fā)生時(shí),程序計(jì)數(shù)器(PC)會(huì)被強(qiáng)制為相應(yīng)異常處理程序的入口地址.然后進(jìn)行中斷源的識別,根據(jù)中斷號在中斷向量表中找到相應(yīng)中斷服務(wù)程序(ISR)的入口地址。VxWorks將異常向量表定位在RAM中,基地址為VEC_BASE_ADRS,在configA11.h中定義.一般為RAM存儲(chǔ)器的起始地址。在系統(tǒng)啟動(dòng)初始化時(shí),由intVecBaseSet()函數(shù)設(shè)置向量表的基地址。向量表地址設(shè)定后,需要初始化指定異常的缺省處理函數(shù)。VxWorks在映像的代碼段建立了一張中斷缺省函數(shù)表,函數(shù)excVecInit()根據(jù)這張表來設(shè)置向量表的各異常中斷向量值。需初始化的向量表范圍由LOW_VEC和HIGH_VEC確定,在excArchLib.h中定義。由于不同的處理器異常處理機(jī)制不同,有時(shí)需根據(jù)具體的異常處理來建立自己的異常向量表,具體建立實(shí)現(xiàn)過程在下面討論。

2.2 中斷服務(wù)程序的連接

VxWorks為中斷提供接口函數(shù)intConnect(),它將中斷服務(wù)程序(ISR)和中斷向量相關(guān)聯(lián)。在操作系統(tǒng)內(nèi)核啟動(dòng)后,VxWorks建立與中斷號相對應(yīng)的中斷向量表,中斷向量表中的每個(gè)中斷向量包含中斷服務(wù)程序(ISR)的入口地址。當(dāng)中斷事件發(fā)生時(shí).VxWorks內(nèi)核將調(diào)用與其中斷向量對應(yīng)的中斷服務(wù)程序。intConnect()原型如下:

STATUS intConnect
(
VOIDFUNCPTR  * vector, /* 要關(guān)聯(lián)的中斷向量 */
VOIDFUNCPTR routine, /*中斷發(fā)生時(shí)調(diào)用的函數(shù) */
int parameter  /*傳遞給lsR函數(shù)的參數(shù)*/
)

但實(shí)際上,中斷出現(xiàn)時(shí)并不是直接調(diào)用指定的中斷處理函數(shù)。而是,intConnect()函數(shù)將創(chuàng)建一小段代碼,這段代碼用以保存必要寄存器、設(shè)置堆棧入口、之后調(diào)用中斷處理函數(shù)。相反,當(dāng)從該函數(shù)返回時(shí),這段代碼先恢復(fù)寄存器和堆棧,然后退出中斷。

3 VxWorks基于S3C44B0X的中斷處理

3.1 基于S3C44B0X處理器的VxWorks異常向量表的生成S3C44BOX處理器不支持內(nèi)存重定向操作,也就是每個(gè)片選的地址范圍是定死的,不能根據(jù)需要自己指定。啟動(dòng)flash存儲(chǔ)器一直位于0地址,異常人口不能在運(yùn)行時(shí)寫入,故必須硬編碼將異常入口填寫在啟動(dòng)flash的0地址處。romInit.s是系統(tǒng)上電時(shí)的初始人口程序.從flash的0地址開始運(yùn)行。故在其開始出定義異常入口程序?qū)崿F(xiàn)如下:

_ARM_FUNCTION(romInit)
_romInit:
B cold  /* 上電復(fù)位后執(zhí)行的第1條指令,也可看作是復(fù)位向量 */
⋯   /* 未定義指令、軟件中斷等異常入口 */
B .
B _romIRQ  /* IRQ中斷異常入口 */
B .

在地址Ox00000014處S3C44B0X處理器未使用,保留。另外VxWorks不支持快速中斷.地址Ox0000001c保留。

由于VxWorks建立的異常向量表定位在RAM中.那么當(dāng)中斷發(fā)生時(shí)如何把兩者連接起來.從而由VxWorks實(shí)現(xiàn)中斷管理呢?本BsP根據(jù)VxWorks缺省異常向量表,建立自定義的向量表,實(shí)現(xiàn)從ROM到RAM異常的連接,總體程序如下:

/* _romIRQ 及其它函數(shù)定義 */
_romIRQ;
sub sp,sp,#4
stmfd sq1 , (r0)
ldr r0,L$_promIRQ
ldr r0,[r0]  /* 裝載IRQ異常地址到R0 */
str r0,[sp,#4]
ldmfd sp!,{r0,pc}  /* 跳轉(zhuǎn)到異常服務(wù)程序 */
/* _romIRQ指向RAM中的位置 */
L$_promIRQ:
.long S3C_EXC_BASE + 20  /* #define S3C_EXC_BASE 0x0c000100 */
/* 在真正RAM空間建立異常向量表,和VxWorks建立的向量表相同,只是位置不同 */
void s3cExcVecSet(void)
{
UINT32 i:
...
i=(UINT32)intEnt;
*((UINT32 *)(S3C_EXC_BASE + Ox14))=i;
}

對以上代碼分析:當(dāng)中斷發(fā)生時(shí).程序跳轉(zhuǎn)到_romIRQ處,然后執(zhí)行出棧操作,把L$_promIRQ地址(0x0c000114=(s3c_EXC_BASE + 20))的內(nèi)容賦給程序計(jì)數(shù)器(PC);而上述vxwofks在RAM空間建立異常向量表時(shí),把異常中斷服務(wù)程序(intEnt)的地址放在地址0x0c00Oll4(s3C_EXC_BASE + 0x14)中,即PC=(UINT32) intEnt實(shí)現(xiàn)從ROM到RAM中斷的連接。

3.2 中斷驅(qū)動(dòng)中的回調(diào)函數(shù)

VxWorks中intArchLib庫所包含的中斷系統(tǒng)函數(shù)與具體的處理器體系結(jié)構(gòu)相關(guān).其默認(rèn)體系結(jié)構(gòu)中不包含ARM處理器,所以此庫中的函數(shù)都要依賴于具體BsP提供的例程來完成其功能。VxWorks采用Hook的方法來實(shí)現(xiàn),針對本處理器的BSP,在sngkcIntrCtl.c文件中,定義了四個(gè)鉤子函數(shù):

sysIntLvlVecChkRtn = sngks32cIntLvlVecChk;/* 中斷源檢測,返回中斷號 */
sysIntLvlEnableRtn = sngks32cIntLvlEnable; /* 使能相應(yīng)中斷 */,
svslntLvlDisableRtn = sngks32cIntLvlDisable; /* 禁止相應(yīng)中斷 */,
svsIntLvlvecAckRtn = sngks32cIntLvLAck; /* 清除中斷標(biāo)志位 */,

用來完成中斷驅(qū)動(dòng)。當(dāng)外部中斷發(fā)生時(shí),程序進(jìn)入intEnt函數(shù),運(yùn)行sysIntLvlVecChkRm鉤子函數(shù)讀中斷服務(wù)掛起寄存器(I_ISPR)來檢測中斷源,并返回中斷號,通過在intConnect函數(shù)中建立的中斷向量與中斷服務(wù)函數(shù)的連接,從而調(diào)用相應(yīng)的中斷服務(wù)程序。在中斷返回時(shí).執(zhí)行sysIntLvlvecAckRtn鉤子函數(shù)通過寫IRQ中斷掛起清零寄存器(I_ISPC),來清除剛處理完的中斷掛起位。完整的VxWorks基于S3C44BOX處理器的中斷響應(yīng)流圖如圖2所示:


圖2 VxWorks基于S3C44B0X處理器的中斷響應(yīng)流圖

4 實(shí)例分析

外部中斷EINT4/5/6/7共用一個(gè)中斷請求線,當(dāng)其中一個(gè)中斷發(fā)生時(shí),中斷掛起寄存器(INTPND)的EINT4/5/6/7位置1.具體是其中哪個(gè)發(fā)生中斷可通過讀外部中斷掛起寄存器(EXTINTPND)來判斷。

中斷服務(wù)程序連接

intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC(21),
(VOIDFUNCPTR)isr4567,0)
外部中斷使能
intEnable(21); /* 觸發(fā)鉤子函數(shù) */
svsIntLvlEnableRtn; /* 清中斷屏蔽寄存器(INTMSK)的EINT4/5/6/7位使能中斷? */
中斷服務(wù)程序:
void isr4567(void)
{
int j;
intDisable(21); /* 關(guān)中斷 */
S3C44B0X_INT_REG_READ (S3C44BOX_EXTINTPND,j);/*讀外部中斷掛起寄存器 */
switch (j)  /* 判斷外部中斷4/5/6/7具體為哪個(gè) */
{
case 1:  /* EINT4觸發(fā) */
semGive(semInt4);  /* 釋放二值信號量,同步EINT服務(wù)程序 */
break:
⋯  /* EINT5,EINT6,EINT7觸發(fā)程序 */
}
⋯  /* 清外部中斷掛起位,使能外部中斷 */
}

在中斷服務(wù)程序設(shè)計(jì)中對處理代碼有諸多限制,如處理代碼應(yīng)盡量短,不能調(diào)用可能引起阻塞的任務(wù)等。針對這種限制,可以采用中斷服務(wù)程序分步處理法,具體是將原來的中斷服務(wù)程序分為新的中斷服務(wù)程序和中斷服務(wù)任務(wù)兩部分:新的中斷服務(wù)程序僅僅執(zhí)行最基本的中斷處理,例如禁止中斷、判斷中斷類型等;而絕大多數(shù)的中斷處理任務(wù),特別是有可能造成阻塞的任務(wù),都放在中斷服務(wù)任務(wù)中執(zhí)行。新的中斷服務(wù)程序和中斷服務(wù)任務(wù)采用二進(jìn)制信號量進(jìn)行同步(如上述程序設(shè)計(jì)所示),但中斷服務(wù)任務(wù)在創(chuàng)建時(shí)必須滿足在所有創(chuàng)建的任務(wù)中具有較高的優(yōu)先級,以使中斷發(fā)生時(shí)外部事件得到優(yōu)先處理,否則中斷響應(yīng)就失去其意義。

5 結(jié)束語

隨著計(jì)算機(jī)技術(shù)和控制技術(shù)快速發(fā)展,VxWorks實(shí)時(shí)嵌入式操作系統(tǒng)被廣泛應(yīng)用于各種設(shè)備和實(shí)時(shí)控制系統(tǒng)中,而硬件中斷處理在實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)中起著十分重要的作用。針對嵌入式系統(tǒng)的硬件設(shè)計(jì)和軟件規(guī)劃,本文闡述了VxWorks的中斷處理機(jī)制,分析了VxWorks的中斷處理過程,提出了基于S3C44B0X處理器的中斷處理實(shí)現(xiàn)方法.提高了系統(tǒng)的實(shí)時(shí)性并滿足塒外部突發(fā)事件的及時(shí)處理.對從事實(shí)時(shí)系統(tǒng)的開發(fā)具有一定的參考和借鑒作用。

本文作者創(chuàng)新點(diǎn):首次深刻分析了VxWorks基于S3C44B0X處理器的中斷處理過程。并以實(shí)際外部中斷處理為例,提出了在中斷服務(wù)程序設(shè)計(jì)中采取的分步處理。


作者:錢華明,牛付震      來源:《微計(jì)算機(jī)信息》(嵌入式與SOC)2009年第5-2期
本文地址:http://m.qingdxww.cn/thread-10985-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产123| 四虎影视永久在线精品免费 | 91香蕉成人免费高清网站 | 亚洲视频免费一区 | 黄色成年网站 | 日韩亚洲欧美在线 | 青青自拍视频 | 久久h | 成都4片p高清完整版hd | 午夜成人影视 | 免费xxxx日本大片在线观看 | 99精品国产自在现线观看 | 国产乱对白刺激视频在线观看 | 色中色综合 | 一个人看视频在线观看 | 色www免费视频 | 亚洲国产精品一区二区第四页 | 国产成人精品久久 | 敢死队4在线观看高清完整版 | 久热青青青在线视频精品 | 欧美高清在线 | 亚洲影视在线观看 | 黄色成人在线播放 | 在线国产观看 | 人间正道是沧桑全集免费下载高清 | 亚洲图片视频在线 | 久久国产精品高清一区二区三区 | 成年黄网站免费大全毛片 | 欧美视频在线观看免费播放 | 中文字幕 二区 三区 搜查官 | 色妞www精品一级视频 | 日本无遮挡吸乳视频看看 | 女老师中文字幕 | 4hu四虎免费影院www | 字幕网yellow 91在线 | 日本影院在线观看 | 2019国内精品久久久久久 | 日韩一级片免费观看 | 国产免费卡1卡2卡 | 久久国产美女免费观看精品 | 国产一区三区二区中文在线 |