www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 在篇文章中主要講講調(diào)試中斷過程中獲得的知識(shí),也許會(huì)對(duì)大家有用。大家應(yīng)該都知道在使用S3C2440這塊芯片時(shí),有一個(gè)十分大的問題,就是對(duì)于keil軟件自帶的初始化代碼沒有給全,在初始化代碼中主要做了以

在篇文章中主要講講調(diào)試中斷過程中獲得的知識(shí),也許會(huì)對(duì)大家有用。

大家應(yīng)該都知道在使用S3C2440這塊芯片時(shí),有一個(gè)十分大的問題,就是對(duì)于keil軟件自帶的初始化代碼沒有給全,在初始化代碼中主要做了以下幾件事

可以看出,也就是對(duì)I/O口進(jìn)行了配置,看門狗,時(shí)鐘進(jìn)行了初始化,同時(shí)也對(duì)內(nèi)存塊進(jìn)行了一定的配置,是十分基本的一些初始化,其中對(duì)于中斷向量表根本就沒有進(jìn)行建立,因此如果要用他的文件進(jìn)行中斷的實(shí)驗(yàn),必須自己去改動(dòng)初始化代碼,完成他沒有完成的工作,自己嘗試了一下,沒有成功,因此就對(duì)ADS事例程序的初始化代碼進(jìn)行移植(參看某大神的教程實(shí)現(xiàn),)

一、ARM中斷的執(zhí)行方式

這里中斷有兩種,一種外部中斷,一種內(nèi)部中斷,對(duì)于兩種中斷稍有不同,原理相似,我以外部中斷進(jìn)行介紹。

1)當(dāng)然首先必須配置好各種寄存器,當(dāng)外部中斷在滿足條件的時(shí)候會(huì)發(fā)生中斷,這時(shí)EINTPEND這個(gè)寄存器的對(duì)應(yīng)位會(huì)被寫為1,其中這個(gè)寄存器可以有多位置一

2)再繼續(xù)和EINTMASK這個(gè)寄存器進(jìn)行操作,如果觸發(fā)的中斷沒有被屏蔽,則可以產(chǎn)生,這時(shí)SRCPND對(duì)應(yīng)的位置會(huì)置1,當(dāng)然SRCPND這個(gè)寄存器也可能會(huì)多位被置1,僅僅表示此時(shí)有多個(gè)中斷發(fā)生了。

3)查看中斷模式,是普通中斷還是快速中斷,如果是快速中斷直接進(jìn)入FIQ異常,如果是普通中斷還需要進(jìn)行后續(xù)操作。

4)如果是普通中斷,再與INTMSK進(jìn)行操作,操作后,如果還有多個(gè)中斷,則進(jìn)入中斷判優(yōu),最終對(duì)INTPND中的某一位進(jìn)行置1,表示某個(gè)中斷產(chǎn)生并相應(yīng)。注意INTPND這個(gè)寄存器有且僅有一位能夠被置1。

以上就是有中斷來了后,整個(gè)硬件操作的過程,因此我們可以看出,其實(shí)我們有時(shí)候可以不通過中斷服務(wù)的方式來進(jìn)行,直接進(jìn)行中斷位這些標(biāo)志的查詢就可以了,(類似單片機(jī)),但是這樣沒有任何效率的提升了。

對(duì)于復(fù)位、未定義指令、軟件中斷、指令異常、數(shù)據(jù)異常、普通中斷、快速中斷,在這里我們叫他們異常

對(duì)于普通中斷中具體的中斷,我們才叫中斷。

對(duì)于以上異常發(fā)生時(shí),都會(huì)有一個(gè)固定的跳轉(zhuǎn)地址,即異常向量表:


地址異常0x0000,0000復(fù)位0x0000,0004未定義指令0x0000,0008軟件中斷0x0000,000c指令異常0x0000,0010數(shù)據(jù)異常0x0000,0014保留0x0000,0018普通中斷0x0000,001c快速中斷


下面是當(dāng)進(jìn)入IRQ中斷發(fā)生后,軟件方面的一些操作:

1)當(dāng)中斷產(chǎn)生時(shí),程序會(huì)自動(dòng)的跳轉(zhuǎn)到0x0000,0018這個(gè)地址上去,在這個(gè)地址上一般會(huì)有一個(gè)跳轉(zhuǎn)指令,就可以直接跳轉(zhuǎn)到異常處理函數(shù)。

2)但是對(duì)于普通中斷異常中還有相當(dāng)多的中斷,因此對(duì)于普通中斷異常跳入的異常處理函數(shù)不是一個(gè)正真的處理函數(shù),而是一個(gè)中斷偏移在此跳轉(zhuǎn)的中間過程。其函數(shù)如下:


  1. ;呵呵,來了來了.好戲來了,這一段程序就是用來進(jìn)行第二次查表的過程了.

  2. ;如果說第一次查表是由硬件來完成的,那這一次查表就是由軟件來實(shí)現(xiàn)的了.

  3. ;為什么要查兩次表??

  4. ;沒有辦法,ARM把所有的中斷都?xì)w納成一個(gè)IRQ中斷異常和一個(gè)FIRQ中斷異常

  5. ;第一次查表主要是查出是什么異常,可我們總要知道是這個(gè)中斷異常中的什么中斷呀!

  6. ;沒辦法了,再查一次表唄!

  7. ;===================================================================================

  8. ;//外部中斷號(hào)判斷,通過中斷服務(wù)程序入口地址存儲(chǔ)器的地址偏移確定

  9. ;//PC=[HandleEINT0+[INTOFFSET]]

  10. ;H|------|

  11. ;|///|

  12. ;|--isr-|====>pc

  13. ;L|--r8--|

  14. ;|--r9--|<----sp

  15. IsrIRQ

  16. subsp,sp,#4;給PC寄存器保留reservedforPC

  17. stmfdsp!,{r8-r9};把r8-r9壓入棧

  18. ldrr9,=INTOFFSET;把INTOFFSET的地址裝入r9INTOFFSET是一個(gè)內(nèi)部的寄存器,存著中斷的偏移

  19. ldrr9,[r9];I_ISR

  20. ldrr8,=HandleEINT0;這就是我們第二個(gè)中斷向量表的入口的,先裝入r8

  21. ;===================================================================================

  22. ;哈哈,這查表方法夠好了吧,r8(入口)+index*4(別望了一條指令是4bytes的喔),

  23. ;這不就是我們要找的那一項(xiàng)了嗎.找到了表項(xiàng),下一步做什么?肯定先裝入了!

  24. ;==================================================================================

  25. addr8,r8,r9,lsl#2;地址對(duì)齊,因?yàn)槊總€(gè)中斷向量占4個(gè)字節(jié),即isr=IvectTable+Offeset*4

  26. ldrr8,[r8];裝入中斷服務(wù)程序的入口

  27. strr8,[sp,#8];把入口也入棧,準(zhǔn)備用舊招

  28. ldmfdsp!,{r8-r9,pc};施招,彈出棧,哈哈,順便把r8彈出到PC了,跳轉(zhuǎn)成功!



這段語句就實(shí)現(xiàn)了普通中斷異常到具體中斷的偏移處理。

這樣就可以跳轉(zhuǎn)到具體的中斷處理程序中了。

對(duì)于如果用S3C2440.S這個(gè)初始化文件,肯定是沒有二次查表,并且也沒有建立后續(xù)具體中斷的偏移地址,這樣如果我們自己僅僅在S3C2440.S添加出硬件中斷發(fā)生后,異常跳轉(zhuǎn),讓異常跳轉(zhuǎn)到一個(gè)C程序中,再在C程序中檢測(cè)INTPND這個(gè)寄存器的值,根據(jù)這個(gè)置調(diào)用不同的子函數(shù)也可以實(shí)現(xiàn)中斷。(當(dāng)然在跳轉(zhuǎn)過程中,從正常情況進(jìn)入中斷異常,需要進(jìn)行模式轉(zhuǎn)換,棧的保存等)

二、在ARM中執(zhí)行中斷時(shí),內(nèi)存的映射情況

第一部分所說的直接跳轉(zhuǎn)地址,都是硬件執(zhí)行時(shí)直接使用的地址,當(dāng)MMU沒有開啟的時(shí)候,上面的地址就是物理地址,直接去實(shí)際的那塊地址,但是當(dāng)MMU開啟后,上面的地址就是虛擬地址(開啟MMU之后,所有使用的地址都應(yīng)該是虛擬地址了,都會(huì)被映射到某一塊對(duì)應(yīng)的物理地址中去)。但是從keil forARM的工程配置

我們程序代碼是從ROM1的0x3000,0000這里開始存放的,因此如果產(chǎn)生中斷了,MMU沒有開啟,那硬件直接去訪問0x0000,0000這里,是不可能找到我們的代碼,這時(shí)候程序就跑飛了。因此為了當(dāng)硬件去訪問0x0000,0000時(shí),其實(shí)訪問的是ROM1的0x3000,0000,我們必須開啟MMU把0x0000,0000變成一個(gè)虛擬的地址,這個(gè)虛擬地址映射的實(shí)際物理地址是0x3000,0000,這里我們就需要介紹一個(gè)函數(shù)MMU_SetMTT,源代碼如下


  1. voidMMU_SetMTT(intvaddrStart,intvaddrEnd,intpaddrStart,intattr)

  2. {

  3. volatileU32*pTT;

  4. volatileinti,nSec;

  5. pTT=(U32*)_MMUTT_STARTADDRESS+(vaddrStart>>20);

  6. nSec=(vaddrEnd>>20)-(vaddrStart>>20);

  7. for(i=0;i<=nSec;i++)*pTT++=attr|(((paddrStart>>20)+i)<<20);

  8. }

在內(nèi)存映射中增加MMU_SetMTT(0x00000000,0x03F00000,0x30000000,RW_CB);

或者增加MMU_SetMTT(0x00000000,0x03f00000,(int)__ENTRY,RW_CB); 因?yàn)镋NTRY就是等于0x30000000;

這樣在中斷產(chǎn)生的時(shí)候就不會(huì)跑飛了,并且能按照程序代碼找到對(duì)應(yīng)中斷入口等。

三、特別提醒

在上面兩個(gè)問題解決后,順利的把中斷調(diào)試通過,但是需要注意的小細(xì)節(jié)是:

1)在每次中斷發(fā)生后,記得要對(duì)中斷進(jìn)行清除,并且清除的過程是從內(nèi)部向外部清除,

2)在對(duì)于的中斷函數(shù)一定要記住掛載對(duì)應(yīng)的中斷向量地址上,不然同樣程序會(huì)跑飛,如果沒有注意這里,可能會(huì)調(diào)試很久。

四、中斷向量表

這是初始化代碼中用于上面二次偏移的標(biāo)號(hào),定義在RAM中


  1. ALIGN

  2. AREARamData,DATA,READWRITE

  3. ^_ISR_STARTADDRESS;_ISR_STARTADDRESS=0x33FF_FF00

  4. HandleReset#4

  5. HandleUndef#4

  6. HandleSWI#4

  7. HandlePabort#4

  8. HandleDabort#4

  9. HandleReserved#4

  10. HandleIRQ#4

  11. HandleFIQ#4

  12. ;Donotusethelabel'IntVectorTable',

  13. ;ThevalueofIntVectorTableisdifferentwiththeaddressyouthinkitmaybe.

  14. ;IntVectorTable

  15. ;@0x33FF_FF20

  16. HandleEINT0#4

  17. HandleEINT1 # 4

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉