d/ 下面的定义与SYSTICK相关,有时也会用到的。
/* memory mapping struct for SysTick */
typedef struct
{
__IO uint32_t CTRL; /*!< SysTick Control and Status Register */
__IO uint32_t LOAD; /*!< SysTick Reload Value Register */
__IO uint32_t VAL; /*!< SysTick Current Value Register */
__I uint32_t CALIB; /*!< SysTick Calibration Register */
} SysTick_Type;
e/ 另外的几个寄存器,也是需要使用的(请具体参考相关的资料)
__IO uint8_t SHP[12]; /*!<System Handlers Priority Registers(4-7,8-11,12-15) */
同每个外部中断通道优先级定义字相同, 它们是内核中断通道4-15的优先级定义字所在
的寄存器。用户可以通过设置SHP[n],改变内部中断通道的优先级。
__IO uint32_t VTOR; /*!< Vector Table Offset Register */
如果你的代码要在RAM中启动执行,就需要对这个寄存器进行设置。
优先级可以被分为高低两个位段,分别是抢占优先级和亚优先级 Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位 AIRC 中 PRIGROUP 的值规定了设置和确定每个外部中断通道优先级的格式。例如,在上面将 0x05 写入了 AIRC 中 PRIGROUP,也就规定了当前系统中只能有 4 个抢先式优先级,相同的抢先式优先级下还可以有 4 个不同级别的子优先级,他们分别为: 位[7:6] 位[5:4] 位[3:0]
00 0 号抢先优先级 00 0 号子优先级 无效
01 1 号抢先优先级 01 1 号子优先级 无效
10 2 号抢先优先级 10 2 号子优先级 无效
11 3 号抢先优先级 11 3 号子优先级 无效
在Cortex—M3的优先级分配中,较低的优先级值具有较高的优先级。
数值小的优先级高, 数值大的优先级低
a 只能高抢先优先级的中断可以打断低抢先优先级的中断服务,构成中断嵌套。
b 当 2(n)个相同抢先优先级的中断出现,它们之间不能构成中断嵌套,但 STM32 首先响应子优先级高的中断。
c 当 2(n)个相同抢先优先级和相同子优先级的中断出现,STM32 首先响应中断通道所对应的中断向量地址低的那个中断。
可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:
NVIC_PriorityGroup_0 => 选择第0组
NVIC_PriorityGroup_1 => 选择第1组
NVIC_PriorityGroup_2 => 选择第2组
NVIC_PriorityGroup_3 => 选择第3组
NVIC_PriorityGroup_4 => 选择第4组 第0组:所有4位用于指定响应优先级 ( 从不嵌套 )
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级 ( 最大的嵌套可能性 ) ( 类似于 STR710 )
|