91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Cortex M架構與Cortex A架構中斷系統的區別是什么

發布時間:2021-06-16 14:13:36 來源:億速云 閱讀:417 作者:小新 欄目:開發技術

這篇文章主要介紹了Cortex M架構與Cortex A架構中斷系統的區別是什么,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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

Cortex A架構,可以細分為Cortex A7,Cortex A8,Cortex A9,Cortex  A15等,比如NXP的IMX6系列,TI的AM335X系列等。

Cortex M主要用在微控制器領域,Cortex R主要用在對實時性要求比較高的領域,Cortex A主要用在高端應用領域。

Cortex M架構與Cortex A架構中斷系統的區別是什么

Cortex M架構

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

設置棧大小

Stack_Size      EQU     0x00000400

設置堆大小

Heap_Size       EQU     0x00000200

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

Stack_Size      EQU     0x00000400                  AREA    STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem       SPACE   Stack_Size __initial_sp                                                    ; <h> Heap Configuration ;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h>  Heap_Size       EQU     0x00000200                  AREA    HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base Heap_Mem        SPACE   Heap_Size __heap_limit                  PRESERVE8                 THUMB   ; Vector Table Mapped to Address 0 at Reset                 AREA    RESET, DATA, READONLY                 EXPORT  __Vectors                 EXPORT  __Vectors_End                 EXPORT  __Vectors_Size  __Vectors       DCD     __initial_sp               ; Top of Stack                 DCD     Reset_Handler              ; Reset Handler                 DCD     NMI_Handler                ; NMI Handler                 DCD     HardFault_Handler          ; Hard Fault Handler                 DCD     MemManage_Handler          ; MPU Fault Handler                 DCD     BusFault_Handler           ; Bus Fault Handler                 DCD     UsageFault_Handler         ; Usage Fault Handler                 DCD     0                          ; Reserved                 DCD     0                          ; Reserved                 DCD     0                          ; Reserved                 DCD     0                          ; Reserved                 DCD     SVC_Handler                ; SVCall Handler                 DCD     DebugMon_Handler           ; Debug Monitor Handler                 DCD     0                          ; Reserved                 DCD     PendSV_Handler             ; PendSV Handler                 DCD     SysTick_Handler            ; SysTick Handler                  ; External Interrupts                 DCD     WWDG_IRQHandler            ; Window Watchdog                 DCD     PVD_IRQHandler             ; PVD through EXTI Line detect                 DCD     TAMPER_IRQHandler          ; Tamper                 DCD     RTC_IRQHandler             ; RTC                 DCD     FLASH_IRQHandler           ; Flash                 DCD     RCC_IRQHandler             ; RCC                 DCD     EXTI0_IRQHandler           ; EXTI Line 0                 DCD     EXTI1_IRQHandler           ; EXTI Line 1                 DCD     EXTI2_IRQHandler           ; EXTI Line 2                 DCD     EXTI3_IRQHandler           ; EXTI Line 3                 DCD     EXTI4_IRQHandler           ; EXTI Line 4                 DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1                 DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2                 DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3                 DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4                 DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5                 DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6                 DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7                 DCD     ADC1_2_IRQHandler          ; ADC1 & ADC2                 DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX                 DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0                 DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1                 DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE                 DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5                 DCD     TIM1_BRK_IRQHandler        ; TIM1 Break                 DCD     TIM1_UP_IRQHandler         ; TIM1 Update                 DCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation                 DCD     TIM1_CC_IRQHandler         ; TIM1 Capture Compare                 DCD     TIM2_IRQHandler            ; TIM2                 DCD     TIM3_IRQHandler            ; TIM3                 DCD     TIM4_IRQHandler            ; TIM4                 DCD     I2C1_EV_IRQHandler         ; I2C1 Event                 DCD     I2C1_ER_IRQHandler         ; I2C1 Error                 DCD     I2C2_EV_IRQHandler         ; I2C2 Event                 DCD     I2C2_ER_IRQHandler         ; I2C2 Error                 DCD     SPI1_IRQHandler            ; SPI1                 DCD     SPI2_IRQHandler            ; SPI2                 DCD     USART1_IRQHandler          ; USART1                 DCD     USART2_IRQHandler          ; USART2                 DCD     USART3_IRQHandler          ; USART3                 DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10                 DCD     RTCAlarm_IRQHandler        ; RTC Alarm through EXTI Line                 DCD     USBWakeUp_IRQHandler       ; USB Wakeup from suspend                 DCD     TIM8_BRK_IRQHandler        ; TIM8 Break                 DCD     TIM8_UP_IRQHandler         ; TIM8 Update                 DCD     TIM8_TRG_COM_IRQHandler    ; TIM8 Trigger and Commutation                 DCD     TIM8_CC_IRQHandler         ; TIM8 Capture Compare                 DCD     ADC3_IRQHandler            ; ADC3                 DCD     FSMC_IRQHandler            ; FSMC                 DCD     SDIO_IRQHandler            ; SDIO                 DCD     TIM5_IRQHandler            ; TIM5                 DCD     SPI3_IRQHandler            ; SPI3                 DCD     UART4_IRQHandler           ; UART4                 DCD     UART5_IRQHandler           ; UART5                 DCD     TIM6_IRQHandler            ; TIM6                 DCD     TIM7_IRQHandler            ; TIM7                 DCD     DMA2_Channel1_IRQHandler   ; DMA2 Channel1                 DCD     DMA2_Channel2_IRQHandler   ; DMA2 Channel2                 DCD     DMA2_Channel3_IRQHandler   ; DMA2 Channel3                 DCD     DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 __Vectors_End  __Vectors_Size  EQU  __Vectors_End - __Vectors                  AREA    |.text|, CODE, READONLY

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

中斷使用方法:

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

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

這個思路也適合于Cortex A架構,只是中斷系統不同,中斷管理器也不同,STM32中的中斷管理器是NVIC,Cortex  A架構的中斷管理器是GIC控制器。GIC 是 ARM 公司給 Cortex-A/R 內核提供的一個中斷控制器。

Cortex A架構

下表為Cortex  A架構中斷向量表,這個表也是寫在.s結尾的啟動文件當中,為C語言代碼的運行提供前期的初始化工作,只有做好了初始化,你的C語言代碼才會運行,啟動文件中做好初始化以后,會跳轉到你的main函數。

可以發現比STM32的中斷少了很多,只有八個中斷,還有一個未使用。其中我們最常用的中斷是復位中斷和 IRQ 中斷。

Cortex M架構與Cortex A架構中斷系統的區別是什么

實際上Cortex A架構是不可能只有這么少的中斷,Cortex-A 內核 CPU 的所有外部中斷都屬于IQR 中斷,當任意一個外部中斷發生的時候都會觸發  IRQ 中斷。在 IRQ 中斷服務函數里面就可以讀取指定的寄存器來判斷發生的具體是什么中斷,進而根據具體的中斷做出相應的處理,如下圖:

Cortex M架構與Cortex A架構中斷系統的區別是什么

中斷解釋:

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

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

3、軟中斷(Software Interrupt,SWI),由 SWI 指令引起的中斷,Linux 的系統調用會用  SWI指令來引起軟中斷,通過軟中斷來陷入到內核空間。

4、指令預取中止中斷(Prefetch Abort),預取指令的出錯的時候會產生此中斷。

5、數據訪問中止中斷(Data Abort),訪問數據出錯的時候會產生此中斷。

6、IRQ 中斷(IRQ Interrupt),外部中斷,芯片內部的外設中斷都會引起此中斷的發生。

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

存放地址

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

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

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Cortex M架構與Cortex A架構中斷系統的區別是什么”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岗巴县| 凤山市| 天镇县| 武鸣县| 新源县| 石阡县| 西平县| 海淀区| 宾阳县| 连南| 常山县| 迭部县| 进贤县| 会泽县| 青浦区| 卫辉市| 江油市| 万山特区| 丰原市| 佛学| 阳原县| 饶阳县| 塔河县| 上栗县| 新巴尔虎右旗| 肇东市| 原平市| 海晏县| 东莞市| 建宁县| 宣城市| 平顺县| 内江市| 康平县| 伊川县| 临汾市| 凤庆县| 木里| 安徽省| 惠来县| 五家渠市|