嵌入式實踐試驗05中斷_第1頁
嵌入式實踐試驗05中斷_第2頁
嵌入式實踐試驗05中斷_第3頁
嵌入式實踐試驗05中斷_第4頁
嵌入式實踐試驗05中斷_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

?當按下按鈕SB1202時,LED的D1204閃爍n?當按下按鈕SB1203時,LED的D1205閃爍n?其中,閃爍是指點亮1秒,延時1秒,然后再熄滅,再延時1?假設:delay(10000)為延時1四、1ARMS3C44B0X30DMA、UART、SIO等這樣的內部或外部引腳。在這些中斷源中,有4個外部中斷(EINT4/5/6/7)是邏輯或的關系,它們共用一條中斷請求線。UART0UART1的錯誤中斷也是邏輯或的關系。FIQIRQARM7TDMI實際上最初ARM7TDMIFIQ(快速中斷請求)IRQ(通用中斷請求)兩種中斷,其它中斷都是各個廠家在設計時定義的,這些中斷根據中斷的優先級高低來進行處理。例如,IRQ中斷(通過中斷模式寄存器設置10個中斷發出請求,S3C44B0XCISC結構微控制器的特征,能夠降S3C44B0X的中斷控制器硬件本身直接提供了對向量中斷服務的支持。0X18(0X1C)地址到各個中斷源向量地址的跳轉指令,然后再由中斷源向量進入到相應的中FICPSRF1CPUFIQ(中斷請求),CPSRI1CPU將不接受來自中斷控制器的(中斷請求)。因此,為了使能FIQ和IRQ,必須先將CPSR程序狀態寄存器的F位和I位,并且中斷寄存器INTMSK中相應的位也要。中斷模式ARM7TDMI2種中斷模式,FIQIRQ模式。所有的中斷源在中斷請求時都要確定用于指示對應的中斷是否被激活。如果掛起位被設置為1,那么無論標志I或標志F是否被,I_ISPCF_ISPC1的操作來清除掛起條件。中斷寄存器當INTMSK寄存器的位為1時,對應的中斷被;當INTMSK寄存器的位為0時,則對應的中斷正常執行。如果一個中斷的位為1,在該中斷發出請求時掛起位還是會被設置為1。如果中斷寄存器的global位設置為1,那么中斷掛起位在中斷請求時還會被設置但所有的中斷請求S3C44B0X30個中斷源中,有26個中斷源提供給中斷控制器,其中4個外部中斷(EINT4/5/6/7)通過“或”的形式提供一個中斷源送至中斷控制器,2個URAT錯誤中斷(UERROR0/1)也是如此。4-14S3C44B0X向量中斷模式(僅針對S3C44B0X含有向量中斷模式,可以減少中斷的反應時間。通常情況下ARM7TDMI內核收到中斷控制器的IRQ中斷請求,ARM7TDMI會在0X ARM7TDMI從0X 由中斷控制器產生。例如,假設EINT0是IRQ中斷,如表4-15所示,EINT0的向量地址為0X20,所以中斷控制器必須產生從0X18到0X20的分支指令。因此,中斷控制器產生的機器碼為0xea000000.在各個中向量中斷模式的指令機器代碼=0xea000000目標地址向量地址例如,如果Timer0中斷采用向量中斷模式,則跳轉到對應中斷服務程序的分支指令應該存放在向量地址0x 處。中斷服務程序的起始地址在0x10000,下面就是計算出來放在0x60處machinecode@0x :0xea000000+((0x10000-0x60-0x8)>>2)=0xea000000+0x3fe6=0xea003fe64-15bbResetHandler/*fordebugbHandlerUndef/*handlerUndefbHandlerSWI/*SWIinterrupthandler*/bHandlerPabort/*handlerPAbort*/bHandlerDabort/*handlerDAbortb./*ldrpc,=HandlerIRQbHandlerFIQldrpc,=HandlerEINT0/*mGA0x20H/Winterruptvectortable*/ldrpc,=HandlerEINT1/**/ldrpc,=HandlerEINT2/**/ldrpc,=HandlerEINT3/*ldrpc,=HandlerEINT4567/*ldrpc,=HandlerTICK/*mGA0x34*/b.bldrpc,=HandlerZDMA0/*mGB0x40*/ldrpc,=HandlerZDMA1/**/ldrpc,=HandlerBDMA0/**/ldrpc,=HandlerBDMA1/**/ldrpc,=HandlerWDT/**/ldrpc,=HandlerUERR01/*mGB0x54bbbldrpc,=HandlerTIMER0/*mGC0x60*/ldrpc,=HandlerTIMER1/**/ldrpc,=HandlerTIMER2/**/ldrpc,=HandlerTIMER3/**/ldrpc,=HandlerTIMER4/*ldrpc,=HandlerTIMER5/*mGC0x74*/b.bldrpc,=HandlerURXD0/*mGD0x80*/ldrpc,=HandlerURXD1/**/ldrpc,=HandlerIIC/**/ldrpc,=HandlerSIO/**/ldrpc,=HandlerUTXD0/*ldrpc,=HandlerUTXD1/*mGD0x94*/b.bldrpc,=HandlerRTC/*mGKA0xa0*/b./**/b./**/b./**/b./*b./*mGKA0xb4*/b.bldrpc,=HandlerADC/*mGKB0xc0中斷控制寄存注意:FIQ模式不支持向量中斷模式。從表中可以看出,INTCON寄存器中位[0]----為FIQ中斷使能位,寫入0就使能FIQ中斷;位[1]----為IRQ中斷使能位,寫入0就使能IRQ位[2]IRQ中斷為向量中斷模式(V=0)還是普通模式(V=1)INTPND261I_ISPCF_ISPC1的如果有幾個中斷源同時發出中斷請求,那么不管它們有沒有被,它們相應的掛起位都會置1。INTMOD261時,ARM7TDMIFIQ0IRQ中斷寄存器在中斷寄存器INTMSK中,除了全位“globalmask”外,其余的26位都分別對應個中斷源。當位為1時,對應的中斷被;當位為0時,該中斷可以正常使用。如果全屏蔽位“globalmask1,則所有的中斷都不執行。如果使用了向量中斷模式,在中斷服務程序中改變了中斷寄存器INTMSK的值,這時并不能相應的中斷過程,因為該中斷在中斷寄存器之前已經被中斷掛起寄存器INTPND鎖定了。要(INTPNDIRQS3C44B0X5個單元,14個從單元。每個從優先級產生單642個中斷源。4個可編程優先級中斷源(sGn)2個固定優先級中斷源(kn4個中斷I_PSLV26個中斷源中的優先級最低。主單元可以通過I_PMST422INT_RTCINT_ADC26IRQ/FIQ中斷掛起寄存器(INTPND4-5EXINT6EXINT7。中斷的產生分別來至按鈕SB2SB3,當按鈕按下時,EXINT6EXINT7CPU發出中斷請求。當CPULED1LED2的顯示功能。從前面介紹的中斷源部分我們了解到,EXINT6EXINT7CPU只能受理其中一個中斷,SB2SB3是沒用的,CPUEXINT6中斷前是不會受理來EXINT7的中斷,大家可以在實驗中留意一下這個情況。84.64-5五、Embest仿真器連接目標板,使用EmbestEduKit-III實驗板附帶的串口線,連接實驗板上的UART0和PC機的串口。在PC機上運行windows自帶的超級終端串口通信程序(波特率 、位停止位、無1)拷貝光盤CD1\Software\EduKit44b0文件夾到EmbestIDE\Examples\Samsung\使用EmbestIDE通過EmbestJTAG仿真器連接實驗板,打開實驗例 下的int_test.pjf例程,編譯工程點擊IDE的Debug菜單,選擇RemoteConnect項或F8鍵,連接目標板點擊IDE的Debug菜單,選擇Download調試代碼到目標系統的RAM中打開View菜單>DebugWindows>Register寄存器觀察窗口(快捷鍵Alt+5),在寄存器觀察窗口下面選擇寄存器(Peripheral),將INTERRUPT中斷寄存器組展開,重點觀察INTPND和I_ISPR寄存器值的變化,如下圖所示:圖4-6Embest 在工程管理窗口中雙擊int_test.cuart_printf("Pressbuttons\n");”以及“if(f_ucIntNesting)”設置斷點后,點擊DebugGoF5使用PC察圖4-6斷控制寄存器的值,即中斷配置情況;再次點擊DebugGoF5SB2SB3后,程序停留到中斷服務程序的斷點,再次觀察圖4-6斷控制寄存器的值,雙擊INTPNDI_ISPR21]位值在程序運行前后的變化(提示:;點擊DebugStepoverF10程序狀態寄存器的變化(提示:CPSR在返回時恢復中斷產生前的值;繼續單步執行程序,從中斷返回后,程序會判斷被按下的按鍵點亮相應的LED:按下SB2點亮LED1或按下SB3點亮結合實驗內容和實驗原理部分,掌握ARM處理器中斷操作過程,如中斷使能、設置中斷觸發方式和中斷源識別等,重點理解ARM處理器的中斷響應及中斷處理的過程。在PC1SB2或再按下另一個按鈕(在中斷響應后到點亮LED1之間),將會報告當前= ;從而全部采用Fallingedgemode。之然后switch語句,對9個N的值分類,并利用for循環設wiccaenprn不大,示例程序實現的功能,在按照書本介紹的步驟對示例程序進行分析后做一些修改即可完成實驗#include"44blib.h"#include"44b.h"#include"def.h"voidinit_int(void);voidint_test(void);voidint4567_isr(void);// ((interruptunsignedcharf_ucIntNesting=0; //Interruptnestingcountunsignedcharf_ucWhichInt =0; //interruptsourcesymbolvoid{//interrupt =0x3ffffff; //clearinterruptpendingregisterrEXTINTPND=0xf; //clearEXTINTPNDregister = //allforIRQ =0x5; //nonVectoredmode,IRQdisable,FIQdisable =~(BIT_GLOBAL|BIT_EINT4567);//setEINTinterrupthandlerpISR_EINT4567=(int)int4567_isr;//PORTG =// =//pulluprEXTINT=rEXTINT|rI_ISPC ;//EINT4567fallingedge}rEXTINTPND=//clearEXTINTPNDvoid{unsignedintinti,j;charn;rINTMSK=rINTMSK| //disableEINT2//useruart_printf("PleaseEnterthenumber"n=1-//savethecurrentsettingsofPortGunSaveG=unSavePG= = =//rEXTINT=;//Fallingedge{casecase'2':case'3':case'4':case'5':case'6':casecase'8':case'9':rPCONG=unSaveG;rPUPG=unSavePG;}uart_printf("Pressthebuttonsuart_printf("pushbuttonsmayhaveglitchnoiseproblem\n");rINTMSK=~(BIT_GLOBAL|BIT_EINT4567); //waitingforthef_ucIntNesting= //Allowto{caseuart_printf("EINT4hadbeenoccured...\n");caseuart_printf("EINT5hadbeencase //SB2---flashuart_printf("EINT6hadbeenoccured...LED1(D1204)//fleshLED1case //SB3---flashuart_printf("EINT7hadbeenoccured...LED2(D1205)on\n");//fleshLED2 //10000x100uscaseuart_printf("Theexterninterrupthadbeenoccured(1levelmode)\n");defaultuart_printf("Error!\n");}//

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論