我們按照Tiny210官方的裸板程序來(lái)梳理S5PV210的中斷體系。
關(guān)于 S5PV210 的中斷體系結(jié)構(gòu)
S5PV210 的中斷控制器是由 4 個(gè)向量中斷控制器(VIC)、 ARM PrimeCell PL192 和 4 個(gè)
TrustZone Interrupt Controller (TZIC)共同組成。
S5PV210 共支持 93 個(gè)中斷源(具體見官方手冊(cè))。
首先看 Start.S
.global _start
.global IRQ_handle
_start:
@ 關(guān)閉看門狗
ldr r0, =0xE2700000
mov r1, #0
str r1, [r0]
@ 設(shè)置棧,以便調(diào)用c函數(shù)
ldr sp, =0x40000000
@ 開中斷
mov r0, #0x53
msr CPSR_cxsf, r0
@ 匯編初始化時(shí)鐘
bl clock_init
@ 調(diào)用main函數(shù)
bl main
IRQ_handle:
@ 設(shè)置中斷模式的棧
ldr sp, =0xD0037F80
@ 保存現(xiàn)場(chǎng)
sub lr, lr, #4
stmfd sp!, {r0-r12, lr}
@ 跳轉(zhuǎn)到中斷處理函數(shù)
bl irq_handler
@ 恢復(fù)現(xiàn)場(chǎng)
ldmfd sp!, {r0-r12, pc}^
設(shè)置 CPSR = #0x53,進(jìn)入SVC模式,開IRQ中斷。
接著在main函數(shù)中會(huì)調(diào)用 system_initexception 函數(shù):
void system_initexception( void)
{
// 設(shè)置中斷向量表
pExceptionUNDEF = (unsigned long)exceptionundef;
pExceptionSWI = (unsigned long)exceptionswi;
pExceptionPABORT = (unsigned long)exceptionpabort;
pExceptionDABORT = (unsigned long)exceptiondabort;
pExceptionIRQ = (unsigned long)IRQ_handle;
pExceptionFIQ = (unsigned long)IRQ_handle;
// 初始化中斷控制器
intc_init();
}
void intc_init(void)
{
// 禁止所有中斷
VIC0INTENCLEAR = 0xffffffff;
VIC1INTENCLEAR = 0xffffffff;
VIC2INTENCLEAR = 0xffffffff;
VIC3INTENCLEAR = 0xffffffff;
// 選擇中斷類型為IRQ
VIC0INTSELECT = 0x0;
VIC1INTSELECT = 0x0;
VIC2INTSELECT = 0x0;
VIC3INTSELECT = 0x0;
// 清VICxADDR
VIC0ADDR = 0;
VIC1ADDR = 0;
VIC2ADDR = 0;
VIC3ADDR = 0;
}
然后設(shè)置 VICINTENABLE 使能中斷。
我們只關(guān)心這條就可以:
pExceptionIRQ = (unsigned long)IRQ_handle;
頭文件中這樣定義:
#define _Exception_Vector 0xD0037400
#define pExceptionIRQ ( *((volatile unsigned long *)(_Exception_Vector + 0x18)) )
而S5PV210 的異常向量表的起始地址是0xD0037400,原因見下圖:
這樣,在發(fā)生IRQ中斷時(shí),PC就會(huì)跳轉(zhuǎn)到 pExceptionIRQ 地址處,從而執(zhí)行了 IRQ_handle 函數(shù),接著又執(zhí)行了 irq_handler 函數(shù)。
void irq_handler(void)
{
unsigned long vicaddr[4] = {VIC0ADDR,VIC1ADDR,VIC2ADDR,VIC3ADDR};
int i=0;
void (*isr)(void) = NULL;
for(; i<4; i++)
{
if(intc_getvicirqstatus(i) != 0)
{
isr = (void (*)(void)) vicaddr[i];
break;
}
}
(*isr)();
}
通過(guò)調(diào)用 intc_getvicirqstatus 函數(shù)返回 VICIRQSTATUS 的值就知道當(dāng)前VIC中是否有中斷請(qǐng)求,有的話就會(huì)將isr賦值為 VICADDR 的值,即(服務(wù)函數(shù)的地址),然后調(diào)用服務(wù)程序。
有一點(diǎn)需要說(shuō)明:
當(dāng)有中斷發(fā)生時(shí),硬件上會(huì)將當(dāng)前中斷的中斷處理函數(shù)從寄存器 VICVECTADDR 自動(dòng)拷貝到寄存器
VICADDR 中, 所以我們?cè)?irq_handler()函數(shù)里會(huì)調(diào)用保存在寄存器 VICADDR 里的中斷處理函數(shù)。假如我們要開啟 EXINT0 中斷,那么我們只需將中斷服務(wù)程序的地址賦值給 VIC0VECTADDR0 即可。
上一篇:S5PV210開發(fā)系列四_uCGUI的移植
下一篇:S5PV210啟動(dòng)過(guò)程詳解1
推薦閱讀最新更新時(shí)間:2025-03-26 00:49





- 熱門資源推薦
- 熱門放大器推薦
-
計(jì)算機(jī)體系結(jié)構(gòu)量化研究方法第6版
-
ZIGBEE網(wǎng)絡(luò)原理與應(yīng)用開發(fā)__呂治安編著
-
C語(yǔ)言高級(jí)編程及實(shí)例剖析
-
嵌入式視頻應(yīng)用系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 基于TI DaVinci DM355處理器
-
汽車電工電子技術(shù)基礎(chǔ)實(shí)驗(yàn)實(shí)訓(xùn)指導(dǎo)書
-
硬件十萬(wàn)個(gè)為什么:無(wú)源器件篇
-
計(jì)算機(jī)科學(xué)概論
-
單片機(jī)原理及接口技術(shù)(C51編程)
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 【下載】LAT1466 USB x Device HID Standalone的移植
- 【下載】LAT1488 STM32 USBxDevice MSC standalone移植示例
- 【下載】LAT1482 STM32G0單線串口通信幀錯(cuò)誤問(wèn)題解析
- 【下載】LAT1473 STM32C0 HAL庫(kù)的SPI 驅(qū)動(dòng)導(dǎo)致的Hardfault問(wèn)題分析
- 【下載】LAT1490 兩個(gè)STM32G0 I2C 通信異常的案例分析
- 【下載】LAT1470 SPI傳輸長(zhǎng)度超過(guò)1024時(shí)出現(xiàn)異常的問(wèn)題分析
- 迅為IMX6開發(fā)板Android應(yīng)用-AndroidStudio-calculator測(cè)試
- 玩轉(zhuǎn) ESP32 + Arduino (二十) SIM800L上傳數(shù)據(jù)到OneNet(新版Mqtts)
- 玩轉(zhuǎn) ESP32 + Arduino (二十一) SPIFFS文件系統(tǒng) (已棄用)
- 玩轉(zhuǎn) ESP32 + Arduino (二十二) SIM800L上傳數(shù)據(jù)到阿里IOT(溫濕度和LBS)(NTP對(duì)時(shí))
- 玩轉(zhuǎn) ESP32 + Arduino (二十三) 多文件系統(tǒng)及全局變量
- 玩轉(zhuǎn) ESP32 + Arduino (二十四) SD卡讀寫
- 玩轉(zhuǎn) ESP32 + Arduino (二十五) SSD1306庫(kù)驅(qū)動(dòng)OLED
- 玩轉(zhuǎn) ESP32 + Arduino(二十六) 按鍵控制庫(kù) OneButton
- 玩轉(zhuǎn) ESP32 + Arduino(二十七) ESP對(duì)象
- AM1G-4805DH30Z ±5V 1 瓦 DC-DC 轉(zhuǎn)換器的典型應(yīng)用
- #第七屆立創(chuàng)電賽#功率計(jì)計(jì)
- 用于白光 LED 驅(qū)動(dòng)器的 TB62752BFUG 升壓型 DC/DC 轉(zhuǎn)換器的典型應(yīng)用
- 0.9 至 3.9V DC 至 DC 便攜式單路輸出電源
- 久久開機(jī)棒2.0PCIE/PCI&WiFi/藍(lán)牙版
- EVB9512,使用 LAN9512 高速 USB 2.0 轉(zhuǎn) 10/100 以太網(wǎng)集線器的評(píng)估板 客戶
- AD7809 八通道、10 位并行加載數(shù)模轉(zhuǎn)換器的典型應(yīng)用
- LT8494HFE 1.5MHz、12V 輸出 SEPIC 轉(zhuǎn)換器的典型應(yīng)用電路
- 使用 MaxLinear, Inc 的 SP7606ER-L 的參考設(shè)計(jì)
- KITPF8200FRDMPGM: PF8200/PF8100編程板
- 從實(shí)驗(yàn)室到工業(yè)場(chǎng)景:優(yōu)艾智合密集發(fā)布7款人形機(jī)器人
- 地表最酷人形機(jī)器人,拿下新一輪2億元融資
- 自動(dòng)駕駛警示:沒(méi)有企業(yè)能完全避免自動(dòng)駕駛在復(fù)雜環(huán)境中的失誤
- 高階就高級(jí)嗎?我們到底該如何使用智能駕駛輔助?
- 即將迎來(lái)第三代?嵐圖固態(tài)電池研發(fā)進(jìn)展曝光
- 一文了解2025年3月的固態(tài)電池大事件!
- 傳統(tǒng)鋰電、半固態(tài)、固態(tài)電池終極對(duì)決:誰(shuí)將主宰新能源未來(lái)?
- 國(guó)產(chǎn)智駕迎戰(zhàn)特斯拉FSD,背后AI含量差幾何?
- 左手AI,右手機(jī)器人,半導(dǎo)體巨頭英飛凌的新故事
- 激光雷達(dá)的復(fù)仇
- 月度原創(chuàng)精選評(píng)選2018年2月(總第2期)
- 大聯(lián)大世平集團(tuán)有獎(jiǎng)直播:最新功能安全牽引逆變器方案:助力汽車提升續(xù)航與節(jié)省成本!預(yù)約有禮
- 有獎(jiǎng)直播 11月27日上午10:00 準(zhǔn)時(shí)開啟!富士通賦能汽車電子技術(shù)變革
- 免費(fèi)測(cè)評(píng)TI LAUNCHXL-CC2650
- 【已結(jié)束】浩亭直播【電氣控制柜如何快速低成本地進(jìn)行線纜安裝】
- 【EE團(tuán)】ST最新STM32F429i高性能開發(fā)板重磅登場(chǎng)
- 我給Xilinx資源中心做貢獻(xiàn)
- “ADI實(shí)驗(yàn)室電路技術(shù)中心”落戶EEWORLD!
- 示波器示波管無(wú)光點(diǎn)
- 示波器的測(cè)量方法分析
- 調(diào)整掃描線的方法
- 微型虛擬示波器的設(shè)計(jì)與實(shí)現(xiàn)
- 51單片機(jī)入門教程(3)——數(shù)碼管顯示
- 消息稱無(wú)人機(jī)制造商億航推遲赴美IPO
- 戴姆勒卡車收購(gòu)Torc Robotics 欲實(shí)現(xiàn)L4自動(dòng)駕駛商業(yè)化
- 比亞迪稱推出全球最長(zhǎng)電動(dòng)巴士
- 格力集團(tuán)正在籌劃轉(zhuǎn)讓所持有的部分格力電器股權(quán)
- 2018機(jī)器人行業(yè)遭遇滑鐵盧,機(jī)器人市場(chǎng)是否飽和?
- stm32f207 +dp83848c DMA中斷方式如何使用
- 不能生成version.h和crosstool配置問(wèn)題
- 關(guān)于模擬電子板塊帖子首樓的廣告
- 【設(shè)計(jì)工具】設(shè)計(jì)與驗(yàn)證:Verilog+HDL(清晰帶書簽)
- 【航芯 ACM32F070配套電容觸摸開發(fā)板 評(píng)估UART串口基本功能】
- 請(qǐng)大家?guī)兔ν扑]幾個(gè)可以替代MP2012的DC—DC芯片吧
- 外星人為何對(duì)八卦研究這么廣袤
- 八百里加急!AVR128 USART從機(jī)同步通信 誰(shuí)能幫我指導(dǎo)指導(dǎo)啊
- vxworks中網(wǎng)絡(luò)的問(wèn)題
- 【NUCLEO-F410RB】3.解決無(wú)法燒錄程序問(wèn)題,并驅(qū)動(dòng)lcd12864