关于中断的几个困惑的问题
可是为什么我实际的中断响应时间都在7us以上,且仅使用DIVU.W指令,周期为18+7?
注:所有中断内的第一句就是 I =1,开中断
另外:1个指令周期=1个时钟周期,我认为
2,为什么一个中断控制寄存器写入00h,即禁止该中断,可中断依然发生,当程序停止在该中断内时观察此中断控制寄存器的值是00h(或者08h,即有中断请求)
烦请帮忙解答上面2个让人很困惑的问题
谢谢!!
关键词: 关于 中断 几个 困惑 问题
谢谢kejian2000的问题与楼上回答。我稍微补充一下,但因为不知您用哪一款R8C,也不清楚您计测中断响应时间的方法,我以R8C/1B为例大致说明:
中断从发生中断请求到开始执行中断程序的时间称为中断响应时间。
主要由2部分组成:1)等待正在执行的指令完成的时间(最长为30个系统时钟周期,您说的对);2)单片机内部中断时序(20个系统时钟周期)组成。【请参考您所使用单片机的HW manual】,另外,实际测量时,如采用端口置位等方法测量,还必须考虑测试点程序执行周期。
《R8C/1A,1B》书上写得比较详细,我摘出来供参考:
中断响应的时序:
如果在指令执行中发生中断请求,就在该指令执行结束后判定优先权,并且从下一个周期转移到中断顺序。
但是,对于SMOVB、SMOVF、SSTR以及RMPA各指令,如果在指令执行中发生中断请求,就暂时中断指令的运行,转移到中断顺序。
中断顺序运行如下:
(1) 通过读地址00000h,CPU获得中断信息(中断序号、中断请求级)。此后,该中断的IR位变为“0”(无中断请求)。
(2) 将中断顺序前的FLG寄存器保存到CPU内部的暂存器(此过程由CPU自动执行,用户不能使用)。
(3) I标志为“0”(禁止中断)
(4) U标志为“0”(指定ISP)但是,在执行软件中断序号32~63的INT指令时,U标志不变。
(5) 将CPU内部的暂存器压栈(此过程由CPU自动执行,用户不能使用)。
(6) 将PC压栈。
(7) 给IPL设定接受中断的中断优先级。
(8) 中断向量所设定的中断程序的起始地址存入PC。
(9) 在中断顺序结束后,从中断程序的起始地址执行指令。
--------
关于后面的中断问题,您可以把源程序寄给我们,具体分析。
1,我觉得中断响应顺序应当包括压栈、保存寄存器等操作,我程序里是没这些操作的
2,即使计算测点程序时间也应当没那么长,我用汇编,执行效率应当较高。
更重要的是,个别响应时间居然达到近14us,实在不解。。。。
我先试下 FLCR I 指令。
我程序里有2处违法操作
1,高速内部晶振=10MHz,手册规定为8MHz左右
2,大部分的中断控制寄存器都没按照注意事项说的那样操作,没先FCLR I ,而是直接MOV赋值
不知道是否有影响。。。。
新的R8C/3x在中断响应时间上有新的改进,进一步降低了响应时间。
您要是能把测试中断时间的方法与程序发给我们,我们一定可以给您分析出中断时间长了的原因。在这里探讨只能是一般性的。
另外,您看看CPU时钟用的是多少MHz?
要看懂也得个把月
把程序截出来给你们吧,又没多大意义
唉,看来我又要在黑暗中摸索啦
我已经在N次黑暗中摸索,每次都看到光明
希望这次也会
呵呵
非常感谢你们的帮助!!!
编程要多讨论,集思广益,bug也就少了。一个人钻胡同里就出不来了,估计Kejian2000哪里设定有些小问题,要不测量方法值得商榷。把中断程序和初始化程序贴上来,大家看看~~
非常奇怪!!操作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
这个问题解决后,中断就可以响应的更快点,又省去一个标志量
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |