cortex-m3汇编之NVIC

一,NVIC机制
汇编代码1
汇编代码2
汇编代码3
以上截屏出自cortexm3权威指南第八章131页。
整个程序可以分为以下几部分。
1,配置AIRCR寄存器
AIRCR描述
2,转移中断向量表
其中包括copy NMI和fault的向量
此图说明。。
上图说明NMI和fault的中断号分别是2和3。而且上图中2至15号中断是已定的,不可更改。之后的中断号码分别要对应一个优先级,一个函数入口地址(这个好像因为stm32的.s文件导致不能更改,之后会谈到)。原本内存是从0x00000000这个地址开始存放中断向量表(第一个32位数据是0号中断存放中断服务函数地址,第二个是1号中断存放中断服务函数地址。。。以此类推)。然后要把它全部复制到0x08000000地址开头的内存(0x08000000这个数字是stm32启动文件执行之后将向量表转移的地方,至于为什么转移,可能是因为代码段是从0x08000000开始的)。总之,中断向量表就是按照0号 1号中断 2号中断 3号中断。。。这样的顺序将各自的中断服务函数存放。优先级也是按照类似的方式存放。
3,存放优先级
以0xe000e400开始,按照字节存放优先级。
4,使能相应中断。
二,stm32实验

    LDR     R0, =0xE000ED0C
    LDR     R1, =0x05FA0500
    STR     R1, [R0]
;   LDR     R0, =0x000000b0
;   LDR     R1, =alun3
;   STR     R1, [R0]
    LDR     R0, =0xE000E100
    LDR     R1, =0x10000000
    STR     R1, [R0]
    BX      LR

屏蔽的部分原本是为了将中断向量表中的TIM2_IRQHandler的地址换成我自己编写的中断服务函数,结果不知道什么原因在0x00000000和0x08000000开始的连续的内存单元里面无法写入,执行完STR R1,[R0]
之后内存没有变化,程序进入HardFault_Handler这个函数中(这是中断号为3的中断,由截图可以看出)。如果把其去掉,能正常运行(工能和用stm32库函数写的一样,感觉中断向量表被stm32的启动文件固定过,无妨更改其中的数据)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值