OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 不太会用中断,给点建议呗,亲们

共7条 1/1 1 跳转至

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

助工
2012-09-22 18:04:19    评分
用这个单片机,我不太会中断,给点建议呗,再次感谢



关键词: 不太     会用     中断     建议     亲们    

专家
2012-09-22 20:04:56    评分
2楼
楼主 说说都会什么吧!
然后 我再把不会的给你补上……

高工
2012-09-22 21:08:19    评分
3楼

找个例子看看


高工
2012-09-23 12:15:27    评分
4楼
不会就学啊
想要什么建议?

助工
2012-09-24 20:15:25    评分
5楼

同样建议看样例,其实坛里有很多有图有真相的小例子,你可以看一下!
这个童鞋应该是不理解中断的机制!
通俗的说一下我自己的理解吧:
每个单片机都有一个无限循环的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)

往下面的东西就要好好研究一下了!
不过理解了以上的,用起来就没问题了!
多多交流!


助工
2012-09-25 11:39:19    评分
6楼
单片机在不同编译平台下中断函数的写法不同,但相差不大,可以参考代码生成器生成的代码

楼上是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

助工
2012-10-04 17:15:04    评分
7楼
很感谢,

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]