编写一个stm32 svc关中断函数

本文介绍了如何使用STM32触发svc中断,并通过修改特殊寄存器BASEPRI实现中断的开关控制。文中详细展示了通过编写汇编函数实现关中断与开中断的过程,以及如何设置TIM3中断为唯一不受关中断影响的特殊情况。

做到了让stm32触发svc中断并传递进去参数然后切换到handler模式并修改特殊寄存器的值,从而达到关中断,但是其实这个程序直接就是特权级,故不进入handler模式也可以修改特殊寄存器。。。。。。

如下为调用写的开关中断函数:

842584-20160308202335944-1119909495.jpg

 

新建了一个文件asm.c,所有我写的汇编函数都在里面:

842584-20160308202338038-1794043928.jpg

 

 

前两个是关中断和开中断函数,主要做的事将参数传入R8并触发svc中断。

Svc中断中则调用第三个set_i()函数。

842584-20160308202339116-574665104.jpg

 

 

   当触发了中断之后,M3内核进入handler模式,利用R8中的数据,修改特殊寄存器BASEPRI。这个寄存器只有在特权级才能访问。

   Stm32中断分组为组1,优先级位数为4,故抢占优先级为1的中断都被屏蔽。只有tim3中断抢占优先级为0,故调用第一个函数之后只有tim3中断依然可以进行。

 

 

 





转载于:https://www.cnblogs.com/dchipnau/p/5255462.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值