0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Cortex M架構(gòu)與Cortex A架構(gòu)中斷系統(tǒng)的區(qū)別詳解

sanyue7758 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-03-30 10:07 ? 次閱讀

Cortex M架構(gòu),典型就是STM32系列,比如STM32F103(Cortex M3)。

Cortex A架構(gòu),可以細(xì)分為Cortex A7,Cortex A8,Cortex A9,Cortex A15等,比如NXP的IMX6系列,TI的AM335X系列等。

Cortex M主要用在微控制器領(lǐng)域,Cortex R主要用在對實(shí)時(shí)性要求比較高的領(lǐng)域,Cortex A主要用在高端應(yīng)用領(lǐng)域。

cd877240-ce58-11ed-bfe3-dac502259ad0.png

Cortex M架構(gòu)

在Cortex M架構(gòu)中,比如STM32F103,中斷向量表是寫在啟動(dòng)文件當(dāng)中,一般為startup_stm32f10x_hd.s或者startup_stm32f10x_md.s中,.s結(jié)尾為匯編文件,這個(gè)匯編語言寫的啟動(dòng)文件的作用,是在板子上電后為C語言代碼的運(yùn)行做好初始化工作,比如設(shè)置堆棧大小,設(shè)置中斷向量表等,然后再跳轉(zhuǎn)到main函數(shù)去執(zhí)行你的C代碼。文件內(nèi)容如下(部分省略):

設(shè)置棧大小

Stack_SizeEQU0x00000400

設(shè)置堆大小

Heap_SizeEQU0x00000200

; Vector Table Mapped to Address 0 at Reset后面很多 DCD 的就是STM32的中斷向量表,系統(tǒng)所有可用的中斷都寫在這里,包括外部中斷、定時(shí)器中斷、DMA中斷、IIC中斷、串口中斷等。

Stack_SizeEQU0x00000400

AREASTACK,NOINIT,READWRITE,ALIGN=3
Stack_MemSPACEStack_Size
__initial_sp

;HeapConfiguration
;HeapSize(inBytes)<0x0-0xFFFFFFFF:8>
;

Heap_SizeEQU0x00000200

AREAHEAP,NOINIT,READWRITE,ALIGN=3
__heap_base
Heap_MemSPACEHeap_Size
__heap_limit

PRESERVE8
THUMB


;VectorTableMappedtoAddress0atReset
AREARESET,DATA,READONLY
EXPORT__Vectors
EXPORT__Vectors_End
EXPORT__Vectors_Size

__VectorsDCD__initial_sp;TopofStack
DCDReset_Handler;ResetHandler
DCDNMI_Handler;NMIHandler
DCDHardFault_Handler;HardFaultHandler
DCDMemManage_Handler;MPUFaultHandler
DCDBusFault_Handler;BusFaultHandler
DCDUsageFault_Handler;UsageFaultHandler
DCD0;Reserved
DCD0;Reserved
DCD0;Reserved
DCD0;Reserved
DCDSVC_Handler;SVCallHandler
DCDDebugMon_Handler;DebugMonitorHandler
DCD0;Reserved
DCDPendSV_Handler;PendSVHandler
DCDSysTick_Handler;SysTickHandler

;ExternalInterrupts
DCDWWDG_IRQHandler;WindowWatchdog
DCDPVD_IRQHandler;PVDthroughEXTILinedetect
DCDTAMPER_IRQHandler;Tamper
DCDRTC_IRQHandler;RTC
DCDFLASH_IRQHandler;Flash
DCDRCC_IRQHandler;RCC
DCDEXTI0_IRQHandler;EXTILine0
DCDEXTI1_IRQHandler;EXTILine1
DCDEXTI2_IRQHandler;EXTILine2
DCDEXTI3_IRQHandler;EXTILine3
DCDEXTI4_IRQHandler;EXTILine4
DCDDMA1_Channel1_IRQHandler;DMA1Channel1
DCDDMA1_Channel2_IRQHandler;DMA1Channel2
DCDDMA1_Channel3_IRQHandler;DMA1Channel3
DCDDMA1_Channel4_IRQHandler;DMA1Channel4
DCDDMA1_Channel5_IRQHandler;DMA1Channel5
DCDDMA1_Channel6_IRQHandler;DMA1Channel6
DCDDMA1_Channel7_IRQHandler;DMA1Channel7
DCDADC1_2_IRQHandler;ADC1&ADC2
DCDUSB_HP_CAN1_TX_IRQHandler;USBHighPriorityorCAN1TX
DCDUSB_LP_CAN1_RX0_IRQHandler;USBLowPriorityorCAN1RX0
DCDCAN1_RX1_IRQHandler;CAN1RX1
DCDCAN1_SCE_IRQHandler;CAN1SCE
DCDEXTI9_5_IRQHandler;EXTILine9..5
DCDTIM1_BRK_IRQHandler;TIM1Break
DCDTIM1_UP_IRQHandler;TIM1Update
DCDTIM1_TRG_COM_IRQHandler;TIM1TriggerandCommutation
DCDTIM1_CC_IRQHandler;TIM1CaptureCompare
DCDTIM2_IRQHandler;TIM2
DCDTIM3_IRQHandler;TIM3
DCDTIM4_IRQHandler;TIM4
DCDI2C1_EV_IRQHandler;I2C1Event
DCDI2C1_ER_IRQHandler;I2C1Error
DCDI2C2_EV_IRQHandler;I2C2Event
DCDI2C2_ER_IRQHandler;I2C2Error
DCDSPI1_IRQHandler;SPI1
DCDSPI2_IRQHandler;SPI2
DCDUSART1_IRQHandler;USART1
DCDUSART2_IRQHandler;USART2
DCDUSART3_IRQHandler;USART3
DCDEXTI15_10_IRQHandler;EXTILine15..10
DCDRTCAlarm_IRQHandler;RTCAlarmthroughEXTILine
DCDUSBWakeUp_IRQHandler;USBWakeupfromsuspend
DCDTIM8_BRK_IRQHandler;TIM8Break
DCDTIM8_UP_IRQHandler;TIM8Update
DCDTIM8_TRG_COM_IRQHandler;TIM8TriggerandCommutation
DCDTIM8_CC_IRQHandler;TIM8CaptureCompare
DCDADC3_IRQHandler;ADC3
DCDFSMC_IRQHandler;FSMC
DCDSDIO_IRQHandler;SDIO
DCDTIM5_IRQHandler;TIM5
DCDSPI3_IRQHandler;SPI3
DCDUART4_IRQHandler;UART4
DCDUART5_IRQHandler;UART5
DCDTIM6_IRQHandler;TIM6
DCDTIM7_IRQHandler;TIM7
DCDDMA2_Channel1_IRQHandler;DMA2Channel1
DCDDMA2_Channel2_IRQHandler;DMA2Channel2
DCDDMA2_Channel3_IRQHandler;DMA2Channel3
DCDDMA2_Channel4_5_IRQHandler;DMA2Channel4&Channel5
__Vectors_End

__Vectors_SizeEQU__Vectors_End-__Vectors

AREA|.text|,CODE,READONLY

其中“__initial_sp”就是第一條中斷向量,存放的是棧頂指針,接下來是第 2 行復(fù)位中斷復(fù)位函數(shù)Reset_Handler 的入口地址,依次類推,直到最后一個(gè)中斷服務(wù)函數(shù)DMA2_Channel4_5_IRQHandler 的入口地址,這樣 STM32F103 的中斷向量表就建好了。

中斷使用方法:

1、配置中斷向量表(ST提供)。
2、配置NVIC(內(nèi)嵌向量中斷控制器)。
3、中斷使能。
4、中斷服務(wù)函數(shù)。

先配置好中斷向量表(自動(dòng)),然后配置一下IO口,配置NVIC來管理中斷,使能中斷,最后編寫中斷服務(wù)函數(shù),中斷服務(wù)函數(shù)里是我們真正想做的事情。

這個(gè)思路也適合于Cortex A架構(gòu),只是中斷系統(tǒng)不同,中斷管理器也不同,STM32中的中斷管理器是NVIC,Cortex A架構(gòu)的中斷管理器是GIC控制器。GIC 是 ARM 公司給 Cortex-A/R 內(nèi)核提供的一個(gè)中斷控制器。

Cortex A架構(gòu)

下表為Cortex A架構(gòu)中斷向量表,這個(gè)表也是寫在.s結(jié)尾的啟動(dòng)文件當(dāng)中,為C語言代碼的運(yùn)行提供前期的初始化工作,只有做好了初始化,你的C語言代碼才會(huì)運(yùn)行,啟動(dòng)文件中做好初始化以后,會(huì)跳轉(zhuǎn)到你的main函數(shù)。

可以發(fā)現(xiàn)比STM32的中斷少了很多,只有八個(gè)中斷,還有一個(gè)未使用。其中我們最常用的中斷是復(fù)位中斷和 IRQ 中斷。

cdbabc86-ce58-11ed-bfe3-dac502259ad0.png

實(shí)際上Cortex A架構(gòu)是不可能只有這么少的中斷,Cortex-A 內(nèi)核 CPU 的所有外部中斷都屬于IQR 中斷,當(dāng)任意一個(gè)外部中斷發(fā)生的時(shí)候都會(huì)觸發(fā) IRQ 中斷。

在 IRQ 中斷服務(wù)函數(shù)里面就可以讀取指定的寄存器來判斷發(fā)生的具體是什么中斷,進(jìn)而根據(jù)具體的中斷做出相應(yīng)的處理,如下圖:

ce1f7612-ce58-11ed-bfe3-dac502259ad0.png

中斷解釋:

1、復(fù)位中斷(Rest),CPU 復(fù)位以后就會(huì)進(jìn)入復(fù)位中斷,我們可以在復(fù)位中斷服務(wù)函數(shù)里面做一些初始化工作,比如初始化 SP 指針、DDR 等等。

2、未定義指令中斷(Undefined Instruction),如果指令不能識別的話就會(huì)產(chǎn)生此中斷。

3、軟中斷(Software Interrupt,SWI),由 SWI 指令引起的中斷,Linux 的系統(tǒng)調(diào)用會(huì)用 SWI指令來引起軟中斷,通過軟中斷來陷入到內(nèi)核空間。

4、指令預(yù)取中止中斷(Prefetch Abort),預(yù)取指令的出錯(cuò)的時(shí)候會(huì)產(chǎn)生此中斷。

5、數(shù)據(jù)訪問中止中斷(Data Abort),訪問數(shù)據(jù)出錯(cuò)的時(shí)候會(huì)產(chǎn)生此中斷。

6、IRQ 中斷(IRQ Interrupt),外部中斷,芯片內(nèi)部的外設(shè)中斷都會(huì)引起此中斷的發(fā)生。

7、FIQ 中斷(FIQ Interrupt),快速中斷,如果需要快速處理中斷的話就可以使用此中。

存放地址

中斷向量表都是鏈接到代碼的最前面,比如一般 ARM 處理器都是從地址 0X0000 0000 開始執(zhí)行指令的,那么中斷向量表就是從0X0000 0000 開始存放的。

在STM32中,一般代碼是下載到 0X0800 0000開始的存儲(chǔ)區(qū)域中。因此中斷向量表是存放到 0X0800 0000 地址處的,而不是 0X00000000。這種是通過中斷向量表偏移實(shí)現(xiàn)的。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7646

    瀏覽量

    151949
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9164

    瀏覽量

    368790
  • STM32
    +關(guān)注

    關(guān)注

    2271

    文章

    10923

    瀏覽量

    357219
  • 中斷系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    96

    瀏覽量

    61044
  • STM32F103
    +關(guān)注

    關(guān)注

    33

    文章

    479

    瀏覽量

    63821

原文標(biāo)題:Cortex M架構(gòu)與Cortex A架構(gòu)中斷系統(tǒng)的區(qū)別

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    【圖書分享】《ARM Cortex-M3應(yīng)用開發(fā)實(shí)例詳解

    3系列,通過大量工程案例,系統(tǒng)深入地介紹了ARM Cortex-M3基礎(chǔ)應(yīng)用與綜合開發(fā)的流程、方法和技巧。全書共計(jì)17章,第1、2章簡要介紹了Cortex-M3架構(gòu)及指令
    發(fā)表于 03-13 11:06

    arm架構(gòu)cortex架構(gòu)

    大體上分為三種類別:● Cortex-A—面向性能密集型系統(tǒng)的應(yīng)用處理器內(nèi)核● Cortex-R—面向?qū)崟r(shí)應(yīng)用的高性能內(nèi)核● Cortex-M—面向各類嵌入式應(yīng)用的微控制器內(nèi)核
    發(fā)表于 07-27 07:02

    Cortex-M處理器采用的架構(gòu)是什么

    一、選擇題 1.Cortex-M處理器采用的架構(gòu)是(D)(A)v4T(B)v5TE(C)v6 (D)v72.NVIC可用來表示優(yōu)先權(quán)等級的位數(shù)可配置為是(D)(A)2(B)4 (C)6
    發(fā)表于 08-05 06:35

    cortex-m3/cortex-m4/cortex-a8的區(qū)別是什么?

    cortex-m3/cortex-m4/cortex-a8的區(qū)別是什么?
    發(fā)表于 10-22 06:54

    cortex-m下各種微架構(gòu)區(qū)別是什么?

    cortex-m單片機(jī)在arm產(chǎn)品中的位置是哪里?cortex-m 單片機(jī)的類別有哪些?cortex-m下各種微架構(gòu)區(qū)別是什么?
    發(fā)表于 11-04 06:00

    ARM Cortex M架構(gòu)的基本初始化過程是怎樣的?

    ARM Cortex M架構(gòu)的基本初始化過程是怎樣的?
    發(fā)表于 11-30 08:03

    Cortex-A8與STM32有哪些區(qū)別

    3與Cortex-M4架構(gòu)MCU(單片機(jī))最為著稱。2.Cortex-A8ARM Cortex?-A8處理器基于 ARMv7 體系結(jié)構(gòu),處理
    發(fā)表于 01-25 08:28

    介紹Cortex-ACortex-M的TrustZone之間的差異

    設(shè)計(jì)思想上是一樣的,CPU都有兩個(gè)安全狀態(tài),并且系統(tǒng)上的資源劃分為安全資源和非安全資源,在非安全狀態(tài)下只能訪問非安全資源,在安全狀態(tài)下能否訪問所有的資源。但是M系列和A系列架構(gòu)本身就存
    發(fā)表于 07-13 14:45

    深入解析ARM Cortex-A12架構(gòu)

    深入解析ARM Cortex-A12架構(gòu)
    發(fā)表于 01-14 12:31 ?21次下載

    ARM新銳Cortex_A7核心架構(gòu)解析

    ARM新銳Cortex_A7核心架構(gòu)解析
    發(fā)表于 09-28 10:10 ?11次下載
    ARM新銳<b class='flag-5'>Cortex_A</b>7核心<b class='flag-5'>架構(gòu)</b>解析

    關(guān)于ARM cortex-A5架構(gòu)的介紹

    關(guān)于飛思卡爾授權(quán)應(yīng)用ARM cortex-A5架構(gòu)的消息
    的頭像 發(fā)表于 06-26 10:31 ?7557次閱讀

    Cortex-A8與STM32的區(qū)別

    3與Cortex-M4架構(gòu)MCU(單片機(jī))最為著稱。2.Cortex-A8ARM Cortex?-A8處理器基于 ARMv7 體系結(jié)構(gòu),處理
    發(fā)表于 12-01 12:06 ?1次下載
    <b class='flag-5'>Cortex-A</b>8與STM32的<b class='flag-5'>區(qū)別</b>

    基于Cortex M0微型操作系統(tǒng)架構(gòu)及API

    電子發(fā)燒友網(wǎng)站提供《基于Cortex M0微型操作系統(tǒng)架構(gòu)及API.pdf》資料免費(fèi)下載
    發(fā)表于 09-22 09:36 ?4次下載
    基于<b class='flag-5'>Cortex</b> <b class='flag-5'>M</b>0微型操作<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>架構(gòu)</b>及API

    案例分享!IMX8 Cortex-A53與Cortex-M4多核通信開發(fā)詳解

    MX8 Cortex-A53與Cortex-M4多核通信開發(fā)詳解
    的頭像 發(fā)表于 09-10 11:18 ?3456次閱讀
    案例分享!IMX8 <b class='flag-5'>Cortex-A</b>53與<b class='flag-5'>Cortex-M</b>4多核通信開發(fā)<b class='flag-5'>詳解</b>

    Cortex-M 內(nèi)核中斷/異常系統(tǒng)、中斷優(yōu)先級/嵌套 詳解

    Cortex-M 內(nèi)核中斷/異常系統(tǒng)、中斷優(yōu)先級/嵌套 詳解
    的頭像 發(fā)表于 09-27 15:29 ?2414次閱讀
    <b class='flag-5'>Cortex-M</b> 內(nèi)核<b class='flag-5'>中斷</b>/異常<b class='flag-5'>系統(tǒng)</b>、<b class='flag-5'>中斷</b>優(yōu)先級/嵌套 <b class='flag-5'>詳解</b>