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

同样建议看样例,其实坛里有很多有图有真相的小例子,你可以看一下!
这个童鞋应该是不理解中断的机制!
通俗的说一下我自己的理解吧:
每个单片机都有一个无限循环的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
回复
打赏帖 | |
---|---|
【OZONE】使用方法总结被打赏20分 | |
【S32K314】芯片启动流程分析被打赏20分 | |
【LP-MSPM0L1306】适配 RT-Thread Nano被打赏20分 | |
今天的咸鱼也是曾经鱼跃龙门的天纵之才,中流击水,浪遏飞舟,粪土当年万户侯,数风流人物,还看今朝,被打赏5分 | |
分享一种检测按键状态的方法被打赏20分 | |
周末总结一下,STM32C0系列的开发经验被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下定时器配置被打赏20分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下PWM配置被打赏20分 | |
【Cortex-M】Systick Timer使用被打赏10分 | |
分享汽车防盗系统的组成与分类(一)被打赏5分 |