自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開(kāi)發(fā) 架構(gòu)
Cortex A架構(gòu),可以細(xì)分為Cortex A7,Cortex A8,Cortex A9,Cortex A15等,比如NXP的IMX6系列,TI的AM335X系列等。Cortex M主要用在微控制器領(lǐng)域,Cortex R主要用在對(duì)實(shí)時(shí)性要求比較高的領(lǐng)域,Cortex A主要用在高端應(yīng)用領(lǐng)域。

[[394267]]

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主要用在對(duì)實(shí)時(shí)性要求比較高的領(lǐng)域,Cortex A主要用在高端應(yīng)用領(lǐng)域。


Cortex M架構(gòu)

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

設(shè)置棧大小

  1. Stack_Size      EQU     0x00000400 

設(shè)置堆大小

  1. Heap_Size       EQU     0x00000200 

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

  1. Stack_Size      EQU     0x00000400 
  2.  
  3.                 AREA    STACK, NOINIT, READWRITE, ALIGN=3 
  4. Stack_Mem       SPACE   Stack_Size 
  5. __initial_sp 
  6.                                                    
  7. ; <h> Heap Configuration 
  8. ;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> 
  9. ; </h> 
  10.  
  11. Heap_Size       EQU     0x00000200 
  12.  
  13.                 AREA    HEAP, NOINIT, READWRITE, ALIGN=3 
  14. __heap_base 
  15. Heap_Mem        SPACE   Heap_Size 
  16. __heap_limit 
  17.  
  18.                 PRESERVE8 
  19.                 THUMB 
  20.  
  21.  
  22. ; Vector Table Mapped to Address 0 at Reset 
  23.                 AREA    RESET, DATA, READONLY 
  24.                 EXPORT  __Vectors 
  25.                 EXPORT  __Vectors_End 
  26.                 EXPORT  __Vectors_Size 
  27.  
  28. __Vectors       DCD     __initial_sp               ; Top of Stack 
  29.                 DCD     Reset_Handler              ; Reset Handler 
  30.                 DCD     NMI_Handler                ; NMI Handler 
  31.                 DCD     HardFault_Handler          ; Hard Fault Handler 
  32.                 DCD     MemManage_Handler          ; MPU Fault Handler 
  33.                 DCD     BusFault_Handler           ; Bus Fault Handler 
  34.                 DCD     UsageFault_Handler         ; Usage Fault Handler 
  35.                 DCD     0                          ; Reserved 
  36.                 DCD     0                          ; Reserved 
  37.                 DCD     0                          ; Reserved 
  38.                 DCD     0                          ; Reserved 
  39.                 DCD     SVC_Handler                ; SVCall Handler 
  40.                 DCD     DebugMon_Handler           ; Debug Monitor Handler 
  41.                 DCD     0                          ; Reserved 
  42.                 DCD     PendSV_Handler             ; PendSV Handler 
  43.                 DCD     SysTick_Handler            ; SysTick Handler 
  44.  
  45.                 ; External Interrupts 
  46.                 DCD     WWDG_IRQHandler            ; Window Watchdog 
  47.                 DCD     PVD_IRQHandler             ; PVD through EXTI Line detect 
  48.                 DCD     TAMPER_IRQHandler          ; Tamper 
  49.                 DCD     RTC_IRQHandler             ; RTC 
  50.                 DCD     FLASH_IRQHandler           ; Flash 
  51.                 DCD     RCC_IRQHandler             ; RCC 
  52.                 DCD     EXTI0_IRQHandler           ; EXTI Line 0 
  53.                 DCD     EXTI1_IRQHandler           ; EXTI Line 1 
  54.                 DCD     EXTI2_IRQHandler           ; EXTI Line 2 
  55.                 DCD     EXTI3_IRQHandler           ; EXTI Line 3 
  56.                 DCD     EXTI4_IRQHandler           ; EXTI Line 4 
  57.                 DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1 
  58.                 DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2 
  59.                 DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3 
  60.                 DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4 
  61.                 DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5 
  62.                 DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6 
  63.                 DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7 
  64.                 DCD     ADC1_2_IRQHandler          ; ADC1 & ADC2 
  65.                 DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX 
  66.                 DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0 
  67.                 DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1 
  68.                 DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE 
  69.                 DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5 
  70.                 DCD     TIM1_BRK_IRQHandler        ; TIM1 Break 
  71.                 DCD     TIM1_UP_IRQHandler         ; TIM1 Update 
  72.                 DCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation 
  73.                 DCD     TIM1_CC_IRQHandler         ; TIM1 Capture Compare 
  74.                 DCD     TIM2_IRQHandler            ; TIM2 
  75.                 DCD     TIM3_IRQHandler            ; TIM3 
  76.                 DCD     TIM4_IRQHandler            ; TIM4 
  77.                 DCD     I2C1_EV_IRQHandler         ; I2C1 Event 
  78.                 DCD     I2C1_ER_IRQHandler         ; I2C1 Error 
  79.                 DCD     I2C2_EV_IRQHandler         ; I2C2 Event 
  80.                 DCD     I2C2_ER_IRQHandler         ; I2C2 Error 
  81.                 DCD     SPI1_IRQHandler            ; SPI1 
  82.                 DCD     SPI2_IRQHandler            ; SPI2 
  83.                 DCD     USART1_IRQHandler          ; USART1 
  84.                 DCD     USART2_IRQHandler          ; USART2 
  85.                 DCD     USART3_IRQHandler          ; USART3 
  86.                 DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10 
  87.                 DCD     RTCAlarm_IRQHandler        ; RTC Alarm through EXTI Line 
  88.                 DCD     USBWakeUp_IRQHandler       ; USB Wakeup from suspend 
  89.                 DCD     TIM8_BRK_IRQHandler        ; TIM8 Break 
  90.                 DCD     TIM8_UP_IRQHandler         ; TIM8 Update 
  91.                 DCD     TIM8_TRG_COM_IRQHandler    ; TIM8 Trigger and Commutation 
  92.                 DCD     TIM8_CC_IRQHandler         ; TIM8 Capture Compare 
  93.                 DCD     ADC3_IRQHandler            ; ADC3 
  94.                 DCD     FSMC_IRQHandler            ; FSMC 
  95.                 DCD     SDIO_IRQHandler            ; SDIO 
  96.                 DCD     TIM5_IRQHandler            ; TIM5 
  97.                 DCD     SPI3_IRQHandler            ; SPI3 
  98.                 DCD     UART4_IRQHandler           ; UART4 
  99.                 DCD     UART5_IRQHandler           ; UART5 
  100.                 DCD     TIM6_IRQHandler            ; TIM6 
  101.                 DCD     TIM7_IRQHandler            ; TIM7 
  102.                 DCD     DMA2_Channel1_IRQHandler   ; DMA2 Channel1 
  103.                 DCD     DMA2_Channel2_IRQHandler   ; DMA2 Channel2 
  104.                 DCD     DMA2_Channel3_IRQHandler   ; DMA2 Channel3 
  105.                 DCD     DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 
  106. __Vectors_End 
  107.  
  108. __Vectors_Size  EQU  __Vectors_End - __Vectors 
  109.  
  110.                 AREA    |.text|, CODE, READONLY 

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

中斷使用方法:

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

先配置好中斷向量表(自動(dòng)),然后配置一下IO口,配置NVIC來(lái)管理中斷,使能中斷,最后編寫(xiě)中斷服務(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è)表也是寫(xiě)在.s結(jié)尾的啟動(dòng)文件當(dāng)中,為C語(yǔ)言代碼的運(yùn)行提供前期的初始化工作,只有做好了初始化,你的C語(yǔ)言代碼才會(huì)運(yùn)行,啟動(dòng)文件中做好初始化以后,會(huì)跳轉(zhuǎn)到你的main函數(shù)。

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


實(shí)際上Cortex A架構(gòu)是不可能只有這么少的中斷,Cortex-A 內(nèi)核 CPU 的所有外部中斷都屬于IQR 中斷,當(dāng)任意一個(gè)外部中斷發(fā)生的時(shí)候都會(huì)觸發(fā) IRQ 中斷。在 IRQ 中斷服務(wù)函數(shù)里面就可以讀取指定的寄存器來(lái)判斷發(fā)生的具體是什么中斷,進(jìn)而根據(jù)具體的中斷做出相應(yīng)的處理,如下圖:

中斷解釋?zhuān)?/h3>

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

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

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

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

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

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

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

存放地址

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

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

 

責(zé)任編輯:姜華 來(lái)源: 嵌入式Linux系統(tǒng)開(kāi)發(fā)
相關(guān)推薦

2024-11-27 08:14:43

2013-08-30 13:27:04

μTraceCortex-M一體化

2021-01-26 06:15:42

Cortex-A9 R嵌入式系統(tǒng)啟動(dòng)代碼

2020-12-17 13:54:49

網(wǎng)絡(luò)安全

2021-01-06 05:42:42

Cortex-A9 R嵌入式系統(tǒng) RTC

2015-02-04 19:13:48

ARMCortex-A 72

2020-12-30 15:17:25

Cortex-A9UARTprintf函數(shù)

2018-03-02 10:19:51

超融合架構(gòu)傳統(tǒng)IT架構(gòu)

2013-09-09 10:09:38

蘋(píng)果Android

2021-01-19 19:32:01

Cortex-A9 R嵌入式系統(tǒng)i2c 外設(shè)

2020-12-22 11:54:42

C語(yǔ)言Cortex-A9LED匯編

2009-05-22 08:22:09

iPhone蘋(píng)果移動(dòng)OS

2021-11-23 23:39:19

微服務(wù)開(kāi)發(fā)架構(gòu)

2021-03-15 14:54:47

編譯器工具代碼

2023-02-22 09:53:55

架構(gòu)芯片

2021-01-08 12:06:59

WDT定時(shí)裝置

2020-10-19 06:52:19

CortexARMv8arm

2021-01-16 11:40:28

ARM嵌入式開(kāi)發(fā)ADC應(yīng)用

2022-07-01 13:42:11

項(xiàng)目管理企業(yè)架構(gòu)IT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)