日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

u-boot分析(四)---设置异常向量表|设置SVC模式

發(fā)布時間:2023/12/18 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 u-boot分析(四)---设置异常向量表|设置SVC模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

u-boot分析(四)

通過前三篇的分析,我們對u-boot已經(jīng)有了整體的認識和掌握,但是我們?nèi)匀粚τ谄洳糠钟布侨绾纬跏蓟牟惶宄?#xff0c;所以接下來幾篇博文我將會對我們在http://www.cnblogs.com/wrjvszq/archive/2015/01/10/4215627.html一文中總結(jié)出的u-boot的工作流程中的重要環(huán)節(jié),結(jié)合文檔加以分析。

今天我們會用到的文檔:

1.??????? ARM Architecture Reference Manualhttp://download.csdn.net/detail/wrjvszq/8354473

?

今天我們將會分析以下內(nèi)容:

1.????? ?設(shè)置中斷向量表

2.????? 設(shè)置CPUSVC模式

?

l? 設(shè)置異常向量表

我們知道arm上電后u-boot干的第一件事就是設(shè)置異常向量表,那么什么是異常?異常又有什么類型呢?等等一大堆問題,下面我們一一解決。

1.?????? 異常

異常其實是中斷的一種,我們的中斷按中斷事件來源進行分類,主要有兩類:

1)??????? 中斷:CPU以外的事件引起的中斷,如I/O中斷、時鐘中斷、控制臺中斷等。????

2)????? 異常:來自CPU的內(nèi)部事件或程序執(zhí)行中的事件引起的過程。如由于CPU本身故障、程序故障和請求系統(tǒng)服務(wù)的指令引起的中斷等。?

2.?????? 異常的類型

根據(jù)《ARM Architecture Reference Manual》手冊中的2.6節(jié)我們找到了如下表格,說明我們的arm處理器支持的異常有七種

我們的arm處理器有兩種入口地址,默認情況下我們選擇Normal address,只有當設(shè)置了協(xié)處理器CP15的相關(guān)寄存器以后,才會啟用High vector address

特別提醒:Data AbortIRQ這兩種異常的入口地址一個為0x00000010一個為0x00000018中間差了4個字節(jié),在arm指令解析一節(jié)中我們提到arm的一條指令為4個字節(jié)剛好差了一條指令,所以我們看到u-boot這樣設(shè)置異常向量表。

1 _start: 2     b reset //0x00000000復位異常 3 ldr pc, _undefined_instruction //0x00000004未定義指令異常 4 ldr pc, _software_interrupt //0x00000008軟中斷異常 5 ldr pc, _prefetch_abort //0x0000000c預取異常 6 ldr pc, _data_abort //0x00000010數(shù)據(jù)異常 7 ldr pc, _not_used//中間多差的一條指令。0x00000014 8 ldr pc, _irq //0x00000018外部中斷異常 9 ldr pc, _fiq //0x0000001c快速中斷異常

3.?????? 異常向量:

當異常發(fā)生的時候,由硬件機制處理器自動的跳到一個固定地址去執(zhí)行相關(guān)異常處理程序,而這個固定地址就是所謂的異常向量。

l? 設(shè)置CPUSVC模式

1.?????? U-boot工作的模式:

由于我們的u-boot需要執(zhí)行更多的指令,訪問更多的寄存器對芯片進行初始化設(shè)置,所以要工作在SVC模式。

注:http://www.cnblogs.com/wrjvszq/p/4199682.html 一文介紹過arm處理器的工作模式

2.?????? 如何設(shè)置CPU工作在SVC模式

同樣在http://www.cnblogs.com/wrjvszq/p/4199682.html 一文中我們介紹過通過CPSR寄存器設(shè)置處理器的工作模式,其實就是設(shè)置CPSR中的M[0-4]0b10011這也就很容易明白u-boot為什么這么設(shè)置了。

?

1 reset: 2 /* 3 * set the cpu to SVC32 mode 4 */ 5 mrs r0, cpsr //導入CPSR寄存器的值到R0 6 bic r0, r0, #0x1f//0b1 1111對M[0-4]清零 7 orr r0, r0, #0xd3//0b1 0011對M[0-4]置1 8 msr cpsr,r0//將R0寫入CPSR中

?

?

今天有點不舒服,所以就到此為止了,明天繼續(xù)分析。

內(nèi)容有點少,大家諒解!!!

?

轉(zhuǎn)載于:https://www.cnblogs.com/wrjvszq/p/4219919.html

總結(jié)

以上是生活随笔為你收集整理的u-boot分析(四)---设置异常向量表|设置SVC模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。