1,根据手册,R8C芯片的中断响应时序需要20个指令周期、假如响应前在执行的是最耗时的DIVX指令,为30个周期,那么在Fosc=10MHz时,中断响应的时间最多为5us
可是为什么我实际的中断响应时间都在7us以上,且仅使用DIVU.W指令,周期为18+7?
注:所有中断内的第一句就是 I =1,开中断
另外:1个指令周期=1个时钟周期,我认为
2,为什么一个中断控制寄存器写入00h,即禁止该中断,可中断依然发生,当程序停止在该中断内时观察此中断控制寄存器的值是00h(或者08h,即有中断请求)
烦请帮忙解答上面2个让人很困惑的问题
谢谢!!
共8条
1/1 1 跳转至页

2楼
谢谢2位热心的回答,太感谢了,呵呵。
1,我觉得中断响应顺序应当包括压栈、保存寄存器等操作,我程序里是没这些操作的
2,即使计算测点程序时间也应当没那么长,我用汇编,执行效率应当较高。
更重要的是,个别响应时间居然达到近14us,实在不解。。。。
我先试下 FLCR I 指令。
1,我觉得中断响应顺序应当包括压栈、保存寄存器等操作,我程序里是没这些操作的
2,即使计算测点程序时间也应当没那么长,我用汇编,执行效率应当较高。
更重要的是,个别响应时间居然达到近14us,实在不解。。。。
我先试下 FLCR I 指令。

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

4楼
我程序用汇编写的,有3K多。。。。
要看懂也得个把月
把程序截出来给你们吧,又没多大意义
唉,看来我又要在黑暗中摸索啦
我已经在N次黑暗中摸索,每次都看到光明
希望这次也会
呵呵
非常感谢你们的帮助!!!
要看懂也得个把月
把程序截出来给你们吧,又没多大意义
唉,看来我又要在黑暗中摸索啦
我已经在N次黑暗中摸索,每次都看到光明
希望这次也会
呵呵
非常感谢你们的帮助!!!

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
这个问题解决后,中断就可以响应的更快点,又省去一个标志量

非常奇怪!!操作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
这个问题解决后,中断就可以响应的更快点,又省去一个标志量

6楼
总结点经验:
1,我的调试方法是:
在不该中断的地方发生中断后触发另一个中断,在第二个中断里设个死循环
程序进入死循环后,停止程序,然后跳出第二个中断返回第一个,再跳出第一个中断
此时光标指示位置的上面的几句中就有触发第一个中断的指令,该指令的操作不当造成第一个中断的发生。
2,尽量按照官方的说明去操作中断控制寄存器
1,我的调试方法是:
在不该中断的地方发生中断后触发另一个中断,在第二个中断里设个死循环
程序进入死循环后,停止程序,然后跳出第二个中断返回第一个,再跳出第一个中断
此时光标指示位置的上面的几句中就有触发第一个中断的指令,该指令的操作不当造成第一个中断的发生。
2,尽量按照官方的说明去操作中断控制寄存器

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

共8条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 |