在线时间21 小时
UID2001525
注册时间2013-4-15
NXP金币0
该用户从未签到
中级会员
- 积分
- 285
- 最后登录
- 2022-4-15
|
发表于 2013-6-3 22:48:47
|
显示全部楼层
回复:关于KL25Z NVIC的相关配置问题?(正解)
关于NVIC的相关寄存器的资料在KL25Z datasheet 确实没详细写出,但给出了IRQ号与需要设置的NVIC寄存器组号和位号的设定规则,你可以在Cortex-M0+ Devices Generic User Guide里找到相关的定义。
对照KL25的reference mannual,可看到KL25有16个内核中断,32个非内核中断,这里操作的是非内核中断,其IRQ号=VECTOR-16,可以看到ISER、ICER、ISPR、ICPR都是三十二位,每一位一次对应着一个非内核中断,而对于中断优先级寄存器IPR,其本身也是三十二位寄存器,一共八个,每一个IPR寄存器控制4个IRQn,如下图。在程序中,也就是你贴出的代码中映射为八个三十二位的数组 uint32_t IP[8] 。这和K60的区别很大,K60是映射成104个八位的uint8_t IP[104](它的中断个数也比较多),你可以对比学习一下,有问题欢迎继续提问。
typedef struct NVIC_MemMap {
uint32_t ISER; /**< Interrupt Set Enable Register, offset: 0x0 */
uint8_t RESERVED_0[124];
uint32_t ICER; /**< Interrupt Clear Enable Register, offset: 0x80 */
uint8_t RESERVED_1[124];
uint32_t ISPR; /**< Interrupt Set Pending Register, offset: 0x100 */
uint8_t RESERVED_2[124];
uint32_t ICPR; /**< Interrupt Clear Pending Register, offset: 0x180 */
uint8_t RESERVED_3[380];
uint32_t IP[8]; /**< Interrupt Priority Register n, array offset: 0x300, array step: 0x4 */
} volatile *NVIC_MemMapPtr; |
|