Part Number:MSPM0G3507
我要做升级功能,boot+APP模式。如果我想设置MCU的中断向量SCB->VTOR为10K地址,如果按照M0的资料(参考下图),应该是SCB->VTOR=0X2800<<7。但实际上我直接写SCB->VTOR=0X2800运行正常。这是为何?
Yale Li:
运行正常时有没有读一下该寄存器看一下?
,
游泳的雨:
这应该是怎么赋值呢?目前好像没有人给一个确切的说法
,
Yale Li:
方便告知一下截图出自哪个文档的哪一页或者那一节吗?谢谢
,
游泳的雨:
我也读取SCB->VTOR的值了,为0x2800
,
Yale Li:
你这个截图出自哪个文档呀?文档号或者标题告诉我一下
,
游泳的雨:
用户手册上写的
,
游泳的雨:
这是一个超级链接,点击自动跳转网址。反正Arm的都是这样的设计,你们应该知道啊
,
Yale Li:
https://www.cnblogs.com/henjay724/p/15312847.html
这个链接详细地解释了CM核上的这个问题。你可以参考一下。
简单来说,0-6位是被保留的,但并不意味着没有被用到。它们也属于中断向量表偏置地址的一部分,但是不能被修改,一直应该保持为0。按照这一点来说,中断向量表偏置地址应该保持128字节对齐(0x80,0b1000 0000)。
但实际上至少应该是0x100对齐,因为第7位的属性也决定了这一位是一直为0的:
[1]
[2]
—
参考链接:
https://developer.arm.com/documentation/dui0662/b/Cortex-M0–Peripherals/System-Control-Block
[1]https://developer.arm.com/documentation/dui0662/b/Cortex-M0–Peripherals/System-Control-Block/Vector-Table-Offset-Register
[2]https://developer.arm.com/documentation/ihi0048/a/Glossary
,
Yale Li:
你设计的0x2800恰好满足上述条件