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

X210(s5pv210)中斷系統

發布者:Mingyue1314最新更新時間:2024-12-16 來源: cnblogs關鍵字:s5pv210  中斷系統 手機看文章 掃描二維碼
隨時隨地手機看文章

1.SoC對中斷的實現機制:異常向量表

(1)異常向量表是CPU中某些特定地址的特定定義。當中斷發生的時候,中斷要想辦法通知CPU去處理中斷,怎么做到?這就要靠異常向量表。
(2)在CPU設計時,就事先定義了CPU中一些特定地址作為特定異常的入口地址(譬如定義0x00000000地址為復位異常向量地址,則發生復位異常時CPU會自動跳轉到0x00000000地址去執行指令。又譬如外部中斷對應的異常向量地址為0x30000008,則發生外部中斷后,CPU會硬件自動跳轉到0x30000008地址去執行指令。)如
(3)以上講的是CPU硬件設計時對異常向量表的支持,下來就需要軟件支持了。硬件已經決定了發生什么異常CPU自動跳轉PC到哪個地址去執行,軟件需要做的就是把處理這個異常的代碼的首地址填入這個異常向量地址。

2.異常向量表的編程處理

  1、像內存一樣去訪問異常向量表
  (1)S5PV210的異常向量表可以改變(在CP15協處理器中),以適應操作系統的需求。但是目前系統剛啟動時,此時DRAM尚未初始化,程序都在SRAM中運行。210在iRAM中設置了異常向量表,供暫時性使用。
  (2)查210的iROM application note文檔中iRAM的地址分配,可知,iRAM中的異常向量表起始地址為0xD0037400。知道了異常向量表的起始地址后,各個異常對應的入口就很好知道了。
  2、函數名的實質就是函數的首地址
  (1)函數名在C語言中的理解方法和變量名其實沒區別。編譯器會把這個函數的函數體對應的代碼段和這個函數的函數名(實質是符號)對應起來,等我們在使用這個函數名符號時,編譯器會將函數的函數體實際上做替換。因為函數體都不止4字節,而函數名這個符號只能對應1個地址,所以實際對應的是函數體那一個代碼段的首地址。
  (2)拿C語言中的語法來講,函數名就是這個函數的函數指針。

  總結:當我們將異常處理程序的首地址和異常向量表綁定起來后,異常處理初步階段就完成了。到目前可以保證相應異常發生后,硬件自動跳轉到對應異常向量表入口去執行時,可以執行到我們事先綁定的函數。

3.匯編保存現場和恢復現場

  (1)中斷處理要注意保護現場(中斷從SVC模式來,則保存SVC模式下的必要寄存器的值)和恢復現場(中斷處理完成后,準備返回SVC模式前,要將保存的SVC模式下的必要寄存器的值恢復回去,不然到了SVC模式后寄存器的值亂了,SVC模式下原來正在進行的常規任務就被你搞壞了)
  (2)保存現場包括:第一:設置IRQ棧;第二,保存LR;第三,保存R0~R12
  (3)為什么要保存LR寄存器?要考慮中斷返回的問題。中斷ISR執行完后如何返回SVC模式下去接著執行原來的代碼。中斷返回其實取決于我們進入中斷時如何保存現場。中斷返回時關鍵的2個寄存器就是PC和CPSR。所以我們在進入IRQ模式時,應該將SVC模式下的下一句指令的地址(中斷返回地址)和CPSR保存起來,將來恢復時才可以將中斷返回地址給PC,將保存的CPSR給CPSR。
  (4)中斷返回地址就保存在LR中,而CPSR(自動)保存在(IRQ模式下的)SPSR中

  (5)保護現場關鍵是保存:中斷處理程序的返回地址,r0-r12(cpsr是自動保存的)
  (6)恢復現場主要是恢復:r0-r12,pc,cpsr


#define IRQ_STACK 0xd0037f80

// 在這個匯編函數中,用來做中斷模式下的現場保護和恢復,并且調用真正的中斷處理程序


IRQ_handle:

    // 設置IRQ模式下的棧

    ldr sp, =IRQ_STACK

    // 保存LR(儲存的是pc值)

    // 因為ARM有流水線,所以PC的值會比真正執行的代碼+8,

    sub lr, lr, #4

    // 保存r0-r12和lr到irq模式下的棧上面

    stmfd sp!, {r0-r12, lr}

    // 在此調用真正的isr來處理中斷

    bl irq_handler

    // 處理完成開始恢復現場,其實就是做中斷返回,關鍵是將r0-r12,pc,cpsr一起回復

    ldmfd sp!, {r0-r12, pc}^


4.異常處理的2個階段
  (1)可以將異常處理分為2個階段來理解。
    第一個階段是異常向量表跳轉;
    第二個階段就是進入了真正的異常處理程序irq_handler之后的部分。

  (2)第一個階段之所以能夠進行,主要依賴于CPU設計時提供的異常向量表機制。第一個階段的主要任務是從異常發生到響應異常并且保存/恢復現場、跳轉到真正的異常處理程序處。

  (3)第二個階段的目的是識別多個中斷源中究竟哪一個發生了中斷,然后調用相應的中斷處理程序來處理這個中斷。

5.相關寄存器

VICnINTENABLE         

  負責相應的中斷的使能 

VICnINTENCLEAR

  負責相應的中斷的禁止

VICnINTSELECT

  設置各個中斷的模式為irq還是fiq。一般都設置成irq

VICnFIQSTATUS&

VICnIRQSTATUS

  中斷狀態寄存器,是只讀的。當發生了中斷時,硬件會自動將該寄存器的對應位置為1,表示中斷發生了。軟件在處理中斷第二階段的第一階段,就是靠查詢這個寄存器來得到中斷編號的。

VICnVECTPRIORITY(0~31)

  中斷優先級設置寄存器,設置多個中斷同時發生時先處理誰后處理誰的問題。一般來說高優先級的中斷可以打斷低優先級的中斷,從而嵌套處理中斷。當然了有些硬件/軟件可以設置不支持中斷嵌套。

VICnVECTADDR(0~31)

  VICnVECTADDR0到31這32個寄存器分別用來存放真正的各個中斷對應的isr的函數地址。相當于每一個中斷源都有一個VECTADDR寄存器,程序員在設置中斷的時候,把這個中斷的isr地址直接放入這個中斷對應的VECTADDR寄存器即可。

VICnADDR

  VICnADDR這個寄存器是只需要讀的,它里面的內容是由硬件自動設置的。當發生了相應中斷時,硬件會自動識別中斷編號,并且會自動找到這個中斷的VECTADDR寄存器,然后將其讀出復制到VICnADDR中,供我們使用。這樣的設計避免了軟件查找中斷源和isr,節省了時間,提高了210的中斷響應速度。

5.整個中斷的流程梳理:
  整個中斷的工作分為2部分:
  第一部分是我們為中斷響應而做的預備工作:
  1. 初始化中斷控制器
  2. 綁定寫好的isr到中斷控制器
  3. 相應中斷的所有條件使能
  第二部分是當硬件產生中斷后如何自動執行isr:
  1. 第一步,經過異常向量表跳轉入IRQ/FIQ的入口
  2. 第二步,做中斷現場保護(在start.S中),然后跳入isr_handler
  3. 第三步,在isr_handler中先去搞清楚是哪個VIC中斷了,然后直接去這個VIC的ADDR寄存器中取isr來執行即可。
  4. 第四步,isr執行完,中斷現場恢復,直接返回繼續做常規任務。

中斷設置初始化流程圖

中斷相應流程


關鍵字:s5pv210  中斷系統 引用地址:X210(s5pv210)中斷系統

上一篇:s5pv210 fimc 之 fimc-dev.c
下一篇:X210串口配置與stdio移植

推薦閱讀最新更新時間:2025-04-17 12:15

AVR單片機——中斷系統
中斷的優點 中斷函數只在中斷觸發源觸發的時候才會執行,其他時間不執行. 如果不使用中斷而且如果要根據某個端口的變化而作相應的函數操作,就必須不斷地查詢端口的信號,而中斷不用,只要端口一有變化,就會系統就會自動進入中斷函數, 我覺得這就是中斷的目的,也是優點. 中斷優先級 1) AVR單片機在同一個優先級中,中斷向量入口地址越低,其優先級越高。AVR單片機在響應中斷以后,會禁止系統響應其余中斷。如果程序需要在某個中斷服務程序中響應其它中斷事件,可以在該中斷服務程序中用重新使能全局中斷即可。否則,AVR單片機只有在退出中斷進程時,才重新使能全局中斷。 2) AVR(至少是ATmega16)單片機采用固定的硬件優先
[單片機]
AVR單片機——<font color='red'>中斷系統</font>
為什么要設置中斷系統?各中斷服務程序的入口地址?
為什么要設置中斷系統? 設置中斷系統的目的,是為了使處理機具有對外界異步事件的處理能力。 各中斷服務程序的入口地址是什么? 以下是各中斷服務程序的入口地址: 外部中斷0:0003H 定時/計數器T0:000BH 外部中斷1:0013H 定時/計數器T1:001BH 串行口中斷:0023H
[單片機]
S5PV210之beep驅動從linux2.6.35.7移植到linux3.0.8
beep驅動從linux2.6.35.7內核移植到linux3.0.8,修改的部分為:   '='后面的為修改后的   .ioctl  =  .unlocked_ioctl   static int beep_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)   = static int beep_ioctl(struct file *file, unsigned int cmd, unsigned long arg)   beep_ioctl函數中struct inode *inode去掉,原因是b
[單片機]
S5PV210串口通信編程實戰-2
1、串口Tx、Rx對應的GPIO初始化 給GPA0CON的相應bit位賦值為相應值,用C語言位操作完成。 void uart_init( void ) { //初始化Tx、Rx對應的GPIO引腳 rGPA0CON &= ~( 0xff 0 ); //把寄存器的bit0 ~ bit 7全部清零 rGPA0CON |= 0x00000022; //0b0010, Rx、Tx } 2、UCON、ULCON、UMCON、UFCON等主要控制寄存器 依據上節中分析的值進行依次設置即可 void uart_init( void ) { //初始化Tx、Rx對應的GPIO引腳 rGPA0CON &= ~( 0xff 0 ); //把寄存
[單片機]
<font color='red'>S5PV210</font>串口通信編程實戰-2
ARM芯片學習(S5PV210開發)——GPIO控制LED
1、GPIO介紹 GPIO(general purpose input output):通用輸入輸出。GPIO就是芯片的引腳,是比較特殊的引腳,可以通過代碼來操作,控制引腳的高低電平以及工作模式。與GPIO相對的就是固定功能的引腳,我們不能通過編程來控制其功能,比如芯片的電源引腳、時鐘引腳等,這些引腳的功能在出廠的時候就固定了。 2、S5PV210的GPIO相關寄存器 GPJ0CON, (GPJ0 control)GPJ0控制寄存器,用來配置各引腳的工作模式 GPJ0DAT, (GPJ0 data)當引腳配置為input/output模式時,寄存器的相應位和引腳的電平高低相對應。 GPJ0PUD, (pull up down)
[單片機]
ARM芯片學習(<font color='red'>S5PV210</font>開發)——GPIO控制LED
TQ210 —— s5pv210 Linux內核結構
1、內核的子系統 (1) 系統調用接口SCI(System Call Interface):SCI層為用戶空間提供了一套標準的系統調用函數來訪問Linux內核,搭起了用戶空間到內核空間的橋梁。 (2) 進程管理PM(Process Management):進程作為資源分配的基本單位而存在;進程調度。 (3) 虛擬文件系統VFS(Virtual File System):它是一種用于網絡環境的分布式文件系統,是允許和操作系統使用不同的文件系統實現的接口。 (4) 內存管理MM(Memory Management):段轉換過程是由邏輯地址(或稱為虛擬地址)轉換為線性地址;頁轉換過程則是將線性地址轉換為物理地址。 (5) 網絡協議棧(N
[單片機]
安裝交叉編譯工具鏈
自己動手安裝交叉工具鏈: 1.Windows中裝軟件的特點 Windows中裝軟件使用安裝包,安裝包解壓后有2種情況:一種是一個安裝文件(.exe、.msi),雙擊進行安裝,下一步直到安裝完畢。安裝完畢后會在桌面上生成快捷方式,我們平時使用快捷方式來啟動這些程序;另一種是所謂的綠色軟件、免安裝包,這種不用安裝,直接解壓開里面就.exe可以直接雙擊執行。 2.Linux中裝軟件的特點 linux中安裝軟件比windows中復雜。linux中安裝軟件一般有以下幾種方法: 第一種:在線安裝。譬如ubuntu中使用apt-get install vim來安裝vim軟件。 第二種:自己下載安裝包來安裝。這種方式的缺陷就
[單片機]
SDRAM初始化
SDRAM DRAM0:內存地址范圍:0x20000000~0x3FFFFFFF 對應引腳為Xm1xxxx DRAM1:內存地址范圍:0x40000000~0x7FFFFFFF 對應引腳為Xm2xxxx 整個210最多支持1.5GB,如果給210更多的內存,CPU就無法識別 210最多支持1.5GB內存,但是實際開發板不一定要這么多,譬如x210開發板就只有512MB內存,連接方法是DRAM端口分布256MB,在DRAM1端口中分布了256MB 內存合法地址為:0x20000000~0x2FFFFFFF(256MB)+0x40000000~0x4FFFFFFF(256MB) 譬如地址為0x30004000就是非法地址,使
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 前郭尔| 镇赉县| 文山县| 南木林县| 万山特区| 上虞市| 原平市| 封开县| 福建省| 黄陵县| 高密市| 定结县| 绍兴市| 冕宁县| 大安市| 安岳县| 古田县| 安龙县| 忻州市| 辽阳县| 福鼎市| 石阡县| 清苑县| 宝山区| 淄博市| 万宁市| 普兰店市| 同江市| 嵊州市| 盖州市| 南宫市| 北宁市| 讷河市| 如皋市| 灌云县| 武清区| 库尔勒市| 乌恰县| 临潭县| 双柏县| 万山特区|