張建民張前峰
(1.深圳電器公司 技術(shù)中心,廣東深圳 518000; 2.中國(guó)電信股份有限公司 泉州分公司,福建泉州 362000)
龍芯2F便攜機(jī)主板中斷機(jī)制研究與實(shí)現(xiàn)
張建民1張前峰2
(1.深圳電器公司 技術(shù)中心,廣東深圳 518000; 2.中國(guó)電信股份有限公司 泉州分公司,福建泉州 362000)
龍芯2F處理器是面向桌面和高端嵌入式應(yīng)用的64位高性能低功耗芯片,可應(yīng)用于個(gè)人計(jì)算機(jī)、行業(yè)終端、工業(yè)控制、數(shù)據(jù)采集、網(wǎng)絡(luò)安全等領(lǐng)域。通過(guò)研究龍芯2F處理器的中斷機(jī)制,設(shè)計(jì)了龍芯2F便攜機(jī)主板外部中斷路由,在Linux2.6.36內(nèi)核中實(shí)現(xiàn)了外部中斷處理。大量測(cè)試表明:龍芯2F處理器能夠準(zhǔn)確及時(shí)地處理外部中斷請(qǐng)求,達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)。
龍芯2F;便攜機(jī)主板;中斷機(jī)制
龍芯系列處理器芯片是龍芯中科技術(shù)有限公司研發(fā)的具有自主知識(shí)產(chǎn)權(quán)的處理器芯片,產(chǎn)品線包括龍芯1號(hào)、龍芯2號(hào)和龍芯3號(hào)三個(gè)系列。龍芯1號(hào)系列為32位處理器,主要應(yīng)用于云終端、工業(yè)控制、數(shù)據(jù)采集、手持終端、網(wǎng)絡(luò)安全、消費(fèi)電子等領(lǐng)域。龍芯2號(hào)系列是面向桌面和高端嵌入式應(yīng)用的64位高性能低功耗處理器。龍芯3號(hào)系列是面向高性能計(jì)算機(jī)、服務(wù)器和高端桌面應(yīng)用的64位多核處理器。龍芯系列處理器芯片填補(bǔ)了國(guó)產(chǎn)處理器的空白,并在國(guó)際處理器市場(chǎng)占有一席之地。
龍芯2F是龍芯2號(hào)處理器的第一款產(chǎn)品,采用90納米CMOS工藝制造,主頻可達(dá)800 MHz至1 GHz,具有64 KB一級(jí)指令緩存、64 KB一級(jí)數(shù)據(jù)緩存、512 KB二級(jí)緩存(數(shù)據(jù)/指令共享),兼容MIPS III指令集,集成了DDR2內(nèi)存控制器和PCI等接口。龍芯2F在800 MHz主頻下功耗小于5W,并且支持動(dòng)態(tài)降頻;龍芯2F可用于個(gè)人計(jì)算機(jī)、行業(yè)終端、工業(yè)控制、數(shù)據(jù)采集、網(wǎng)絡(luò)安全等領(lǐng)域。從2008年開(kāi)始經(jīng)過(guò)多年的商業(yè)化推廣,龍芯2F的穩(wěn)定性已得到充分的驗(yàn)證。
本文通過(guò)對(duì)龍芯2F處理器的中斷機(jī)制進(jìn)行研究,提出了龍芯2F便攜機(jī)主板外部中斷路由的設(shè)計(jì)思路、外部中斷處理的實(shí)現(xiàn)方法。
龍芯2F便攜機(jī)主板采用龍芯2F處理器,搭配電源、復(fù)位、時(shí)鐘電路以及DDR2、BIOS等模塊。通過(guò)龍芯2F處理器集成的PCI接口,連接顯示芯片SM712、南橋芯片AMD CS5536以及千兆以太網(wǎng)芯片RTL8110;通過(guò)南橋芯片AMD CS5536提供IDE、USB、音頻、LPC等接口;通過(guò)LPC接口連接EC芯片WPCE775,用于便攜機(jī)矩陣鍵盤及觸摸板控制、LVDS背光亮度調(diào)節(jié)、音量控制、電池充放電、上電時(shí)序等控制。
龍芯2F便攜機(jī)主板兼顧體積、接口等要求,滿足了日益增長(zhǎng)的低功耗、高性能的應(yīng)用需求,主板架構(gòu)如圖1所示。
計(jì)算機(jī)在執(zhí)行程序的過(guò)程中,當(dāng)出現(xiàn)異常情況或特殊請(qǐng)求時(shí),計(jì)算機(jī)停止現(xiàn)行程序的運(yùn)行,轉(zhuǎn)向?qū)@些異常情況或特殊請(qǐng)求的處理,處理結(jié)束后再返回到現(xiàn)行程序的間斷處,繼續(xù)執(zhí)行原程序,這就是“中斷”[1]。最初,中斷是處理器與外部設(shè)備交換信息的一種控制方式,也稱為外部中斷。隨著計(jì)算機(jī)技術(shù)的發(fā)展,中斷的范圍也隨之?dāng)U大,出現(xiàn)了內(nèi)部軟件中斷的概念,它是為解決機(jī)器內(nèi)部運(yùn)行時(shí)出現(xiàn)的異常以及為編程方便而提出的。
在MIPS體系結(jié)構(gòu)中,中斷、自陷、系統(tǒng)調(diào)用以及其它打斷程序正常執(zhí)行的事件統(tǒng)稱為異常,都采用同一種機(jī)制來(lái)處理[2]。龍芯2F處理器處理某個(gè)異常時(shí),狀態(tài)寄存器的EXL位被置為1,這意味著系統(tǒng)運(yùn)行在內(nèi)核模式。在保存了適當(dāng)?shù)默F(xiàn)場(chǎng)狀態(tài)之后,異常處理程序通常將狀態(tài)寄存器的KSU字段設(shè)定為內(nèi)核模式,同時(shí)將EXL位置回為0。當(dāng)恢復(fù)現(xiàn)場(chǎng)狀態(tài)并且重新執(zhí)行時(shí),處理程序則會(huì)把KSU字段恢復(fù)回上次的值,同時(shí)置EXL位為1。當(dāng)計(jì)算機(jī)系統(tǒng)啟動(dòng)時(shí)(龍芯2F處理器狀態(tài)寄存器的BEV位為1),異常向量地址位于既不通過(guò)Cache進(jìn)行存取,也無(wú)需地址映射的地址空間。當(dāng)計(jì)算機(jī)系統(tǒng)正常運(yùn)行時(shí)(龍芯2F處理器狀態(tài)寄存器的BEV位為0),向量地址位于需要通過(guò)Cache進(jìn)行存取的地址空間。冷重啟、熱重啟和非屏蔽中斷的異常向量地址始終為0xFFFFFFFFBFC00000[3]。龍芯2F處理器的異常向量地址表如表1所示。
圖1 龍芯2F便攜機(jī)主板架構(gòu)圖
表1 龍芯2F處理器的異常向量地址表
當(dāng)CPU內(nèi)部異?;蛘咄獠恐袛喟l(fā)生時(shí),龍芯2F處理器設(shè)置Cause寄存器的Excode域(Excode域用來(lái)描述通用異常,共5位,可描述32個(gè)異常類型)以及相應(yīng)的IP位,然后就跳轉(zhuǎn)到通用異常地址入口。在通用異常入口處,操作系統(tǒng)設(shè)置了一個(gè)通用異常處理程序,它會(huì)根據(jù)Cause寄存器的Excode域值來(lái)索引通用異常處理表,并跳轉(zhuǎn)到異常處理表項(xiàng)對(duì)應(yīng)的處理程序[4],龍芯2F處理器通用異常處理表如表2所示。
龍芯2F處理器支持12個(gè)外部中斷、1個(gè)不可屏蔽中斷和3個(gè)內(nèi)部中斷。12個(gè)外部中斷包括4個(gè)可配置的GPIO中斷信號(hào)(GPIO[0]至GPIO[3])、4個(gè)PCI中斷信號(hào)(PCI-INTn[0]至PCI-INTn [3])和4個(gè)特殊中斷信號(hào)(INTn[0]至INTn[3]);龍芯2F處理器的3個(gè)內(nèi)部中斷包括1個(gè)PCI總線奇偶錯(cuò)信號(hào)(PCI-SERR)、1個(gè)PCI總線系統(tǒng)錯(cuò)信號(hào)(PCI-PERR)和1個(gè)DDR2控制器中斷信號(hào)(DDR2 Controller)。
表2 龍芯2F處理器通用異常處理表
龍芯2F處理器特殊中斷信號(hào)INTn[0]對(duì)應(yīng)Cause寄存器的IP2、INTn[1]對(duì)應(yīng)Cause寄存器的IP3、INTn[2]對(duì)應(yīng)Cause寄存器的IP4、INTn[3]對(duì)應(yīng)Cause寄存器的IP5;龍芯2F處理器的3個(gè)內(nèi)部中斷信號(hào)、4個(gè)可配置的GPIO中斷信號(hào)、4個(gè)PCI中斷信號(hào)以及Performance Counter寄存器均對(duì)應(yīng)Cause寄存器的IP6;Timer中斷(當(dāng)Count、Compare寄存器的內(nèi)容相等時(shí)產(chǎn)生Timer中斷)對(duì)應(yīng)Cause寄存器的IP7;IP0、IP1保留給軟件使用。龍芯2F處理器內(nèi)部的中斷路由如圖2所示。
圖2 龍芯2F處理器內(nèi)部的中斷路由圖
龍芯2F處理器32位的可讀寫Cause寄存器描述了最近一個(gè)異常發(fā)生的原因。該寄存器各域如圖3所示:
圖3 龍芯2F處理器Cause寄存器
Cause寄存器各域的含義如表3所示:
表3 Cause寄存器各域的含義
龍芯2F處理器中斷相關(guān)控制寄存器Intpol、Intedge、Inten、Intenset、Intenclr都是以位的形式對(duì)相應(yīng)的中斷線進(jìn)行控制,中斷控制位連接及屬性配置見(jiàn)表4。中斷的有效電平由Intpol寄存器設(shè)置。中斷使能的配置有三個(gè)寄存器:Intenset、Intenclr和Inten。Intenset寄存器用于設(shè)置中斷使能,該寄存器寫1的位對(duì)應(yīng)的中斷被使能。Intenclr寄存器用于清除中斷使能,該寄存器寫1的位對(duì)應(yīng)的中斷被清除。Inten寄存器用于查看當(dāng)前各中斷使能的情況。脈沖形式的中斷信號(hào)(如PCI-SERR)由Intedge寄存器來(lái)選擇,寫1表示脈沖觸發(fā),寫0表示電平觸發(fā)。中斷處理程序可以通過(guò)設(shè)置Intenclr寄存器的相應(yīng)位來(lái)清除脈沖記錄。
表4 龍芯2F處理器中斷控制寄存器
3.1 龍芯2F便攜機(jī)主板外部中斷路由設(shè)計(jì)
根據(jù)龍芯2F便攜機(jī)主板架構(gòu),龍芯2F處理器與外設(shè)之間的外部中斷路由設(shè)計(jì)為:千兆以太網(wǎng)芯片RTL8110使用PCI-INTn[0]中斷信號(hào);顯示芯片SM712使用PCI-INTn[1]中斷信號(hào);二者均對(duì)應(yīng)Cause寄存器的IP6。南橋芯片AMD CS5536使用INTn[0]中斷信號(hào),對(duì)應(yīng)Cause寄存器的IP2;南橋內(nèi)部集成了兼容Intel8259A的中斷控制器,通過(guò)級(jí)聯(lián)的方式將IDE、USB、音頻、RTC等模塊的中斷信號(hào)、矩陣鍵盤、觸摸板、EC芯片WPCE775的SCI中斷信號(hào),路由到龍芯2F處理器的INTn[0]。
3.2 外部中斷處理流程
當(dāng)有外部中斷請(qǐng)求時(shí),龍芯2F處理器采集中斷信號(hào),跳轉(zhuǎn)至通用異常向地址0xFFFFFFFF 80000180處,通用異常處理程序根據(jù)Cause寄存器Excode域值為0來(lái)索引通用異常處理表,并跳轉(zhuǎn)到異常處理表項(xiàng)對(duì)應(yīng)的處理程序handle-int。龍芯2F處理器外部中斷處理流程如圖4所示。
龍芯2F便攜機(jī)主板外部中斷處理流程采用兩級(jí)判定的方法來(lái)實(shí)現(xiàn)。第一級(jí)判定通過(guò)軟件查詢Cause寄存器的IP位來(lái)確定產(chǎn)生哪一類外部中斷;判斷依據(jù)為:IP7(MIPS內(nèi)部時(shí)鐘中斷Timer);IP6 (北橋設(shè)備中斷);IP2(南橋設(shè)備中斷);IP0、IP1(保留給軟件使用);其他IP未使用。第二級(jí)判定通過(guò)軟件查詢龍芯2F CPU和南橋芯片的中斷狀態(tài)寄存器的各位來(lái)確定產(chǎn)生外部中斷的設(shè)備及其中斷號(hào)。龍芯2F便攜機(jī)主板各設(shè)備的中斷號(hào)分配如表5所示。
3.3 外部中斷處理的實(shí)現(xiàn)
根據(jù)上述外部中斷處理流程,在Linux2.6.36內(nèi)核中實(shí)現(xiàn)了外部中斷處理,其步驟如下: Step1 初始化龍芯2F處理器和南橋芯片中斷觸發(fā)方式及相關(guān)的寄存器;
圖4 龍芯2F便攜機(jī)主板外部中斷處理流程圖
表5 龍芯2F便攜機(jī)主板各設(shè)備中斷號(hào)分配表
Step2 當(dāng)有外部中斷請(qǐng)求時(shí),龍芯2F處理器采集中斷信號(hào),通過(guò)查詢Cause寄存器的Excode域確定屬于哪一類異常,然后跳轉(zhuǎn)至相應(yīng)的異常處理程序;
Step3 若Cause寄存器的Excode域值為0;則查詢Cause寄存器的IP位來(lái)確定產(chǎn)生哪一類外部中斷;
Step4 查詢龍芯2F CPU和南橋芯片的中斷狀態(tài)寄存器的各位來(lái)確定產(chǎn)生中斷的設(shè)備及其中斷號(hào);
Step5 調(diào)用具體設(shè)備的中斷服務(wù)程序。
現(xiàn)以矩陣鍵盤中斷的處理過(guò)程說(shuō)明以上步驟:
1)用戶按下某個(gè)鍵后,鍵盤控制器產(chǎn)生中斷,通過(guò)南橋的中斷控制器傳至龍芯2F處理器的INTn [0]引腳,此引腳引發(fā)異常;
2)龍芯2F處理器自動(dòng)設(shè)置Cause寄存器的Excode域值為0、IP2位為1,并跳轉(zhuǎn)至通用異常向量地址0xFFFFFFFF 80000180處;
3)位于通用異常入口處的異常處理程序,會(huì)根據(jù)Cause寄存器的Excode域值來(lái)索引通用異常處理表,并跳轉(zhuǎn)到0號(hào)異常處理程序handle-int;
4)0號(hào)異常處理程序handle-int根據(jù)Cause寄存器的IP位,跳轉(zhuǎn)到南橋中斷控制器的中斷處理函數(shù)i8259-irqdispatch();
5)中斷處理函數(shù)i8259-irqdispatch()通過(guò)讀取南橋中斷控制器的中斷狀態(tài)寄存器來(lái)確定產(chǎn)生外部中斷的設(shè)備為矩陣鍵盤,其中斷號(hào)為1,進(jìn)而調(diào)用do-IRQ()函數(shù)進(jìn)入矩陣鍵盤的中斷處理程序。
龍芯2F便攜機(jī)主板調(diào)試完成后,對(duì)矩陣鍵盤、SCI、RTC、音頻、USB、IDE、觸摸板、內(nèi)部時(shí)鐘、以太網(wǎng)芯片產(chǎn)生的外部中斷進(jìn)行了大量測(cè)試。
測(cè)試過(guò)程中,在Debian6.0操作系統(tǒng)下(內(nèi)核版本Linux2.6.36)打開(kāi)“終端”軟件,通過(guò)cat/ proc/interrupts命令可查看中斷處理情況[5],當(dāng)上述設(shè)備觸發(fā)外部中斷時(shí),該設(shè)備對(duì)應(yīng)的中斷計(jì)數(shù)會(huì)增加;若中斷處理錯(cuò)誤,錯(cuò)誤計(jì)數(shù)則增加。測(cè)試結(jié)果如表6所示。
表6 龍芯2F便攜機(jī)主板中斷處理測(cè)試表
以上測(cè)試結(jié)果表明:龍芯2F處理器能夠準(zhǔn)確及時(shí)地處理外部中斷請(qǐng)求,無(wú)錯(cuò)誤和誤動(dòng)作發(fā)生,達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)。
針對(duì)龍芯2F便攜機(jī)主板的外部中斷路由設(shè)計(jì)及其實(shí)現(xiàn)方法,結(jié)合該主板的架構(gòu),分析了龍芯2F處理器的中斷機(jī)制,設(shè)計(jì)了該主板的外部中斷路由;根據(jù)該主板外部中斷的處理流程,在Linux2.6.36內(nèi)核中實(shí)現(xiàn)了外部中斷處理;通過(guò)對(duì)該主板的外部中斷進(jìn)行大量測(cè)試,表明了龍芯2F處理器能夠準(zhǔn)確及時(shí)地處理外部中斷請(qǐng)求,達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)。
[1] 唐朔飛.計(jì)算機(jī)組成原理[M].北京:高等教育出版社,2008.
[2] Dominic Sweet man.See MIPS Run[M].北京:機(jī)械工業(yè)出版社,2007.
[3] 劉佩林,譚志明,劉嘉龑.MIPS體系結(jié)構(gòu)與編程[M].北京:科學(xué)出版社,2008.
[4] Heinrich,J.MIPS R4000 User’s Manual.Englewood Cliffs,NJ:Prentice Hall,1993.
[5] 王旭.Debian標(biāo)準(zhǔn)教程[M].北京:人民郵電出版社,2009.
The Research and Realization of the Interrupt Mechanism Based on the Loongson 2F Laptop Motherboard
ZHANG Jian-m in1ZHANG Qian-feng2
(1.Technology Center,Shenzhen Electric Appliance Company,Shenzhen Guangdong 518000,China; 2.China Telecom Corporation Limited Quanzhou Branch,Quanzhou Fujian 362000,China)
Loongson 2F processor is a 64 bit high performance and low power chips for desktop and high-end embedded applications,which can be applied to a personal computer,industry terminal,industrial control,data acquisition,network security and other fields.By studying the interrupt mechanism of loongson 2F processor,we design the loongson 2F laptop motherboard external interrupt routing,implementing the external interrupt handling in the Linux2.6.36 kernel.Tests show that the loongson 2F processor can accurately and timely process the external interrupt request for desired design goals.
loongson 2F;laptop motherboard;interrupt mechanism
TP338.1
A
1009-0312(2015)01-0013-06
2014-10-13
張建民(1975—),男,河南開(kāi)封人,工程師,碩士,主要從事Linux內(nèi)核及驅(qū)動(dòng)開(kāi)發(fā)研究。