arm linux 中斷優先級,ARM中斷處理過程

以s3c2440?ARM9核為例:

一:s3c2440 ARM處理器特性:

1、S3C2440支持60個中斷源,含子中斷源;

2、ARM9采用五級流水線方式;

3、支持外部中斷和內部中斷;

二、s3c2440 支持的寄存器:

2.1 外部中斷寄存器

24個外部中斷占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用這些腳做中斷輸入,則必須配置引腳為中斷,并且不要上拉。具體可參考datesheet數據手冊。

寄存器:

EXTINT0-EXTINT2:分別設置EINT0—EINT7、EINT8—EINT15、EINT16—EINT23的觸發方式(高電平觸發、低電平觸發、下降沿觸發、上升沿觸發)。

EINTFLT0-EINTFLT3:控制濾波時鐘和濾波寬度。

EINTPEND:這個是中斷掛起寄存器,清除時要寫1,后面還有幾個是寫1清除。當一個外部中斷(EINT4-EINT23)發生后,那么相應的位會被置1。為什么沒有EINT0-EINT3,因為它們分別由SRCPND寄存器的后4位控制。

EINTMASK:這個簡單,是屏蔽中斷用的,也就是說位為1時,此次中斷無效。

2.2 內部中斷寄存器

內部中斷有8個寄存器。

寄存器:

SUBSRCPND:當一個中斷發生后,那么相應的位會被置1,表示一個中斷發生了。

INTSUBMSK:與上一個是一樣的,中斷屏蔽寄存器。

SRCPND:當一個中斷發生后,那么相應的位會被置1,表示一個或一類中斷發生了。

INTMSK:用來屏蔽SRCPND寄存器所標識的中斷。但只能屏蔽IRQ中斷,不能屏蔽FIQ中斷。

INTMOD:當INTMOD中某位被設置為1時,它對應的中斷被設為FIQ,CPU將進入快速中斷模式。

PRIORITY:用于設置IRQ中斷的優先級。具體使用方法可參考芯片手冊。

INTPND:中斷優先級仲裁器選出優先級最高中斷后,這個中斷在INTPND寄存器中的相應位被置1,隨后,CPU進入中斷模式處理它。同一時間內,此寄存器只有一位被置1。

INTOFFSET:用來表示INTPND寄存器中哪位被置1了,即記錄INTPND中位[x]為1的位x的值。清除INTPND、SRCPND時自動清除。

三、中斷處理流程

1、中斷控制器匯集各類外設發出的中斷信號,然后通知CPU。

2、CPU保存當前程序的運行環境,然后調用中斷服務程序(ISR),來處理中斷。

3、在ISR中通過讀取外設的相關的寄存器來識別中斷的類型,并進行相應的處理。

4、清除中斷:通過讀寫相關中斷控制寄存器和外設相關寄存器來實現。(注意消除中斷是必要的)

5、恢復被中斷程序的執行環境,繼續執行被中斷的程序。

四、代碼:

main.c

1 intmain()2 {3 ................4 //其他部分初始化

5 button_init();6 init_irq();7 while(1);8 return 0;9 }

interrupt.c

1 /*interrupt registes*/

2 #define SRCPND (volatile unsigned long *)0x4A000000

3 #define INTMOD (volatile unsigned long *)0x4A000004

4 #define INTMSK (volatile unsigned long *)0x4A000008

5 #define PRIORITY (volatile unsigned long *)0x4A00000c

6 #define INTPND (volatile unsigned long *)0x4A000010

7 #define INTOFFSET (volatile unsigned long *)0x4A000014

8 #define SUBSRCPND (volatile unsigned long *)0x4A000018

9 #define INTSUBMSK (volatile unsigned long *)0x4A00001c

10

11 #define EINTMASK (volatile unsigned long *)0x560000a4

12 #define EINTPEND (volatile unsigned long *)0x560000a8

13

14 voidinit_irq()15 {16

17 //對于EINT4,需要在EINTMASK寄存器中使能它

18 *(EINTMASK) &= ~(1<<4);19

20

21 //EINT0、EINT1、EINT2、EINT4_7使能

22 *(INTMSK) &= (~(1<<0)) & (~(1<<1)) & (~(1<<2)) & (~(1<<4));23

24 __asm__(25 /*開中斷*/

26 "mrs r0,cpsr\n"

27 "bic r0, r0, #0x80\n"

28 "msr cpsr_c, r0\n"

29 :30 :31 );32 }33

34 voidhandle_int()35 {36 /*讀取產生中斷的源*/

37 unsigned long value = *(INTOFFSET);38

39 switch(value)40 {41 case 0: //EINT0~K4

42 led_on();43 break;44

45 case 1: //EINT1~K1

46 led_off();47 break;48

49 case 2: //EINT2~K3

50 led_on();51 break;52

53 case 4: //EINT4~K2

54 led_off();55 break;56

57 default:58 break;59 }60

61 /*中斷清除*/

62 if(value == 4)63 *(EINTPEND) = (1 << 4);64 *(SRCPND) = 1 <

start.S

1 irq:

2 sub lr, lr, #4

3 stmfd sp!, {r0-r12, lr} /* 保護現場 */4 bl handle_int5 ldmfd sp!, {r0-r12, pc}^ /* 恢復現場,^表示把spsr恢復到cpsr */

五:部分代碼解釋:

sub lr, lr, #4

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531623.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531623.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

codeforces D. Design Tutorial: Inverse the Problem

題意&#xff1a;給定一個矩陣&#xff0c;表示每兩個節點之間的權值距離&#xff0c;問是否可以對應生成一棵樹&#xff0c; 使得這棵樹中的任意兩點之間的距離和矩陣中的對應兩點的距離相等&#xff01; 思路&#xff1a;我們將給定的矩陣看成是一個圖&#xff0c;a 到 b會有…

linux ssh 遠程會話保存,遠程SSH會話和流程在斷開后運行的5種方法

SSH或安全Shell簡單來說就是一個人可以遠程訪問其他用戶的其他系統&#xff0c;但僅在命令行即非GUI模式的方法。 在更多的技術術語中&#xff0c;當我們ssh到其他用戶在某些其他系統上并在該機器上運行命令時&#xff0c;它實際上創建一個偽終端并將其附加到登錄用戶的登錄she…

java模擬一個簡單的QQ

v 項目源碼https://github.com/hjzgg/java_QQ v 標題效果package testFour;import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.I…

修改Linux啟動后的默認顏色,更改linux目錄的默認顏色(我選擇了Yellow)

在控制臺下&#xff0c;用ls&#xff0c;就會發現&#xff0c;shell將不同類型的文件項目顯示為不同的顏色。者可以提高效率&#xff0c;不用ls -l便能大概的把各個文件的類型情況了解一下。你有沒有想過更改這個著色配置呢&#xff1f;其 實&#xff0c;在/etc下有一個DIR_COL…

AC_Dream 1216 G - Beautiful People

題意&#xff1a;有n個人每人有一個力氣值Si,美麗值Bi&#xff0c;滿足Bi>Bj&&Si>Sj 或者 Bi<Bj&&Si<Sj 的人可以一起參見晚會&#xff0c;問最多有多少人可以一起參見晚會。思路&#xff1a; 我們根據S從小到大將所有人排序&#xff0c;然后看B最…

云主機用linux還是winows,云服務器一般使用什么系統?Linux還是Windows?

云服務器一般使用什么系統?最常用的就是Linux以及Windows系統&#xff0c;兩大系統各有不同優勢&#xff0c;大家選擇上也是存在差異的&#xff0c;接下來跟著小編來了解一下吧。Windows系統&#xff1a;一般情況來說&#xff0c;Windows系統常用的是Server 2003和Server 2008…

c語言程序中return的作用,單片機C語言程序中return dat 什么意思

/* 打開 ISP,IAP 功能 */void ISP_IAP_enable(void){EA 0; /* 關中斷 */ISP_CONTR ISP_CONTR & 0x18; /* 0001,1000 */ISP_CONTR ISP_CONTR | WaitTime; /* 寫入硬件延時 */ISP_CONTR ISP_CONTR | 0x80; /* ISPEN1 */}/* 關閉 ISP,IAP 功能 *…

java中DatagramSocket連續發送多個數據報包時產生丟包現象解決方案

1 try {2 //向指定的ip和端口發送數據~&#xff01;3 //先說明一下數據是誰發送過來的&#xff01;4 byte[] ip InetAddress.getLocalHost().getHostAddress().getBytes();5 …

二級c語言程序設計bug,《C語言及程序設計》實踐項目——發現Bug

返回&#xff1a;賀老師課程教學鏈接【項目1-sin泰勒展式中的錯誤】下面是sin函數的泰勒展式&#xff1a;(注&#xff1a;x取弧度值&#xff0c;而非角度值)編寫了double mysin(double x)用于求sin值&#xff0c;卻“死”在了123上。劇透一下&#xff0c;循環沒有問題(當然問題…

AC_Dream 1224 Robbers(貪心)

題意&#xff1a;n個搶劫犯分別搶到的金錢是k1, k2, k3,...&#xff0c;一共得到的金錢是m&#xff0c; 但是在分錢的時候是按照x1/y, x2/y, x3/y,....的比例進行分配的&#xff01;這樣的話 一些搶劫犯就會覺得不公平&#xff0c;不公平度為|xi/y - ki/m|(浮點運算)&#xff0…

C語言編程出圖形,C語言畫出各種圖形

矩形&#xff1a;(里面是空的)******** ** ** ********Program ended with exit code: 0for (int i 0; i < 5; i ) {for (int j 0; j < 7; j ) {//用條件判斷打出*號if (i 0 || i 4 || j 0 || j 6 ) {printf("*");}else{printf(" "…

AC_Dream 1211 Reactor Cooling

1 /*2 題意&#xff1a;無源無匯&#xff0c;并且每條邊的容量有上下界限的網絡流問題&#xff01;既然無源無匯&#xff0c;那么素有的節點都應該滿足“入流出流”&#xff01;3 輸出每一條邊的流量&#xff0c;使得滿足上面的條件。&#xff08;如果u->v有流…

c語言中const對于define優點,為什么大多數C開發人員使用define而不是const?

這有一個非常可靠的原因&#xff1a;C中的const并不意味著一些常量。 這只是意味著一個variables是只讀的。在編譯器需要一個常量的地方(例如非VLA數組的數組大小)&#xff0c;使用constvariables(如fieldWidth是不可能的。他們不一樣const只是一個限定符&#xff0c;它表示一個…

c語言程序設計期末試卷A,《C語言程序設計》期末試卷(A)..doc

《C語言程序設計》期末試卷(A).2011-12-1學期《C語言程序設計》期末試卷(A)班級____________姓名____________學號________________大題號一二三四總分得 分判卷 /核分人“一、選擇題”使用答題卡選擇。“二、看程序寫運行結果”答題處&#xff1a;題號答 案二、1二、2二、3“三…

codeforces B. Strongly Connected City(dfs水過)

題意&#xff1a;有橫向和縱向的街道&#xff0c;每個街道只有一個方向&#xff0c;垂直的街道相交會產生一個節點&#xff0c;這樣每個節點都有兩個方向&#xff0c; 問是否每一個節點都可以由其他的節點到達.... 思路&#xff1a;規律沒有想到&#xff0c;直接爆搜&#xff0…

c語言數組兩個值交換,如可交換兩個數組中的元素?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓#include #include #include int main(void){int a[]{1,2,3,4,5,6,7,8};int b[]{9,10,11,12,13,15};int lena,lenb,randa,randb,randtimes;int i,temp;srand((unsigned)time(NULL));lena sizeof(a)/sizeof(int);lenb sizeof(b)/s…

Uvaoj 11248 Frequency Hopping(Dinic求最小割)

題意&#xff1a;1到n節點&#xff08;節點之間有一定的容量&#xff09;&#xff0c;需要流過C的流量&#xff0c;問是否可以&#xff1f;如果可以輸出possible&#xff0c; 否則如果可以擴大任意一條邊的容量 可以達到目的&#xff0c;那么輸出possible option&#xff1a;接…

隨機數歸并排序c語言,用C語言實現歸并排序

#include#include#include#include#define random(i) (rand()%i)#define N 12#define INFINITY 99999999//要排序的數存放在a數組匯總&#xff0c;p,q,r是數組下標void Merge(int *a,int p,int q,int r){int n1q-p1;int n2r-q;int *L(int *)malloc(sizeof(int)*n1);int *R(int …

UVAoj 11324 - The Largest Clique(tarjan + dp)

題意&#xff1a;給定一個有向圖&#xff0c;尋找一個點數最大集合&#xff0c;使得這個集合中的任意兩個點 u,v, 都有u->v 或者 v->u 或者u<>v 思路&#xff1a;首先將強連通分量通過tarjan算法求出來&#xff0c;然后進行縮點&#xff0c;也就是每一個縮點 所組成…

android開發藍牙自動連接電腦上,Android藍牙開發之自動連接設備

自動連接使用的是SharedPreferences這個來解決。private void Automaticconnection() {SharedPreferences sp getSharedPreferences("Dizhi", MODE_PRIVATE);String address sp.getString("address", "");if (!address.equals("")) …