要:主要分析了S3C2410芯片及它相應的外部中斷程序。首先介紹了S3C2410的中斷原理,引出相關中斷寄存器,然后介紹了這些寄存器的功能。針對這些寄存器的功能,詳細闡述了如何設置中斷寄存器的模式。在簡要介紹用戶空間和內核空間之后,設計了一個簡單的中斷程序。實驗結果證明,在開發板上中斷程序是快速響應的。
關鍵詞:S3C2410;中斷;ARM;嵌入式系統
Analysis and Design of External Interrupt Program for S3C2410
WANG Qingping
(Hubei University of Education,Wuhan,430205,China)
Abstract:The paper analyses a simple interrupt program according to S3C2410 and discusses the principle of S3C2410 and the relative interrupt register and the function of these registers.It also introduces the method of interrupt registers.The embedded system space includes the kernel space and the user′s space,which is also introduced.To end the presentation,a simple interrupt program test that the interrupt program is immediate response to interrupt.
Keywords:S3C2410;interrupt;ARM;embedded system
1 引 言
在編寫嵌入式系統程序的時候,少不了中斷的使用,中斷程序是做嵌入式開發一個不可或缺的環節。因為系統中,設備是有分工的,不是所有的事情都由CPU處理,而往往分配一些任務給其他資源,在硬件資源處理中,CPU不過問,只是硬件資源處理完任務之后,再向CPU做一個匯報,這就是中斷的產生。
從系統的角度來看,若有中斷,如果要快速地確定中斷源,最好設置足夠多的引腳來判斷中斷的來源,使得每個中斷都單獨使用一條,然后CPU根據相應的引腳來確定采用哪一個中斷服務程序。可是這在現有的條件下是不可能的,這就要求不可能按照系統角度來設計中斷。在S3C2410中采用的是共享和獨占結合的方式。
中斷模式:FIQ和IRQ。中斷有三種類型:常規中斷、外部擴展中斷、子中斷,一共有62號中斷,具體定義見linux/include/asm-arm/arch-s3c2410/irqs.h。對于每一個中斷,根據中斷類型向不同的寄存器填寫數據,具體操作在后面進行詳細論述。如果多個硬件同時產生中斷,就有一個中斷優先,優先級高的先處理,如圖1所示。
2 相關中斷寄存器
在編寫中斷程序中,往往要對一些寄存器進行設置,才能進入服務程序,在此介紹一些編程中可能用到的寄存器,相關定義在文件S3C2410中。
除了0~3號中斷,其他中斷都是與其他中斷共享一個中斷源,因此在這些中斷之間,首先必須通過底層操作,屏蔽或者懸掛一些中斷,然后再在上層中與其他中斷源競爭中斷服務。
PSR:程序狀態寄存器,CPU的程序狀態寄存器,含有I位和F位,如果I位置1,則不允許產生IRQ中斷,如果F位置1,則不允許產生FIQ中斷。