七章中断控制器工作原理程式设计

上传人:仙*** 文档编号:145881709 上传时间:2022-08-30 格式:PPT 页数:37 大小:2.34MB
收藏 版权申诉 举报 下载
七章中断控制器工作原理程式设计_第1页
第1页 / 共37页
七章中断控制器工作原理程式设计_第2页
第2页 / 共37页
七章中断控制器工作原理程式设计_第3页
第3页 / 共37页
资源描述:

《七章中断控制器工作原理程式设计》由会员分享,可在线阅读,更多相关《七章中断控制器工作原理程式设计(37页珍藏版)》请在装配图网上搜索。

1、第七章第七章中斷控制器工作原理與程式設計中斷控制器工作原理與程式設計Ping-Liang Lai(Ping-Liang Lai(賴秉樑賴秉樑)中斷控制器工作原理中斷向量表位址位址例外事件例外事件例外事件模式例外事件模式0 x0000,0000重置管理模式0 x0000,0004未定義指令未定義模式0 x0000,0008軟體中斷管理模式0 x0000,000C終止(預取指令)終止模式0 x0000,0010終止(數據)終止模式0 x0000,0014保留保留0 x0000,0018IRQ IRQ0 x0000,001CFIQFIQ中斷控制器工作原理中斷基本概念與特性S3C4510B支援多達21

2、個中斷源,且中斷請求可由內部功能模組或外部引腳信號產生兩種類型的中斷正常中斷請求(Normal Interrupt Request,IRQ)快速中斷請求(Fast Interrupt Request,FIQ)每個中斷源都有一個中斷懸置位元(Interrupt Pending Bit)由四個暫存器來控制中斷的產生以及中斷進行處理中斷優先順序暫存器(Interrupt Priority Register)中斷模式暫存器(Interrupt Mode Register)中斷懸置暫存器(Interrupt Pending Register)中斷遮罩暫存器(Interrupt Mask Register

3、)中斷控制器工作原理中斷優先順序暫存器(Interrupt Priority Register)每一個中斷源的索引號寫入一個預定義的中斷優先順序暫存器,以獲得特定的優先順序。中斷優先順序預定義為020中斷控制器工作原理中斷優先順序暫存器(Interrupt Priority Register)索引碼索引碼中斷源中斷源20I2C匯流排中斷19乙太網控制器MAC接收中斷18乙太網控制器MAC傳送中斷17乙太網控制器BDMA接收中斷16乙太網控制器BDMA傳送中斷15HDLC通道B接收中斷14HDLC通道B傳送中斷13HDLC通道A接收中斷12HDLC通道A傳送中斷11計時器1中斷10計時器0中斷中

4、斷控制器工作原理中斷優先順序暫存器(Interrupt Priority Register)索引碼索引碼中斷源中斷源9GDMA通道1中斷8GDMA通道0中斷7UART1接收與錯誤中斷6UART1傳送中斷5UART0接收與錯誤中斷4UART0傳送中斷3外部中斷32外部中斷21外部中斷10外部中斷0中斷控制器工作原理中斷模式暫存器(Interrupt Mode Register)INTMOD會透過對每一位元的設定來決定每一種中斷是按照快速中斷(FIQ)還是按照正常中斷(IRQ)加以回應20:0中斷模式位元元,當中斷模式位元元被置為“1”:FIQ方式處理中斷 “0”:IRQ方式處理中斷暫存器暫存器偏

5、移位址偏移位址操作操作功能描述功能描述重置值重置值INTMOD0 x4000讀/寫中斷模式暫存器 0 x0000,0000中斷控制器工作原理中斷懸置暫存器(Interrupt Pending Register)INTPND是用來保持每一個中斷源的中斷懸置位元指示中斷請求是否處於懸置狀態(未處理)。如果中斷懸置位元被設定的話,則中斷懸狀態會一直保存著,直到CPU透過寫入 1 到中斷懸置暫存器的相對應位元來加以清除(注意,是寫 1 來清除,而不是寫 0)當中斷懸置位元被設定時,無論中斷遮罩暫存器是否為 0,中斷服務程式都會開始執行。暫存器暫存器偏移位址偏移位址操作操作功能描述功能描述重置值重置值I

6、NTPND0 x4004讀/寫中斷懸置暫存器 0 x0000,0000中斷控制器工作原理在中斷服務程式中,必須透過向中斷懸置暫存器的相對應位元寫入 1 來清除中斷懸置旗標,以避免由於同一個中斷懸置位元導致了中斷服務程式的反覆執行。中斷控制器工作原理中斷遮罩暫存器(Interrupt Mask Register)當中斷遮罩位元被置為 1 時,對應的中斷請求不能被CPU回應,當中斷遮罩位元為 0 時,中斷請求會被回應全局遮罩位(位元21)為 1時,所有的中斷請求都不能被回應,但只要中斷請求產生,對應的中斷懸置位元會被設定為1,當全域遮罩位元被清除時,中斷請求會得到回應。當有中斷請定產生時,對應的中

7、斷懸置位元會被設定為 1,且在整體中斷遮罩位元和對應的中斷遮罩位元為 0時,中斷請求就會被加以回應暫存器暫存器偏移位址偏移位址操作操作功能描述功能描述重置值重置值INTMSK0 x4008讀/寫中斷遮罩暫存器0 x003F,FFFF計時器工作原理S3C4510B提供兩個32位元的計時器T0和T1可工作在間隔模式(Interval Mode)或觸發模式(Toggle Mode),對應的信號輸出為 TOUT0 和 TOUT1。間隔模式(Interval Mode)當計時器計數溢位時產生一個脈衝輸出,該脈衝輸出產生定時中斷請求,同時從計時器配置輸出接腳(TOUTn)Pin196、Pin199輸出。接

8、腳的輸出脈衝頻率可按下式計算:fOUT=fMCLK/計時器的數據值 ;fMCLK=50MHz觸發模式(Toggle Mode)計時器的輸出電位會持續到下一次的計數溢位時觸發產生翻轉發生計時器計數溢位時,會產生計時器中斷請求,同時由配置接腳輸出電位狀態。計時器輸出接腳輸出工作週期為50的Clock信號。接腳的輸出脈衝頻率可按下式計算:fOUT=fMCLK/(2計時器的數據值)計時器工作原理計時器輸出信號時序計時器工作原理計時器的工作描述當致能計數器時,會向計數器的計數暫存器填入一個資料值,然後計數暫存器開始遞減。當計時器計數溢位時,會產生相對應的中斷請求,同時重新填入原來的資料值並開始加以遞減。

9、在禁用計時器的情況下,可以向計時器的暫存器寫入一個新的資料如果計時器在執行時暫停,且原來的資料值不會被自動重新填入。計時器工作原理通過設置計時器控制暫存器TCON中的控制位元可以禁止或致能T0和T1。計時器模式暫存器(Timer Mode Register,TMOD)TMOD是用於控制兩個32位元計時器的操作。0計時器0致能(TE0)1計時器模式選擇(TMD0)0=禁止計時器0 0=間隔模式1=致能計時器0 1=觸發模式暫存器暫存器偏移位址偏移位址操作操作功能描述功能描述重置值重置值TMOD0 x6000讀/寫計時器模式暫存器0 x0000,0000計時器工作原理2計時器0初始化TOUT0的值

10、(TCLR0)0=在觸發模式下,初始化TOUT0為01=在觸發模式下,初始化TOUT0為1 3計時器1致能(TE1)0=禁用計時器1 1=致能計時器1 4計時器1模式選擇(TMD1)0=間隔模式 1=觸發模式 5計時器1初始化TOUT1的值(TCLR1)0=在觸發模式下初始化TOUT1為0 1=在觸發模式下初始化TOUT1為1 計時器工作原理計時器資料暫存器(Timer Data Registers,TDATA0,TDATA1):其值決定計時器的計數溢位時間的長短。該時間的計算公式為:(計時器資料1)個Clock週期31:0計時器0或計時器1 的數據值 暫存器暫存器偏移位址偏移位址操作操作功能

11、描述功能描述重置值重置值TDATA00 x6004讀/寫計時器0資料暫存器0 x0000,0000TDATA10 x6008讀/寫計時器1資料暫存器0 x0000,0000計時器工作原理計時器計數暫存器(Timer Count Register):保存計時器0或計時器1在正常工作情況下的當前計數值31:0計時器0或計時器1 的計數值 暫存器暫存器偏移位址偏移位址操作操作功能描述功能描述重置值重置值TCNT00 x600C讀/寫計時器0計數暫存器0 xFFFF,FFFFTCNT10 x6010讀/寫計時器1計數暫存器0 xFFFF,FFFF計時器工作原理計時器的工作過程描述當致能計數器時,向計數

12、器的計數暫存器寫入資料值,然後計數暫存器開始遞減。計時器計數溢位產生相應的中斷請求,同時重新裝入原來的資料值並開始遞減。在禁用計時器的情況下,可以向計時器的暫存器寫入一個新的資料。如果計時器在執行時暫停,原來的資料值不會被自動重新裝入。中斷控制器的工作過程描述 當中斷遮罩暫存器的整體遮罩位元與相對應的中斷遮罩位元清除為0時,對應的中斷請求被打開當中斷條件發生時,PC指標會跳躍到例外事件處理程式中,執行相對應的操作程式設計原理一般中斷服務常式可以由三種方式來建立跳躍指令程式計數器傳輸指令使用C語言建立中斷向量表跳躍指令使用跳躍指令設計中斷向量表是比較簡單的方式,但跳躍空間只有32M位內BRese

13、t_HandlerBUnderfined_HandlerBSWI_HandlerBPrefetch_HandlerBAbort_HandlerNOPBIRQ_HandlerBFIQ_Handler程式設計原理程式計數器傳輸指令此一方式主要是將程式計數器直接指到中斷服務常式的位址。LDRPC,Reset_AddrLDRPC,Undefined_AddrLDRPC,SWI_AddrLDRPC,Prefetch_AddrLDRPC,Abort_AddrNOPLDRPC,IRQ_AddrLDRPC,FIQ_AddrReset_AddrDCDReset_HandlerUnderfined_AddrDCD

14、 Undefined_AddrSWI_AddrDCDSWI_AddrPrefetch_AddrDCDPrefetch_AddrAbort_AddrDCDAbort_AddrDCD0IRQ_AddrDCDIRQ_AddrFIQ_AddrDCDFIQ_AddrDCD P4-7程式設計原理使用C語言建立中斷向量表由MAIN主函式中直接加入中斷向量表的建立。使用跳躍指令的方法如下所列:取得中斷服務常式的位址。將這位址減去相對應的向量。為了允許執行預先存取的工作,需先減去0 x8(2個字元組,8個位元組)將所得的結果向右偏移一個字元組,而不是作一個位元組的偏移。測試最高的8位元是已被清除的,如此可確定結

15、果值只有24位元長度(這是因為跳躍指令限制了偏移值)與0 xEA000000(此為跳躍指令的指令運算碼)做OR邏輯運算,以產生在向量中所要放置的數值。unsigned Install_Handle(unsigned routine,unsigned *vector)unsigned vec,oldvect;vec=(routine-(unsigned)vector-0 x8)2);vec=0 xea000000|vec;oldvect=*vector;*vector=vec;return(oldvect);程式設計原理使用程式計數器(PC)傳輸指令的方法如下取得包含例外事件處理器位址(中斷服務

16、常式的位址)的字元組位址。將這位址減去相對向量的位址。允許預先存取,所以需先減去0 x8.檢查結果值是否以12位元來表示。與0 x59FF000做OR邏輯運算(此為程式計數器傳輸指令的指令碼,LDR pc,pc,#offset)來產生替換向量的數值。將中斷服務常式的位址放到儲存的區域。unsigned Install_Handle(unsigned location,unsigned *vector)unsigned vec,oldvect;vec=(unsigned)location-(unsigned)vector-0 x8)|0 xe59ff000;oldvect=*vector;*ve

17、ctor=vec;return(oldvect);實驗內容編寫一個計時器定時中斷程式,並實現用計時器中斷的方式來測試實驗系統中GPIO模組的指示燈作定時的閃爍。在實驗器上,下載並執行計時器中斷程式,並設定如何實現精確的定時。參考程式碼在光碟中INIT.S 程式碼GETmem.aGETcasia1.aIMPORT C_EntryCODE32AREA Init,CODE,READONLYENTRY B Reset_Handler B .B .B .B .NOP B .B .Reset_HandlerLDRr0,=0 x3FF0000 LDRr1,=0 xE7FFFFA0;Start_addr=0

18、x3FE00000STRr1,r0 ;8K SRAM;*;除能所有的中斷;*LDRR2,=0 x3fffffLDRR3,=0 x3ff4008;INTMSK 中斷遮罩暫存器STRR2,R3INIT.S 程式碼;*;對於不同的處理器模式啟始化系統的堆疊;*MRSR0,CPSRBICR0,R0,#MODE_MASKORRR0,R0,#SUP_MODEORRR0,R0,#IBitORRR0,R0,#FBit MSRCPSR_cf,R0;*;計時器設定;*LDRR1,=0 x3FF6000;TMOD 計時器模式暫式器LDRR0,=&01;啟動Timer0STRR0,R1LDRR1,=0 x3FF600

19、4;TDATA0 計時器0資料暫存器LDRR0,=&3FFFFF;計數 0 x400000 次產生中斷STRR0,R1INIT.S 程式碼;*;對所有的IRQ中斷源去掉遮罩;*LDRR1,=INTMOD;設定INTMOD為0,按IRQ方式處理中斷LDRR0,=&0STRR0,R1BLC_EntryB.ENDMAIN.C 程式碼#include s3c4510b_add.hunsigned Install_Handle(unsigned routine,unsigned*vector);void _irq IRQHandler(void);void C_Entry(void)unsigned*i

20、rqvec=(unsigned*)0 x18;/IRQ 例外事件向量IOPMOD=0 xff;/將所有的埠置為輸出模式Install_Handle(unsigned)IRQHandler,irqvec);/設定例外事件入口點INTMSK=0 x1ffbff;/設定INTMSK為0 x1FFbFF值,計時器0中斷遮罩為0while(1);/無窮迴圈,等待Timer中斷產生MAIN.C 程式碼void _irq IRQHandler(void)INTPND=INTPND|0 x400;/清除中斷懸置位元switch(IOPDATA&0 xf0)/閃爍LED,以表示進入中斷服務常式case 0 x0

21、:IOPDATA=0 x10;break;case 0 x10:IOPDATA=0 x20;break;case 0 x20:IOPDATA=0 x40;break;case 0 x40:IOPDATA=0 x80;break;default:IOPDATA=0 x0;break;MAIN.C 程式碼unsigned Install_Handle(unsigned routine,unsigned*vector)unsigned vec,oldvect;vec=(routine-(unsigned)vector-0 x8)2);/vec=0 xea000000|vec;oldvect=*vec

22、tor;*vector=vec;return(oldvect);ARM DEBUGGER載入映像檔案進行除錯ARM DEBUGGER按F10單步執行程式或點工作列上的圖示觀察計時器設定的方式ARM DEBUGGER設定 TMOD(計時器模式暫存器)設定 TDATA0(計時器0資料暫存器)設定 INTMOD(中斷模式暫存器)初始值致能計時器0初始值計數 0 x400000 後產生中斷設定所有的中斷都使用IRQ方式處理中斷ARM DEBUGGER設定 IOPMOD(I/O埠模式暫存器)設定 INTMSK(中斷遮罩暫存器)進入while無窮迴圈,等待中斷產生當中斷產生時,計數器0的INTPND(中斷

23、懸置暫存器)訊號就會設定為1P0P7 為輸出啟動計數器0中斷的回應無中斷產生中斷ARM DEBUGGER設定 Breakpoint,程式中斷點,觀察中斷產生的情況在想要在位置點滑鼠右鍵或按F9設定Breakpoint的位置會有紅色標號點選執行後,程試會在Breakpoint停下GoARM DEBUGGER清除計數器0的中斷懸置暫存器執行完 INTPND=INTPND|0 x400 後,0 x3ff4004記憶體中的值應該為 0 x00000000,但由於計數器速度太快,所以執行完此行,計數器也產生了下一個中斷,所以INTPND 一直保持在0 x00000400ARM DEBUGGER此程式就每隔計數器0,計數0 x400000次後就進入中斷副程式中,執行LED燈號的顯示。HOME WORK修改計數器0資料暫存器,改變LED閃爍速度加入Switch功能,來控制不同的LED閃爍

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!