这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于中断的几个困惑的问题

共8条 1/1 1 跳转至

关于中断的几个困惑的问题

助工
2008-04-18 08:22:41     打赏
1,根据手册,R8C芯片的中断响应时序需要20个指令周期、假如响应前在执行的是最耗时的DIVX指令,为30个周期,那么在Fosc=10MHz时,中断响应的时间最多为5us
可是为什么我实际的中断响应时间都在7us以上,且仅使用DIVU.W指令,周期为18+7?
注:所有中断内的第一句就是 I =1,开中断
另外:1个指令周期=1个时钟周期,我认为

2,为什么一个中断控制寄存器写入00h,即禁止该中断,可中断依然发生,当程序停止在该中断内时观察此中断控制寄存器的值是00h(或者08h,即有中断请求)

烦请帮忙解答上面2个让人很困惑的问题
谢谢!!



关键词: 关于     中断     几个     困惑     问题    

助工
2008-04-18 10:10:43     打赏
2楼
谢谢2位热心的回答,太感谢了,呵呵。

1,我觉得中断响应顺序应当包括压栈、保存寄存器等操作,我程序里是没这些操作的
2,即使计算测点程序时间也应当没那么长,我用汇编,执行效率应当较高。
更重要的是,个别响应时间居然达到近14us,实在不解。。。。

我先试下 FLCR I 指令。

助工
2008-04-18 10:54:47     打赏
3楼
FCLR I 用了,还是无效。。。。。

我程序里有2处违法操作
1,高速内部晶振=10MHz,手册规定为8MHz左右
2,大部分的中断控制寄存器都没按照注意事项说的那样操作,没先FCLR I ,而是直接MOV赋值

不知道是否有影响。。。。

助工
2008-04-18 11:35:31     打赏
4楼
我程序用汇编写的,有3K多。。。。
要看懂也得个把月
把程序截出来给你们吧,又没多大意义
唉,看来我又要在黑暗中摸索啦
我已经在N次黑暗中摸索,每次都看到光明
希望这次也会
呵呵

非常感谢你们的帮助!!!

助工
2008-04-22 10:44:40     打赏
5楼
终于看到光明了!!!
非常奇怪!!操作CMP1IC居然会影响到CMP0IC
是因为CMP1IC的操作而使得CMP0IC有中断请求。。。。
原来主程序里使用MOV打开和关闭CMP1IC的中断,改为and后OK
子程序里这样的,有点复杂,CMP1IC事先需要压栈:
  push.b cmp1ic
  fclr i
  mov.b #00h,cmp1ic    ;此句改为and无效,只好用先关全局中断然后再开,改后程序OK
;  nop
;  nop
  fset i
  mov.b #04h,adcon0    ;select AD channel AN4(p03)
  bset ad_on     ;start AD
wait_ad:  
  btst ad_on
  jc  wait_ad
  mov.b ad,ad_temp     ;get AD result
  pop.b cmp1ic

这个问题解决后,中断就可以响应的更快点,又省去一个标志量

助工
2008-04-22 11:04:21     打赏
6楼
总结点经验:
1,我的调试方法是:
在不该中断的地方发生中断后触发另一个中断,在第二个中断里设个死循环
程序进入死循环后,停止程序,然后跳出第二个中断返回第一个,再跳出第一个中断
此时光标指示位置的上面的几句中就有触发第一个中断的指令,该指令的操作不当造成第一个中断的发生。

2,尽量按照官方的说明去操作中断控制寄存器

助工
2008-04-22 11:48:02     打赏
7楼
因为需要做PWM的死区
死区是程序编出来的
需要响应快,否则死区超限会短路,烧MOS
所以在程序里不能有长时间的屏蔽中断
有长时间中断也可以,但死区时间就要减小,那死区就是鸡肋啦
不到万不得已,我也不会有前面提到的2个违法操作,都是为了死区。。。。。。

助工
2008-04-23 11:50:36     打赏
8楼

R8C中有的定时器自带死区的
不需要编,自动生成
但我用的不带,只能编


共8条 1/1 1 跳转至

回复

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