做到了让stm32触发svc中断并传递进去参数然后切换到handler模式并修改特殊寄存器的值,从而达到关中断,但是其实这个程序直接就是特权级,故不进入handler模式也可以修改特殊寄存器。。。。。。
如下为调用写的开关中断函数:
新建了一个文件asm.c,所有我写的汇编函数都在里面:
前两个是关中断和开中断函数,主要做的事将参数传入R8并触发svc中断。
Svc中断中则调用第三个set_i()函数。
当触发了中断之后,M3内核进入handler模式,利用R8中的数据,修改特殊寄存器BASEPRI。这个寄存器只有在特权级才能访问。
Stm32中断分组为组1,优先级位数为4,故抢占优先级为1的中断都被屏蔽。只有tim3中断抢占优先级为0,故调用第一个函数之后只有tim3中断依然可以进行。