娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

Tiny4412中斷介紹

  通過幾天裸板驅動開發,今天對ARM的中斷做一些簡單總結,前面我們已經了解了ARM的7種異常模式,中斷是異常模式的一種,在ARM中異常事件發生將會觸發中斷,但是,所有的中斷都不能直接訪問cpu,而是都統一由GIC(中斷管理器)來管理;下面是samsung提供的模式圖:

 

其中GIC管理的中斷有分為:

 

 

  (1)SGI:一個cpu中斷另一個cpu(cpu0 ->cpu1)

  (2)PPI:一個中斷只能中斷一個cpu

  (3)SPI:一個中斷可以中斷多個cpu

  處理一個中斷大致需要三步:

  (1)cpu permit interrupt (cpu允許中斷)

  (2)GIC enable (啟用GIC)

  (3)SET Interrupt source (設置中斷源)

  下面是用SGI實現的一個程序

  頭文件:

 1 #ifndef __BUNFLY_H

 2 #define __BUNFLY_H

 3 

 4 #define ICCICR_CPU0    (*(volatile unsigned long *)0x10480000)

 5 #define ICCPMR_CPU0    (*(volatile unsigned long *)0x10480004)

 6 #define ICDDCR        (*(volatile unsigned long *)0x10490000)

 7 #define ICDIPR2_CPU0    (*(volatile unsigned long *)0x10490408)

 8 #define ICDIPTR2_CPU0    (*(volatile unsigned long *)0x10490808)

 9 #define ICDISER0_CPU0    (*(volatile unsigned long *)0x10490100)

10 #define ICDSGIR        (*(volatile unsigned long *)0x10490f00)

11 #define ICCEOIR_CPU0 (*(volatile unsigned long *)0x10480010)

12 #define ICCIAR_CPU0  (*(volatile unsigned long *)0x1048000c)

13 

14 #endif    //__BUNFLY_H


  1 #include "bunfly.h"

  2 

  3 int (*printf)(char *, ...) = 0xc3e114d8;

  4 void enable_mmu();

  5 void init_table(unsigned long *addr);

  6 void memcpy(unsigned char *dest, unsigned char *src, int len);

  7 extern unsigned long  vector_start;

  8 void do_irq();

  9 

 10 int main()

 11 {    

 12     memcpy(0x70000000, vector_start, 0x1000);    

 13     enable_mmu();

 14 

 15     *(unsigned long *)0x47000000 = do_irq;

 16 

 17     //step 1: set cpu permit interrupt

 18     __asm__ __volatile__(

 19         "mrs r0, cpsrn"

 20         "bic r0,r0, #0x80n"

 21         "msr cpsr, r0n"

 22         :::"r0"

 23     );

 24 

 25     //step 2: set GIC (cgi) enable

 26     ICCICR_CPU0 = 1;//cpu接口控制寄存器(總開關)

 27     ICCPMR_CPU0 =0xff;//中斷總優先級(門檻)

 28     ICDDCR = 1;//本中斷開關

 29     ICDIPR2_CPU0 = (3 << 9);//本中斷優先級

 30     ICDIPTR2_CPU0 = (1 << 9);//目標cpu

 31     ICDISER0_CPU0 = (1 << 9);//啟用本中斷

 32     

 33     //step 3: set interrupt source

 34     ICDSGIR = 9 | (1 << 16);

 35         

 36     printf("welcom backn");

 37 }

 38 

 39 void do_irq()

 40 {

 41     unsigned long ack_id = 0;

 42     unsigned long cpu_id = 0;

 43     unsigned long data = ICCIAR_CPU0;

 44 

 45     /*clean interrupt*/

 46     ack_id = data & 0x3ff;

 47     cpu_id = data & (0x7 << 10);

 48     ICCEOIR_CPU0 = ack_id | cpu_id;

 49 

 50     printf("this is interruptn");

 51     printf("cup_id is %dn", cpu_id >> 10);

 52     printf("ack_id is %dn", ack_id);

 53 

 54 }

 55 

 56 void memcpy(unsigned char *dest, unsigned char *src, int len)

 57 {

 58     int i = 0;

 59     for(i = 0; i < len; i++) {

 60         dest[i] = src[i];

 61     }

 62 }

 63 

 64 void enable_mmu()

 65 {

 66     /*構建表*/

 67     unsigned long addr = 0x50000000;

 68     init_table(addr);

 69     /*打開mmu*/

 70     unsigned long mmu = 0;

 71     mmu = 1 | (1 << 1) | (1 << 3) | (1 << 8);

 72     __asm__ __volatile__ (

 73         "mov r0, #3n"

 74         "MCR p15, 0, r0, c3, c0, 0n"http://設置為管理員

 75         "MCR p15, 0, %0, c2, c0, 0n"http://設置表的地址

 76         "MCR p15, 0, %1, c1, c0, 0n"http://開啟mmu

 77         :    

 78         :    "r" (addr), "r" (mmu)

 79         :

 80     );

 81 

 82 }

 83 

 84 __asm__(

 85 

 86 "vector: n"

 87 "    b resetn"

 88 "    b undn"

 89 "    b swin"

 90 "    b pre_abtn"

 91 "    b data_abtn"

 92 "    .word 0x0n"

 93 "    b irqn"

 94 "    b fiqn"

 95 "reset:n"

 96 "und:n"

 97 "    mov sp, #0x47000000n"

 98 "    stmdb sp!, {r0-r12, lr}n"

 99 

100 "    ldr r3, =0x47000004n"

101 "    ldr r2, [r3]n"

102 "    blx r2n"

103 

104 "    mov sp, #0x47000000n"

105 "    ldmdb sp, {r0-r12, pc}^    n"

106 

107 "swi:n"

108 "    mov sp, #0x47000000n"

109 "    stmdb sp!, {r0-r12, lr}^n"

110 

111 "    mov sp, #0x47000000n"

112 "    ldmdb sp, {r0-r12, pc}^    n"

113 

114 "pre_abt:n"

115 

116 "data_abt:n"

117 "    mov sp, #0x47000000n"

118 "    sub lr, lr, #4n"

119 "    stmdb sp!, {r0-r12, lr}n"

120 

121 "    ldr r3, =0x47000008n"

122 "    ldr r2, [r3]n"

123 "    blx r2n"

124 

125 "    mov sp, #0x47000000n"

126 "    ldmdb sp, {r0-r12, pc}^    n"

127 "irq:n"

128 

129 "    mov sp, #0x47000000n"

130 "    sub lr, lr, #4n"

131 "    stmdb sp!, {r0-r12, lr}n"

132 

133 "    ldr r3, =0x47000000n"

134 "    ldr r2, [r3]n"

135 "    blx r2n"

136 

137 "    mov sp, #0x47000000n"

138 "    ldmdb sp, {r0-r12, pc}^    n"

139 

140 "fiq:n"

141 

142     ".global vector_startn"

143 "vector_start: n"

144     ".word vector n "

145 

146 );

147 

148 void init_table(unsigned long *addr)

149 {

150     unsigned long va = 0;

151     unsigned long phys = 0;

152 

153     //0x40000000-0x80000000 -> 0x40000000-0x80000000    

154     for(va = 0x40000000; va < 0x80000000; va += 0x100000) {

155         phys = va;

156         addr[va >> 20] = phys | 2;

157     }

158 

159     //0x10000000-0x14000000 -> 0x10000000-0x140000000    

160     for(va = 0x10000000; va < 0x14000000; va += 0x100000) {

161         phys = va;

162         addr[va >> 20] = phys | 2;

163     }

164     //0x10000000-0x14000000 -> 0x10000000-0x140000000    

165     for(va = 0x0; va < 0x10000000; va += 0x100000) {

166         phys = va + 0x70000000;

167         addr[va >> 20] = phys | 2;

168     }

169             

170 }

運行結果如下:


關鍵字:Tiny4412  中斷介紹 引用地址:Tiny4412中斷介紹

上一篇:Tiny4412中斷之看門狗
下一篇:Tiny4412模式跳轉

推薦閱讀

握力的強弱通常可以很好地指示人體的健康狀況,它可以衡量個人的認知能力甚至是心臟健康狀況。據外媒報道,IBM(國際商業機器公司)近日開發了一種指甲傳感器,可以檢測人體的握力并使用AI提供見解。該設備使用一系列應變儀來檢測人體抓取物體時指甲的變形,并具有足夠的微妙性來檢測佩戴者打開藥瓶、轉動鑰匙甚至用手指書寫時指甲的微變化。該指甲傳感器最...
據外媒消息報道,特斯拉計劃在今年后季度舉行的“動力總成和電池日”上,推進全新的激進電池設計。據可靠消息透露,特斯拉將制造自己的電池產品線(ref),并且新電池將采用全新的工藝制造。特斯拉購買的海霸公司,用于定制電池制造設備,現在,將其與特斯拉的專利申請相結合,以提供一種全新的電池組制造方法。特斯拉將不再具有兩個單獨的制造過程,其中...
中斷在裸機開發中是非常重要的一項學習內容,之前學習過STM32的中斷實現,是參考正點原子的代碼,通過庫函數的方式實現的,為了進一步深度理解其中的道理,此次通過天嵌的TQ210開發板實現中斷方式。具體功能為,LED正常閃爍,當按鍵被按下的時候,通過串口打印信息,提示按鍵被按下,此過程不影響LED正常閃爍。中斷執行過程具體如下圖:根據示意圖,可知道...
萬用表是無線電愛好者和電子愛好者使用最多的儀器之一。隨著測量科技化的發展,萬用表從早先機械表頭的指針表演進到目前主流的數字萬用表,數字萬用表具有讀數方便、測量分辨率高的特點。數字萬用表電池安裝數字萬用表屬于由電池供電并驅動的電子測量儀器,測量電壓、電流、電阻以及擴展測量溫度、二極管、電容、頻率、三極管放大倍數等都需要電池供電。傳...

史海拾趣

問答坊 | AI 解惑

FPGA中DSP slice

請問 怎樣使用Xilinx virtex系列器件內嵌的dsp slice? 高手指教,謝謝!…

查看全部問答∨

求 PCB LAYOUT 兼職

我在深圳一家公司做PCB設計工程師,已有近6年PCB設計經驗,大學本科。包括通信設備(1萬到2萬PIN的PCB)、     終端設備(無線路由器、貓等)。通信設備一般是8到16層PCB,終端設備一般在2到6層的PCB。        & ...…

查看全部問答∨

電腦會閑出病嗎?

    一位同事出差半個月回到家,電腦卻打不開了,他把電腦搬到我的維修間來檢查,我先把機箱拆開,把板卡和內存條拔出來重新插進去,然后接上電源開機試驗,看到電腦風扇呼呼地轉動起來,顯示屏上出現了正常的自檢畫面,不一會兒,藍天白 ...…

查看全部問答∨

問一下有關千兆以太網 auto-negotiation的問題

系統是X86的,目標機是標準PC板,上面加載的是兩個82546網卡,以前在82541下能夠驅動網卡正常工作,但是現在換成82546卻出現miiPhy方面的問題 目前跟代碼發現是在運行miiAutoNegotiation時出現的問題,想請問各位達人。 關于如何在GMII下配置自動 ...…

查看全部問答∨

求助。。我的SST89E516RD無法在線仿真!

RT 芯片是:SST89E516RD 開發板是從網上買的 軟件是KEIL 3 監控程序也已燒進去了 USB線試過,不行 串口線也試過,不行 COM口換了幾個,不行 波特率換了幾個,不行 開發板驅動重裝了,不行 換同學電腦試了,不行 按網上搜集到的資料把 ...…

查看全部問答∨

請問怎么樣把UCGUI加載到編譯器中呢?請高手指點一下。

我看了一篇《ucos II+ucGUI+s3c2410+LCD+觸摸屏整合》后知道移植UCGUI需要修改的地方,但我不知道怎么樣把UCGUI加載到編譯器中呢?請高手指點一下。 …

查看全部問答∨

最近用PB編譯的時候總是出現nmake.exe出錯

重裝了N次PB,然后又重裝了N次系統,問題依舊。我頂他個肺,快崩潰了。 nmake.exe遇到問題需要關閉  哪位有解決辦法?…

查看全部問答∨

vc++的.dll和 evc的.dll能通用嗎

vc++的.dll里沒有 用xp 庫函數,能否 拿到  evc下直接使用呢? 想省點事 ,這樣可行嗎?…

查看全部問答∨

有網友問模擬時鐘程序

呵呵 不好意思 今天在看到上個月有網友在我的貼里問我的點陣模擬時鐘程序是不是lpc1114,其實呢這個是lpc2148 的 是我畢業論文的一部分,其實的我的論文老師也要我發這個程序,等我整理好了發給我老師的時候如果網友還 有感興趣的,我再順便上傳一 ...…

查看全部問答∨

C語言編程

在用C編程時,如何編寫自己的頭文件???這其中有哪些要求????頭文件的存儲位置有特殊要求嗎???新手求指導…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 灵山县| 阳高县| 兰西县| 厦门市| 额尔古纳市| 陇南市| 岳阳县| 双峰县| 麦盖提县| 天门市| 西宁市| 永新县| 莎车县| 睢宁县| 翁源县| 孝感市| 晋州市| 梨树县| 六安市| 石屏县| 泸州市| 娱乐| 五大连池市| 辛集市| 宜兴市| 新巴尔虎左旗| 孟津县| 揭东县| 普宁市| 茌平县| 南雄市| 长葛市| 蒙城县| 永和县| 定州市| 阳泉市| 固原市| 繁峙县| 建昌县| 平罗县| 泾阳县|