利用TMSC320C6764的GPIO口作为中断的输入口,每来一个中断就执行一次中断函数,在中断服务程序中中把读数的标志状态1,再进行一次从FPGA的emifa读取一次数据的程序(读数的程序写在main函数里)。但是这个时候却存在丢帧的问题,有时候中断程序执行完之后,程序直接跳过了主函数中的读数的函数。
当我把从FPGA读数的程序一起写到中断服务程序中的时候,读数就正常了。进行读数操作的次数就和执行中断服务程序的次数一样了。请问是哪里配置的有问题吗?(中断函数的初始化过程如下所示) (存在的问题如附件视频所示,视频里一共断点运行了两次发中断信号,读数的操作。第一次单步运行是正常的,中断信号的标志位也正常清0.但是第二个中断来了,执行完中断服务程序后,CCS出现视频末尾的全部变量闪黄的错误)
而且我在连续运行的时候,不管中断信号的频率是1ms 还是5ms 还是 1s 3s ,程序运行一段时间之后,未读到的数据比例始终是27%
Shine:
图片显示不出来,请点击右下角的“使用高级编辑器编辑文本”插入图片。
user6437227:
回复 Shine:
您好,请问现在可以看到图片了吗
Shine:
回复 user6437227:
可以了。能否用是示波器抓一下EMIF时序,看一下EMIF读写是否能在GPIO中断间隔的时间内完成?
user6437227:
回复 Shine:
你好 我在单步调试的时候,每次发中断信号的间隔已经很长了 但是当单步运行完中断服务程序的最后一句话以后,主程序里面还是会有这种跳过主程序的循环的情况出现。 这样的话不是说明和EMIFA读写消耗的时间无关吗?而且当我什么不不改,只是把读写数据的函数一起写到中断服务程序里的时候,就没有这种丢数据的现象了,即使是设置成1ms的中断周期,也没有丢数的现象
Shine:
回复 user6437227:
不要单步运行呢?单步的话,程序虽然停了,但是接口还是在运行的。
user6437227:
回复 Shine:
不单步运行的时候,中断还是设置的1s的触发周期,但还是一样会丢数。我在中断程序和主函数中的读数程序都加了计数。结果中断程序运行的次数还是比主函数里读数的程序运行的次数多
Shine:
回复 user6437227:
建议还是用示波器抓一下时序看看。