Microchip
直播中

张立

8年用户 206经验值
私信 关注
[问答]

PIC32MZ中断代码错误怎么回事

在进行一些实验以确定PIC32MZ上的中断延迟以及它如何受到L1 ICache的影响的同时,我注意到在指定IPL7SRS时中断处理程序的实现中存在以下缺陷。f.):-对于IPL7SRSIn的IL7SRS情况,EPC被读取并保存到堆栈中,但是从不恢复。这种读取/保存是不必要的。我还会质疑在IPL7时保存/恢复SRSCTL的必要性,因为我们只能被NMI或一般异常中断,这通常是致命的。也许可以指定一个属性来控制这个?

回帖(13)

李天竹

2020-4-29 06:23:04
我认为这不是7级中断所需要的(除了“做什么”)。即使使用单独的堆栈空间,也可以避免RDPGPR/WRPGPR。延迟研究的结果是什么?
举报

李子跃

2020-4-29 06:41:20
是啊。我认为对于小型ISR,如果SRS不在相同优先级的不同中断之间共享,则根本不需要触摸堆栈,可以将需要保存的任何内容保存在寄存器中。是这样的,但保存的东西,从来没有恢复是明确的是,-我仍然在研究潜伏期研究。由于某种原因,不管我是否将ISR加载并锁定到L1 ICache中,第一次调用中断的时间总是更长。可能是因为堆栈/ DC缓存,我还没有接触到呢?但这种情况是连续发生的。如果在生成中断之前刷新或不刷新ICache,则存在可重复的差别,并且这两种情况的延迟到目前为止是一致的,如果不考虑第一种情况,也是如此。我正在使用核心定时器进行定时,在软件中生成中断。-在IPL7SRS:-ISR,锁定在高速缓存IntLat.=14=28clksISR Not在高速缓存IntLat.=23=46clksI中,将在今晚晚些时候进行更多的试验。我终于让ISR作为一个单独的.S文件工作,所以我现在可以移除默认的额外垃圾,看看它有什么不同。
举报

李天竹

2020-4-29 06:54:35
谢谢你张贴结果。46个时钟在200 MIPS是230纳秒。在12MIPS下运行的PIC16F1454实际上超过250 ns!当你删除开场白时,情况会好得多。另外要考虑的事情是,如果同时开始一个低优先级中断,我们的高优先级中断将被延迟,直到低优先级ISR重写STATUS为止。因此,必须优化所有较低优先级中断的序言,以获得最佳延迟。
举报

唐红菊

2020-4-29 07:01:29
只要您在汇编中编写ISR,就可以利用MCU ASE特性(对于具有该特性的所有CPU,缺省情况下可能启用中断向量预取)。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分