不太会用中断,给点建议呗,亲们
同样建议看样例,其实坛里有很多有图有真相的小例子,你可以看一下!
这个童鞋应该是不理解中断的机制!
通俗的说一下我自己的理解吧:
每个单片机都有一个无限循环的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
回复
我要赚赏金打赏帖 |
|
|---|---|
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |

我要赚赏金
