不太会用中断,给点建议呗,亲们

同样建议看样例,其实坛里有很多有图有真相的小例子,你可以看一下!
这个童鞋应该是不理解中断的机制!
通俗的说一下我自己的理解吧:
每个单片机都有一个无限循环的task在跑,但是跑的时候有时候会被高优先级的事件(比如中断)打断,等高优先级的事件处理完了再回来继续跑(包括睡眠)
我以前就不了解中断是怎么触发的:
中断有很多种,IO中断,定时器中断....
当有设定的事件发生时,就会触发相应的处理程序(这个处理程序是在中断响应函数里写好的)如下:
#pragma vector = INTTM00_vect
__interrupt static void r_tau0_channel0_interrupt(void)
{
/* Start user code. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
}
当然在定义中断处理函数时要把所有的处理函数都挂到一个表上:
如下:
/*----------------------------------------------
* Interrupt vector addresses
*--------------------------------------------*/
。。。。
#define INTDMA1_vect (0x1C)
#define INTCSI00_vect (0x1E)
#define INTIIC00_vect (0x1E)
#define INTST0_vect (0x1E)
#define INTCSI01_vect (0x20)
#define INTIIC01_vect (0x20)
#define INTSR0_vect (0x20)
#define INTSRE0_vect (0x22)
#define INTTM01H_vect (0x22)
#define INTCSI10_vect (0x24)
#define INTIIC10_vect (0x24)
#define INTST1_vect (0x24)
#define INTCSI11_vect (0x26)
#define INTIIC11_vect (0x26)
#define INTSR1_vect (0x26)
#define INTSRE1_vect (0x28)
#define INTTM03H_vect (0x28)
#define INTIICA0_vect (0x2A)
#define INTTM00_vect (0x2C)
往下面的东西就要好好研究一下了!
不过理解了以上的,用起来就没问题了!
多多交流!

楼上是IAR平台的
CubeSuite+下RL78中断函数的声明:
#pragma vect(or interrupt) interrupt-request-name function-name
interrupt-request-name 在UM的interrupt function那章找
#pragma interrupt INTP0 r_intc0_interrupt
__interrupt void r_intc0_interrupt(void)
{
/* Start user code. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
}
进中断要保存现场,出中断要恢复现场,这都是常识,不过对用户来说不用考虑,CPU会帮你做好
此外,进中断函数后系统中断是禁止的(DI),如果要中断嵌套,需要在中断函数里EI
回复
打赏帖 | |
---|---|
【STM32F769】AI之与本地deepseek对接被打赏50分 | |
Buck电路工作在CCM模式下电感电流的计算公式是什么?被打赏5分 | |
buck电路工作原理被打赏5分 | |
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏100分 | |
我想要一部加热台+多合一调试工具被打赏18分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 | |
【换取手持数字示波器】树莓派PICO调试器官方固件本地化部署实践被打赏24分 | |
【换取手持数字示波器】分享一个KEIL无法识别CMSIS-DAP调试器的解决办法被打赏20分 | |
【换取手持数字示波器】分享一个自制的ArduinoNano扩展板底板被打赏23分 | |
【换取手持示波器】树莓派PICOW网页烟花被打赏18分 |