1 對NVIC的理解
CM3支持硬件中斷嵌套,分為搶占式優先級和亞優先級,使用規則主要有,搶占優先級高級別的可以打斷低級別的,同一級別的搶占優先級同時發生時,亞當優先級高的先發生中斷,若是相同,則按硬件排列順序發生。若是有一個亞優先級正在執行中斷,同一級別的其它亞優先級發生時,則先掛起,等此中斷執行完再執行!
從庫函數中找到優先級分組模式:
#define NVIC_PriorityGroup_0 ((uint32_t)0x700) /* 0 bits for pre-emption priority
4 bits for subpriority */
#define NVIC_PriorityGroup_1 ((uint32_t)0x600) /* 1 bits for pre-emption priority
3 bits for subpriority */
#define NVIC_PriorityGroup_2 ((uint32_t)0x500) /* 2 bits for pre-emption priority
2 bits for subpriority */
#define NVIC_PriorityGroup_3 ((uint32_t)0x400) /* 3 bits for pre-emption priority
1 bits for subpriority */
#define NVIC_PriorityGroup_4 ((uint32_t)0x300) /* 4 bits for pre-emption priority
0 bits for subpriority */
從中可以看出第一組只有一個級別,16個亞優先級,我可以這樣理解,若是分配成這個組里,不能發生嵌套中斷,同時發生中斷時,亞優先級高的先發生,若有中斷執行時,必須等中斷執行完才能執行下一個中斷。最后一組正好相反,有15個級別,若是執行一個中斷,可以最多嵌套15個中斷執行一個中斷。看下面的例子:
NVIC_InitTypeDef NVIC_InitStructure; //定義中斷初始化類型結構體變量
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //配置優先級分組1 2個兩個搶占優先級 8個亞優先級
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //開口外部中斷0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//配置0號搶占式優先級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//亞優先級配置為0號
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道
NVIC_Init(&NVIC_InitStructure); //對外部中斷0進行初始化配置
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //開口外部中斷5到9
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//配置1號搶占式優先級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//亞優先級配置為1號
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道
NVIC_Init(&NVIC_InitStructure); //對外部中斷0進行初始化配置
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; //ADC1中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//配置1號搶占式優先級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//亞優先級配置為1號
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道
NVIC_Init(&NVIC_InitStructure); //對外部中斷0進行初始化配置
從上面的配置來看,外部中斷0的優先級最高,可以打斷ADC和外部5到9的中斷,也就說可以嵌套發生,當ADC中斷和外部5到9中斷同時發生時,它們的搶占優先級別相同,亞優先級別也相同,因為ADC1硬件排在更靠前,則先發生ADC中斷,若是兩者任何一個中斷正在執行,則等此中斷執行完,再去執行另一個中斷。
上一篇:STM32學習之:USART中斷方式
下一篇:STM32學習之:事件標志組
推薦閱讀
史海拾趣
品質是Base Two (2) Systems的生命線。公司始終堅持嚴格的質量管理體系,從原材料采購到生產制造的每一個環節都進行嚴格把控。這種對品質的執著追求,使得公司的產品在市場上贏得了客戶的廣泛信賴。許多客戶與公司建立了長期穩定的合作關系,成為公司發展的重要支撐。
隨著產品技術的不斷成熟,Base Two (2) Systems開始積極拓展市場。公司通過與各大電子廠商、分銷商建立緊密的合作關系,將產品推向更廣闊的市場。同時,公司還積極參加各類行業展會和交流活動,與業內同行深入交流,共同探討行業發展趨勢,為公司的長遠發展奠定了堅實的基礎。
KitlDllMain-kitl.dll的入口地址,kernel.dll是怎么找到的? 問個可能很簡單的問題,但我有點困惑了! 在OEMMAIN目錄的oemglobal.c文件中有OemGlobal結構里面有 #ifdef KITLOEM KitlDllMain, &n ...… 查看全部問答∨ |
|
報錯內容:Error: Clock input port inclk[0] of PLL "<name>" must be driven by a non-inverted input pin or another PLL, optionally through a Clock Control block?!? 查看全部問答∨ |
SPI1掛接在APB2上,SPI2掛接在APB1上,因為APB2的最高工作頻率是APB1的2倍,所以SPI1和SPI2的最高速度是否也相差一 ...… 查看全部問答∨ |
請教STM32F103XX高端系列能不能外接ADC參考電壓? 比如高密度系列:STM32F103XC ,STM32F103XD ,STM32F103XE 資料顯示雙通道的DAC轉換可外接參考電壓。 那ADC轉換能不能外接的???… 查看全部問答∨ |
我想使用C#編一個向STM32F10x發送程序的小程序,但發現一開頭就無法傳送第一個包,請各位高手指教waitfor(\'C\');//可以通過 byte[] byteFile[]; byteFile = getFileBytes("d:\\mlbinV01.bin"); //取得文件名和文件長度 sp.Write(byteFile , 0, by ...… 查看全部問答∨ |
在這篇文章里會講2510型自動調諧溫度控制源表進行測試系統配置時,對于正負輸出引線、遠程激活時對端口及附件的要求。 正、負輸出引線連接的交換 2510型自動調諧溫度控制源表[1]假設正向電流為待測器件加熱。許多激光二極管熱電制冷器應用都假 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- Linux系統編程篇丨迅為IMX6ULL-對應視頻講解
- 嵌入式學習丨4412開發板-uboot源碼-匯編-源碼分析(一)嵌入式學習丨4412開發板-uboot源碼-匯
- 迅為IMX6ULL開發板-主頻和時鐘配置例程(二)
- 迅為IMX6ULL開發板-主頻和時鐘配置例程
- 迅為IMX6ULL開發板安裝VMware Tool工具
- i.MX6ULL終結者Debian文件系統的構建i.MX6ULL 移植Debian文件系統
- 迅為i.MX6ULL開發板按鍵例程編譯及運行
- 迅為-i.MX6開發板手冊更新-非設備樹uboot-修改默認環境變量
- 迅為-IMX6ULL-QT應用_在開發板上移植ssh
- 迅為-i.MX6ULL開發板-QT實戰項目DHT11&網絡編程實戰練習(一)