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

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

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

深入剖析Cortex-M中斷

嵌入式大雜燴 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-06-10 14:17 ? 次閱讀

嵌入式系統(tǒng)開發(fā)中,中斷是十分重要的知識點,在大部分單片機構(gòu)建的應(yīng)用產(chǎn)品中,基本都是以前后臺方式(大循環(huán)加中斷)的方式來實現(xiàn)功能,在主循環(huán)中處理應(yīng)用,并在中斷中處理外部的觸發(fā)信號,以及對響應(yīng)時間有要求的應(yīng)用,如用于時間相關(guān)處理的定時器中斷,對按鍵響應(yīng)的外部中斷,用于通訊的收發(fā)和異常處理的串口中斷,SPI中斷, 網(wǎng)絡(luò)中斷等。另外,對于大部分RTOS來說,如Cortex-M系統(tǒng)中的systick中斷和PendSV中斷,又是實現(xiàn)基于隊列和任務(wù)調(diào)度算法的RTOS的核心。

1 異常類型

單片機開發(fā)中,對于中斷的表示方法也因為內(nèi)核的不同有很大的差異,如51使用中斷號來表示指定中斷,而ARM Cortex-M內(nèi)核中則使用中斷向量表的方式配合內(nèi)核中的NVIC控制器來實現(xiàn)中斷的處理,不過考慮到目前的主流單片機方案,因此以典型的Cortex-M3內(nèi)核說明單片機中的中斷控制機制, 另外Cortex-M系列中的其它內(nèi)核中的中斷流程也基本一致。

Cortex-M3內(nèi)核支持256個中斷,其中 16個內(nèi)核中斷和240個外部中斷,并具有256級可編程中斷設(shè)置,其中015為系統(tǒng)異常,主要處理系統(tǒng)執(zhí)行中產(chǎn)生的復(fù)位,錯誤,主動觸發(fā)的SVC,異常等,編號16255則是由芯片設(shè)計廠商自定義設(shè)計,用于滿足芯片功能需求的中斷(芯片廠商可以自由定制,不超過最大編號且不重復(fù)即可)。STM32并沒有使用Cortex-M3的全部內(nèi)容,而是使用了一部分。 STM32有84個中斷,包括16個內(nèi)核中斷和68個可屏蔽中斷,具有16級可編程中斷優(yōu)先級 。STM32F103 在內(nèi)核水平上搭載了一個異常響應(yīng)系統(tǒng), 支持為數(shù)眾多的系統(tǒng)異常和外部中斷。其中系統(tǒng)異常有 8 個(如果把 Reset 和 HardFault 也算上的話就是 10 個), 外部中斷有 60個 。除了個別異常的優(yōu)先級被定死外,其它異常的優(yōu)先級都是可編程的。

下面以STM32F1舉例,有關(guān)具體的系統(tǒng)異常和外部中斷可在標準庫文件 stm32f10x.h 這個頭文件查詢到,在 IRQn_Type 這個結(jié)構(gòu)體里面包含了Cortex-M的異常聲明。系統(tǒng)異常清單見下表。

表1 系統(tǒng)異常清單

1686377467770on7xf63u56

表2 STM32F103 外部中斷清單

1686377468419ki0aetj6rn

反映在軟件實現(xiàn)就是在startup_xxx.s啟動文件中定義的中斷向量表,具體結(jié)構(gòu)如下:

1686377469062y9txop95s5

其中External Interrupts就是由廠商定義的中斷類型,另外中斷號為0的位置為空,設(shè)計上就用來存儲堆棧指針。

在芯片在上電的過程中就是執(zhí)行復(fù)位機制根據(jù)SCB->VTOR查詢向量表,找到Reset_Handler入口,并加載__initial_sp到堆棧指針R13中,后續(xù)就可以正常的工作了。

在上述結(jié)構(gòu)中,系統(tǒng)中斷是在內(nèi)核定義時確定的,外部中斷在芯片設(shè)計時被確定,將中斷編號和指定外設(shè)的中斷觸發(fā)信號綁定,就構(gòu)建了完整的中斷向量表。

2 中斷向量表

中斷向量表每一位為一個32bit的地址。每一個地址對應(yīng)一個中斷函數(shù)的地址(第一位除外)。除了第一位以外,所有地址的目標都為尋址寄存器(PC)。當(dāng)相應(yīng)中斷觸發(fā)時,ARM Cortex-M硬件會自動把中斷向量表中相應(yīng)的中斷函數(shù)地址裝載入尋址寄存器(PC)然后開始執(zhí)行中斷函數(shù)。如上所述,前16位為ARM保留的系統(tǒng)中斷,建議讀者熟記。之后的中斷為芯片自定義的外部中斷,可以在使用時查詢手冊或者廠商提供的驅(qū)動程序。表中每個向量大小都是 4 字節(jié),除了第 0 個向量外,其余向量都是函數(shù)地址,這個表集中保存了系統(tǒng)全部的中斷處理函數(shù)(xxxIRQHandler)地址。

對于內(nèi)嵌 Flash 的 MCU 來說,初始中斷向量表一般會被要求固定鏈接到 Flash 起始地址處,因為系統(tǒng)啟動總是從 Flash 起始地址獲取第 0(初始棧)、1個向量(初始PC,復(fù)位函數(shù)ResetHandler)來開始應(yīng)用程序代碼的執(zhí)行。對于一些包含 BootROM 或者沒有內(nèi)部 Flash 的 MCU,初始中斷向量表也許可以放到 Flash 中的其他地址處,這要取決于具體芯片設(shè)計。

當(dāng)應(yīng)用程序執(zhí)行起來后,如果發(fā)生了中斷,系統(tǒng)會根據(jù)發(fā)出請求的外設(shè)中斷號來中斷向量表里找到對應(yīng)的外設(shè)中斷響應(yīng)函數(shù)并去執(zhí)行。Cortex-M 內(nèi)核(除了CM0)模塊 SCB 里有個專門的 VTOR 寄存器用來控制中斷向量表首地址(注意,地址需要 128 字節(jié)對齊),程序運行起來后用戶可以配置 SCB->VTOR 寄存器來重設(shè)中斷向量表地址。

2.1 中斷向量表定義

中斷向量表可以通過匯編語言定義也可以通過C語言定義。以下列出兩種方式的示例程序。

  • C語言定義

這里我們定義了一個數(shù)組,數(shù)組的每一項對應(yīng)相應(yīng)的中斷函數(shù)。如上所述,數(shù)組的第一項為初始棧指針,第二項為入口函數(shù)地址。余下的所有中斷都指向了一個通用中斷函數(shù)。開發(fā)者可以根據(jù)需求替代相應(yīng)的中斷函數(shù)。

上文還提到中斷向量表需要放置于閃存起始地址處。這里__attribute__((section(".vectors")))為gcc的特定語法(如果開發(fā)者使用IAR或者其他編譯器,語法有所不同),目的是告訴編譯器在鏈接所有對象文件(objects)時把_vector[]數(shù)組放在鏈接腳本(linker script)中的.vectors段落(section)。在鏈接腳本中,.vector段落被定義于閃存起始處。

#ifndef ARMV7M_PERIPHERAL_INTERRUPTS
#  error ARMV7M_PERIPHERAL_INTERRUPTS must be defined to the number of I/O interrupts to be supported
#endif

extern void exception_common(void);
unsigned _vectors[] __attribute__((section(".vectors"))) =
{
  /* Initial stack */
  IDLE_STACK,
  /* Reset exception handler */
  (unsigned)&__start,
  /* Vectors 2 - n point directly at the generic handler */
  [2 ... (15 + ARMV7M_PERIPHERAL_INTERRUPTS)] = (unsigned)&exception_common
};
  • Assembly語言定義

這里以STM32Cube生成的startup_stm32f103xe.s為示例。同樣的,匯編程序中也定義了默認中斷函數(shù)。所有中斷也都指向了默認的中斷函數(shù)Default_Handler(默認為無限循環(huán))。

/**
 * @brief  This is the code that gets called when the processor receives an
 *         unexpected interrupt.  This simply enters an infinite loop, preserving
 *         the system state for examination by a debugger.
 *
 * @param  None
 * @retval : None
*/
    .section .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
  b Infinite_Loop
  .size Default_Handler, .-Default_Handler

之后是中斷向量表。這里為了縮減示例代碼長度,略去了中間的中斷函數(shù)定義。注意在初始處 .section .isr_vector,"a",%progbits語句指定了g_pfnVectors在鏈接是需要被放置在isr_vector段落,也就是閃存起始地址處。

/******************************************************************************
*
* The minimal vector table for a Cortex M3.  Note that the proper constructs
* must be placed on this to ensure that it ends up at physical address
* 0x0000.0000.
*
******************************************************************************/
  .section .isr_vector,"a",%progbits
  .type g_pfnVectors, %object
  .size g_pfnVectors, .-g_pfnVectors


g_pfnVectors:

  .word _estack
  .word Reset_Handler
  .word NMI_Handler
  .word HardFault_Handler
  .word MemManage_Handler
  .word BusFault_Handler
  .word UsageFault_Handler
  .word 0
  .word 0
  .word 0
  .word 0
  .word SVC_Handler
  .word DebugMon_Handler
  .word 0
  .word PendSV_Handler
  .word SysTick_Handler
  .word WWDG_IRQHandler
  .word PVD_IRQHandler
……

在中斷向量表的定義之后,程序還將所有函數(shù)定義為.weak。也就是說如果開發(fā)者在其他地方重新定義了同樣名稱的中斷函數(shù),那么默認的中斷函數(shù)實現(xiàn)會被自動覆蓋。weak是GNU GCC編譯器定義的關(guān)鍵詞,如果采用其他編譯器會有對應(yīng)的關(guān)鍵詞。

/*******************************************************************************
*
* Provide weak aliases for each Exception handler to the Default_Handler.
* As they are weak aliases, any function with the same name will override
* this definition.
*
*******************************************************************************/

  .weak NMI_Handler
  .thumb_set NMI_Handler,Default_Handler

  .weak HardFault_Handler
  .thumb_set HardFault_Handler,Default_Handler

  .weak MemManage_Handler
  .thumb_set MemManage_Handler,Default_Handler

  .weak BusFault_Handler
  .thumb_set BusFault_Handler,Default_Handler

  .weak UsageFault_Handler
  .thumb_set UsageFault_Handler,Default_Handler
……

2.2 中斷向量表偏移寄存器

ARM Cortex-M默認的中斷向量表地址位于閃存起始地址處。但是ARM Cortex-M3/4系列提供了一個中斷向量表偏移寄存器(Vector Table Offset Reigster)。系統(tǒng)中中斷向量表的位置是0x00000000加上偏移寄存器的值。上電復(fù)位后這個寄存器值為0,所以中斷向量表默認位于0x00000000閃存起始處。這個寄存器的目的是為了讓開發(fā)者可以重新設(shè)置中斷向量表的位置。

中斷向量表偏移寄存器第29位(bit 29)定義了中斷向量表的位置。0表示位于閃存程序(code)中,1表示位于內(nèi)存中(SRAM)。

中斷向量表寄存器低7位(bit 6~0)為系統(tǒng)預(yù)留位。

偏移地址寄存器值有對齊要求。這個要求和系統(tǒng)中斷數(shù)量或者說中斷向量表長度相關(guān)。偏移地址寄存器值至少是128 (32words = 128bytes)的整數(shù)倍,這也意味著中斷偏移寄存器中地址的低7位始終會是0。如果系統(tǒng)中斷數(shù)量大于16個,則總中斷數(shù)為ARM預(yù)留的16個中斷加上n個系統(tǒng)中斷。如果(n+2)不為2的指數(shù),則向上找到最近的2的指數(shù)m。每個地址為4bytes所以對齊要求為m*4。例如系統(tǒng)有21個中斷,加上ARM預(yù)留的16個中斷位,則中斷向量表有效長度為37words。最近的2的指數(shù)值為64words = 256bytes。所以偏移寄存器的值必須為256的整數(shù)倍。

3 NVIC 簡介

在講如何配置中斷優(yōu)先級之前,我們需要先了解下 NVIC。NVIC 是嵌套向量中斷控制器,控制著整個芯片中斷相關(guān)的功能,它跟內(nèi)核緊密耦合,是內(nèi)核里面的一個外設(shè)。但是各個芯片廠商在設(shè)計芯片的時候會對 Cortex-M內(nèi)核里面的 NVIC 進行裁剪,把不需要的部分去掉,所以說 STM32 的 NVIC 是 Cortex-M的 NVIC 的一個子集。

3.1 NVIC 寄存器簡介

在固件庫中, NVIC 的結(jié)構(gòu)體定義可謂是頗有遠慮,給每個寄存器都預(yù)留了很多位,恐怕為的是日后擴展功能。不過 STM32F103 可用不了這么多,只是用了部分而已,具體使用了多少可參考《Cortex-M3內(nèi)核編程手冊》的NVIC 寄存器映射。

1686377469416cg9c14iupo

[ps] NVIC 結(jié)構(gòu)體定義,來自固件庫頭文件: core_cm3.h。

在配置中斷的時候我們一般只用 ISER、 ICER 和 IP 這三個寄存器, ISER 用來使能中斷, ICER 用來失能中斷,IP 用來設(shè)置中斷優(yōu)先級。

3.2 NVIC 中斷配置固件庫

固件庫文件 core_cm3.h 的最后,還提供了 NVIC 的一些函數(shù),這些函數(shù)遵循 CMSIS 規(guī)則,只要是 Cortex-M3 的處理器都可以使用,具體如下:

表3符合 CMSIS 標準的 NVIC 庫函數(shù)

NVIC庫函數(shù) 描述
void NVIC_EnableIRQ(IRQn_Type IRQn) 使能中斷
void NVIC_DisableIRQ(IRQn_Type IRQn) 失能中斷
void NVIC_SetPendingIRQ(IRQn_Type IRQn) 設(shè)置中斷懸起位
void NVIC_ClearPendingIRQ(IRQn_Type IRQn) 清除中斷懸起位
uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) 獲取懸起中斷編號
void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) 設(shè)置中斷優(yōu)先級
uint32_t NVIC_GetPriority(IRQn_Type IRQn) 獲取中斷優(yōu)先級
void NVIC_SystemReset(void) 系統(tǒng)復(fù)位

這些庫函數(shù)我們在編程的時候用的都比較少,甚至基本都不用。

4 優(yōu)先級的定義

4.1 優(yōu)先級定義

在 NVIC 有一個專門的寄存器:中斷優(yōu)先級寄存器 NVIC_IPRx,用來配置外部中斷的優(yōu)先級, IPR 寬度為 8bit,原則上每個外部中斷可配置的優(yōu)先級為 0~255,數(shù)值越小,優(yōu)先級越高。但是絕大多數(shù) CM3 芯片都會精簡設(shè)計,以致實際上支持的優(yōu)先級數(shù)減少,在F103 中,只使用了高 4bit,如下所示:

表4 STM32F103 使用 4bit 表達優(yōu)先級

1686377469719a199v0rbx7

用于表達優(yōu)先級的這 4bit,又被分組成搶占優(yōu)先級和子優(yōu)先級。如果有多個中斷同時響應(yīng),搶占優(yōu)先級高的就會 搶占 搶占優(yōu)先級低的優(yōu)先得到執(zhí)行,如果搶占優(yōu)先級相同,就比較子優(yōu)先級。如果搶占優(yōu)先級和子優(yōu)先級都相同的話,就比較他們的硬件中斷編號,編號越小,優(yōu)先級越高。

4.2 優(yōu)先級分組

優(yōu)先級的分組由內(nèi)核外設(shè) SCB 的應(yīng)用程序中斷及復(fù)位控制寄存器 AIRCR 的PRIGROUP[10:8]位決定,STM32F103 分為了 5 組,具體如下:主優(yōu)先級=搶占優(yōu)先級。

表5優(yōu)先級分組

1686377469962qaq6biazqu

設(shè)置優(yōu)先級分組可調(diào)用庫函數(shù) NVIC_PriorityGroupConfig()實現(xiàn),有關(guān) NVIC 中斷相關(guān)的庫函數(shù)都在庫文件 misc.c 和 misc.h 中。

/**
  * 配置中斷優(yōu)先級分組:搶占優(yōu)先級和子優(yōu)先級
 * 形參如下:
 * @arg NVIC_PriorityGroup_0: 0bit for 搶占優(yōu)先級
 *                            4 bits for 子優(yōu)先級
 * @arg NVIC_PriorityGroup_1: 1 bit for 搶占優(yōu)先級
 *                            3 bits for 子優(yōu)先級
 * @arg NVIC_PriorityGroup_2: 2 bit for 搶占優(yōu)先級
 *                            2 bits for 子優(yōu)先級
 * @arg NVIC_PriorityGroup_3: 3 bit for 搶占優(yōu)先級
 *                            1 bits for 子優(yōu)先級
 * @arg NVIC_PriorityGroup_4: 4 bit for 搶占優(yōu)先級
 *                            0 bits for 子優(yōu)先級
 * @注意 如果優(yōu)先級分組為 0,則搶占優(yōu)先級就不存在,優(yōu)先級就全部由子優(yōu)先級控制
 */
 void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
 {
     // 設(shè)置優(yōu)先級分組
     SCB- >AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
 }

表6 優(yōu)先級分組真值表

168637747023651nvqpjs0d

5 中斷編程

在配置每個中斷的時候一般有 3 個編程要點:

1、使能外設(shè)某個中斷,這個具體由每個外設(shè)的相關(guān)中斷使能位控制。比如串口有發(fā)送完成中斷,接收完成中斷,這兩個中斷都由串口控制寄存器的相關(guān)中斷使能位控制。

2、初始化 NVIC_InitTypeDef 結(jié)構(gòu)體,配置中斷優(yōu)先級分組,設(shè)置搶占優(yōu)先級和子優(yōu)先級,使能中斷請求。 NVIC_InitTypeDef 結(jié)構(gòu)體在固件庫頭文件 misc.h 中定義。

typedef struct {
    uint8_t NVIC_IRQChannel; // 中斷源
    uint8_t NVIC_IRQChannelPreemptionPriority; // 搶占優(yōu)先級
    uint8_t NVIC_IRQChannelSubPriority; // 子優(yōu)先級
    FunctionalState NVIC_IRQChannelCmd; // 中斷使能或者失能
} NVIC_InitTypeDef;

有關(guān) NVIC 初始化結(jié)構(gòu)體的成員我們一一解釋下:

1) NVIC_IROChannel:用來設(shè)置中斷源,不同的中斷中斷源不一樣,且不可寫錯,即使寫錯了程序也不會報錯,只會導(dǎo)致不響應(yīng)中斷。具體的成員配置可參考 stm32f10x.h 頭文件里面的 IRQn_Type 結(jié)構(gòu)體定義,這個結(jié)構(gòu)體包含了所有的中斷源。

typedef enum IRQn {
    //Cortex-M3 處理器異常編號
    NonMaskableInt_IRQn = -14,
    MemoryManagement_IRQn = -12,
    BusFault_IRQn = -11,
    UsageFault_IRQn = -10,
    SVCall_IRQn = -5,
    DebugMonitor_IRQn = -4,
    PendSV_IRQn = -2,
   SysTick_IRQn = -1,
   //STM32 外部中斷編號
   WWDG_IRQn = 0,
   PVD_IRQn = 1,
   TAMP_STAMP_IRQn = 2,

   //限于篇幅,中間部分代碼省略,具體的可查看庫文件 stm32f10x.h

   DMA2_Channel2_IRQn = 57,
   DMA2_Channel3_IRQn = 58,
   DMA2_Channel4_5_IRQn = 59
} IRQn_Type;

2) NVIC_IRQChannelPreemptionPriority:搶占優(yōu)先級,具體的值要根據(jù)優(yōu)先級分組來確定,具體參考表6優(yōu)先級分組真值表 。

3) NVIC_IRQChannelSubPriority:子優(yōu)先級,具體的值要根據(jù)優(yōu)先級分組來確定,具體參考表6優(yōu)先級分組真值表 。

4) NVIC_IRQChannelCmd:中斷使能( ENABLE)或者失能( DISABLE)。操作的是 NVIC_ISER 和 NVIC_ICER 這兩個寄存器。

3、編寫中斷服務(wù)函數(shù)

在啟動文件 startup_stm32f10x_hd.s 中我們預(yù)先為每個中斷都寫了一個中斷服務(wù)函數(shù),只是這些中斷函數(shù)都是為空,為的只是初始化中斷向量表。實際的中斷服務(wù)函數(shù)都需要我們重新編寫,為了方便管理我們把中斷服務(wù)函數(shù)統(tǒng)一寫在 stm32f10x_it.c 這個庫文件中。關(guān)于中斷服務(wù)函數(shù)的函數(shù)名必須跟啟動文件里面預(yù)先設(shè)置的一樣,如果寫錯,系統(tǒng)就在中斷向量表中找不到中斷服務(wù)函數(shù)的入口,直接跳轉(zhuǎn)到啟動文件里面預(yù)先寫好的空函數(shù),并且在里面無限循環(huán),實現(xiàn)不了中斷。

審核編輯:湯梓紅

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

    關(guān)注

    6026

    文章

    44458

    瀏覽量

    631088
  • 嵌入式
    +關(guān)注

    關(guān)注

    5054

    文章

    18917

    瀏覽量

    300910
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    894

    瀏覽量

    41326
  • Cortex-M
    +關(guān)注

    關(guān)注

    2

    文章

    227

    瀏覽量

    29691
  • Systick
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    13024
收藏 人收藏

    評論

    相關(guān)推薦

    為什么說Cortex-M是低功耗應(yīng)用的首選

    雖然Cortex-M處理器家族目標瞄準效能光譜較低端的區(qū)域,但是和大多數(shù)微控制器(MCU)采用的其他典型處理器相比,Cortex-M的效能依然算相當(dāng)強悍。舉例來說,像是許多高效能微控制器所采用的Cortex-M4與
    發(fā)表于 07-28 09:44 ?3441次閱讀
    為什么說<b class='flag-5'>Cortex-M</b>是低功耗應(yīng)用的首選

    如何選擇正確的Cortex-M處理器?

    本文將通過比較Cortex-M系列處理器之間的產(chǎn)品特性,告訴你如何根據(jù)產(chǎn)品應(yīng)用選擇正確的Cortex-M處理器。同時也會詳細地進行Cortex-M系列處理器的指令集和高級中斷處理能力,
    發(fā)表于 10-22 08:16

    STM32中斷系統(tǒng)和Cortex-M中斷系統(tǒng)有何異同

    中斷是什么?STM32中斷系統(tǒng)和Cortex-M中斷系統(tǒng)有何異同?
    發(fā)表于 11-29 07:43

    STM32中斷系統(tǒng)和Cortex-M中斷系統(tǒng)的異同是什么?

    中斷是什么?STM32中斷系統(tǒng)和Cortex-M中斷系統(tǒng)的異同是什么?
    發(fā)表于 11-30 07:16

    Cortex-M中斷向量表對齊原則

    關(guān)注+星標公眾號,不錯過精彩內(nèi)容來源| 痞子衡嵌入式一、Cortex-M中斷向量表對齊原則中斷向量表就是一個集中保存系統(tǒng)全部中斷處理函數(shù)(xxxIRQHandler)地址的常量數(shù)組(函
    發(fā)表于 01-25 07:10

    Cortex-M中斷向量表對齊的原則是什么?

    Cortex-M中斷向量表對齊的原則是什么?
    發(fā)表于 01-26 08:09

    【ARM白皮書】ARM Cortex-M處理器入門

    ARM Cortex-M處理器家族現(xiàn)在有8款處理器成員。在本文中,會比較Cortex-M系列處理器之間的產(chǎn)品特性,重點講述如何根據(jù)產(chǎn)品應(yīng)用選擇正確的Cortex-M處理器。本文中會詳細的對照C
    發(fā)表于 04-20 15:34 ?39次下載

    關(guān)于Cortex-M 調(diào)試應(yīng)用的介紹

    Cortex-M 調(diào)試應(yīng)用
    的頭像 發(fā)表于 07-10 00:56 ?2560次閱讀

    米爾科技Cortex-M Prototyping System +介紹

    ARM? Cortex?-M原型系統(tǒng) MPS2+,為Cortex-M 系列微處理器設(shè)計的原型驗證評估系統(tǒng),包含最新的Cortex-M7 及Corte
    的頭像 發(fā)表于 11-14 10:45 ?1793次閱讀
    米爾科技<b class='flag-5'>Cortex-M</b> Prototyping System +介紹

    Cortex-M中斷向量表原理及其重定向方法~

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是Cortex-M中斷向量表原理及其重定向方法。接著前文《嵌入式Cortex-M裸機環(huán)境下臨界區(qū)保護的三種實現(xiàn)》繼續(xù)聊,嵌...
    發(fā)表于 12-01 12:21 ?9次下載
    <b class='flag-5'>Cortex-M</b><b class='flag-5'>中斷</b>向量表原理及其重定向方法~

    痞子衡嵌入式:嵌入式Cortex-M中斷向量表對齊原則的深入研究

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是Cortex-M中斷向量表對齊原則?! 〗裉爝@篇文章的內(nèi)容主要來自于五年前做 Kinetis K32W 系列雙核啟動時的發(fā)現(xiàn)
    發(fā)表于 12-01 12:51 ?0次下載
    痞子衡嵌入式:嵌入式<b class='flag-5'>Cortex-M</b><b class='flag-5'>中斷</b>向量表對齊原則的<b class='flag-5'>深入</b>研究

    Cortex-M中斷及FreeRTOS中斷優(yōu)先級配置原理

    下面就來說說關(guān)于Cortex-M中斷,及FreeRTOS中斷優(yōu)先級配置原理。
    發(fā)表于 02-08 15:30 ?3次下載
    <b class='flag-5'>Cortex-M</b><b class='flag-5'>中斷</b>及FreeRTOS<b class='flag-5'>中斷</b>優(yōu)先級配置原理

    深入理解Cortex-M內(nèi)存管理(GCC)

    在討論Cortex-M的內(nèi)存之前,先來看看Cortex-M的存儲器系統(tǒng),我們知道,Cortex-M系列的處理器,大都可以對32的存儲器進行尋址,因此存儲器的尋址空間能夠達到4G,這就意味著指定和數(shù)
    的頭像 發(fā)表于 04-27 10:58 ?2757次閱讀
    <b class='flag-5'>深入</b>理解<b class='flag-5'>Cortex-M</b>內(nèi)存管理(GCC)

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

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

    Cortex-M位帶操作的原理

    Cortex-M位帶操作的原理
    的頭像 發(fā)表于 10-24 15:27 ?797次閱讀
    <b class='flag-5'>Cortex-M</b>位帶操作的原理