- μC/OS-III內核實現與應用開發實戰指南:基于STM32
- 劉火良 楊森編著
- 547字
- 2019-08-01 11:35:58
4.2 初始化SysTick
使用SysTick非常簡單,只需要一個初始化函數OS_CPU_SysTickInit()即可。此函數在os_cpu_c.c中定義,具體實現參見代碼清單4-1。在這里,我們沒有使用μC/OS-III官方的SysTick初始化函數,而是另外編寫了一個,區別是μC/OS-III官方的OS_CPU_SysTickInit()函數中涉及SysTick寄存器時都是重新在cpu.h中定義,而我們自己編寫的函數則是使用ARMCM3.h(記得在os_cpu_c.c的開頭包含ARMCM3.h這個頭文件)這個固件庫文件中定義的寄存器。
代碼清單4-1 SysTick初始化
1 #if 0/* 不用μC/OS -III自帶的 */ 2 void OS_CPU_SysTickInit (CPU_INT32U cnts) 3 { 4 CPU_INT32U prio; 5 6 /* 填寫 SysTick 的重載計數值 */ 7 CPU_REG_NVIC_ST_RELOAD = cnts - 1u; 8 9 /* 設置 SysTick 中斷優先級 */ 10 prio = CPU_REG_NVIC_SHPRI3; 11 prio &= DEF_BIT_FIELD(24, 0); 12 prio |= DEF_BIT_MASK(OS_CPU_CFG_SYSTICK_PRIO, 24); 13 14 CPU_REG_NVIC_SHPRI3 = prio; 15 16 /* 啟用 SysTick 的時鐘源和啟動計數器 */ 17 CPU_REG_NVIC_ST_CTRL |= CPU_REG_NVIC_ST_CTRL_CLKSOURCE | 18 CPU_REG_NVIC_ST_CTRL_ENABLE; 19 /* 啟用 SysTick 的定時中斷 */ 20 CPU_REG_NVIC_ST_CTRL |= CPU_REG_NVIC_ST_CTRL_TICKINT; 21 } 22 23 #else/* 直接使用頭文件ARMCM3.h中現有的寄存器定義和函數來實現 */ 24 void OS_CPU_SysTickInit (CPU_INT32U ms) 25 { 26 /* 設置重裝載寄存器的值 */ 27 SysTick->LOAD = ms * SystemCoreClock / 1000 - 1;(1) 28 29 /* 配置中斷優先級為最低 */ 30 NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);(2) 31 32 /* 復位當前計數器的值 */ 33 SysTick->VAL = 0;(3) 34 35 /* 選擇時鐘源、啟用中斷、啟用計數器 */ 36 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |(4) 37 SysTick_CTRL_TICKINT_Msk |(5) 38 SysTick_CTRL_ENABLE_Msk;(6) 39 } 40 #endif
代碼清單4-1(1):配置重裝載寄存器的值,我們配合函數形參ms來配置,如果需要配置為10ms產生一次中斷,則將形參設置為10即可。
代碼清單4-1(2):配置SysTick的優先級,這里配置為15,即最低。
代碼清單4-1(3):復位當前計數器的值。
代碼清單4-1(4):選擇時鐘源,這里選擇SystemCoreClock。
代碼清單4-1(5):啟用中斷。
代碼清單4-1(6):啟用計數器開始計數。
推薦閱讀
- Linux運維之道(第3版)
- Installing and Configuring Windows 10:70-698 Exam Guide
- 混沌工程實戰:手把手教你實現系統穩定性
- macOS效率手冊
- Learning Bootstrap
- 無蘋果不生活 The New iPad隨身寶典
- Introduction to R for Quantitative Finance
- Linux網絡配置與安全管理
- Learning Continuous Integration with Jenkins(Second Edition)
- Multi-Cloud for Architects
- Web Penetration Testing with Kali Linux(Third Edition)
- Android應用性能優化最佳實踐
- Linux內核分析及應用
- 操作系統之哲學原理第2版
- Getting Started with Citrix XenApp 6.5