用示波器抓了一下EDMA的中断函数处理时间,都是在微秒级别的,这个mcbsp的发送Ping-pong是在5毫秒左右微调的,应该不会出现传输块跟修改块同一块的情况,还有你说的edma配置,出问题时我讲所有的全局寄存器和ping-pong这个chain都打印出来了,配置上跟好的时候是一致的。
现在还有另外一个问题,我还使用了串口的发送edma,大概60毫秒左右发送一次,用事件触发,edma的中断处理函数参考startware里面的例子的中断处理,但是很奇怪的是每隔几百次就会有一次在读取IPR时,只有mcbsp的发送IPR置位,然后按照startware里面的EDMA中断处理函数的处理,在清除对应的IPR之后会再次读取IPR寄存器,就是在这次读取的时候串口发送的IPR就置位了,这样子就出现了串口发送edma就会丢事件就是你说的event missed,然后我将edma的中断处理函数里面的读取IPR值修改为不是每次清除一个IPR就重新读取一次IPR,修改为就读取一次IPR,然后保存到局部变量,只进行第一个读取的IPR的清除和中断回调处理,这样子带来的结果是所有的EDMA中断都不触发了,然后我又改为关闭中断嵌套,每次在EDMA的中断处理函数里面就就只执行一个事件清除,因为在一个EDMA中断处理函数里面清除两个IPR的话必然会导致有一个事件是丢失了,请问这个问题该怎么解决?
也就是说我将EDMA的中断处理函数的实现改为只读取一次IPR的时候,就算这次读取有两个地方置位我都处理了,以后的EDMA也不产生中断了,必须要清理完第一次读取的IPR对应置位位置之后,再次读取IPR寄存器,保证读取结果全部为零,再退出EDMA中断处理函数才能保证下次EDMA中断还能正常产生,但是这样子就会出现上面说的几百次就会有一个事件丢失,因为一个事件触发了中断处理函数,但是中断处理函数却处理掉了两个事件。
用示波器抓了一下EDMA的中断函数处理时间,都是在微秒级别的,这个mcbsp的发送Ping-pong是在5毫秒左右微调的,应该不会出现传输块跟修改块同一块的情况,还有你说的edma配置,出问题时我讲所有的全局寄存器和ping-pong这个chain都打印出来了,配置上跟好的时候是一致的。
现在还有另外一个问题,我还使用了串口的发送edma,大概60毫秒左右发送一次,用事件触发,edma的中断处理函数参考startware里面的例子的中断处理,但是很奇怪的是每隔几百次就会有一次在读取IPR时,只有mcbsp的发送IPR置位,然后按照startware里面的EDMA中断处理函数的处理,在清除对应的IPR之后会再次读取IPR寄存器,就是在这次读取的时候串口发送的IPR就置位了,这样子就出现了串口发送edma就会丢事件就是你说的event missed,然后我将edma的中断处理函数里面的读取IPR值修改为不是每次清除一个IPR就重新读取一次IPR,修改为就读取一次IPR,然后保存到局部变量,只进行第一个读取的IPR的清除和中断回调处理,这样子带来的结果是所有的EDMA中断都不触发了,然后我又改为关闭中断嵌套,每次在EDMA的中断处理函数里面就就只执行一个事件清除,因为在一个EDMA中断处理函数里面清除两个IPR的话必然会导致有一个事件是丢失了,请问这个问题该怎么解决?
也就是说我将EDMA的中断处理函数的实现改为只读取一次IPR的时候,就算这次读取有两个地方置位我都处理了,以后的EDMA也不产生中断了,必须要清理完第一次读取的IPR对应置位位置之后,再次读取IPR寄存器,保证读取结果全部为零,再退出EDMA中断处理函数才能保证下次EDMA中断还能正常产生,但是这样子就会出现上面说的几百次就会有一个事件丢失,因为一个事件触发了中断处理函数,但是中断处理函数却处理掉了两个事件。
举报