我用的库中NVIC_Type是这样定义的:
typedef struct
{
__IO u32 ISER[8]; /* 偏移: 0x000; 中断使能寄存器 */
u32 RESERVED0[24];
__IO u32 ICER[8]; /* 偏移: 0x080; 中断清除使能寄存器 */
u32 RSERVED1[24];
__IO u32 ISPR[8]; /* 偏移: 0x100; 中断挂起寄存器 */
u32 RESERVED2[24];
__IO u32 ICPR[8]; /* 偏移: 0x180; 中断清除挂起寄存器 */
u32 RESERVED3[24];
__IO u32 IABR[8]; /* 偏移: 0x200; Interrupt Active bit Register */
u32 RESERVED4[56];
__IO u8 IP[240]; /* 偏移: 0x300 中断优先级寄存器(8Bit wide) */
u32 RESERVED5[644];
__O u32 STIR; /* 偏移: 0xE00 软件触发中断寄存器 */
} NVIC_Type;
而很多资料中的定义是
typedef struct
{
vu32 ISER[2];
u32 RESERVED0[30];
vu32 ICER[2];
u32 RSERVED1[30];
vu32 ISPR[2];
u32 RESERVED2[30];
vu32 ICPR[2];
u32 RESERVED3[30];
vu32 IABR[2];
u32 RESERVED4[62];
vu32 IPR[15];
}
那么可以看出前者的中断优先级寄存器,每个中断占用四个字节(32bit),后者占用一个字节。那么前者的32bit怎么用呢?那四位值还在[10:8]的位置上吗?