keyway 发表于 2024-2-21 00:02 你要debug看一下,是PDMA还是ADC停了?在哪里停的? 如果如你第一次说的: 把 ABTIF 中断判断程式删除后,可正常运行 那应该是传输过程出错,中断里停止的ADC 和PDMA触发。 可以将能在开发板上复现问题的代码发给我们试一下。 |
keyway 发表于 2024-1-30 22:53 通道传完后,传输模式会自动回到IDEL状态。也就是说进传完中断时,传输模式已经是IDEL了。 AHB总线错误,应该是PDMA传输出错,那么传输的数据也可能是错误的,这时可以停止传输丢掉数据。这个错误发生的概率太低,所以基本都没添加相关处理代码。 |
本帖最后由 keyway 于 2024-1-30 22:57 编辑 chrishu 发表于 2024-1-30 16:43 ~发送PDMA时,CNT已经归零(速度很快)~ 规格书... If software configures the operation mode to idle state, the PDMA controller will not perform any transfer and then clear this operation request. Finishing this task will also generate an interrupt to CPU if corresponding PDMA interrupt bit is enabled 如果软件配置操作模式为空闲状态,PDMA控制器不会执行任何传输,并清除 这个操作请求。如果相应的PDMA中断位被使能,完成这个任务后也会给CPU产生中断。 疑问1~设置PDMA传输时,是否还要判断是否为IDEL模式?(目前中断只判断PDMA传送完成,主程式再启动PDMA) 疑问2~AHB总线错误不处理是否会影响中断?(官方范例USB与SPI通讯也没处理AHB错误) |
游客 60.248.240.x 发表于 2024-1-30 11:56 ABTIF中断:发生AHB总线错误。没有进ABORT中断说明没有发生AHB总线错误。 TDIF中断:通道传完中断。 你在AHB错误和传完中断里都设置传完标志=0。在主程序里怎么区分是传完还是发生了错误? 你在主函数里等不到传完标志可能的原因: 一:没有开始传输 二:已传输数据的个数< 设定的个数。 可以debug看一下PDMA的寄存器里CNT的值,就知道是没开始传输还是传输的数据不够。 也可以开启超时中断,如果已经开始传输超时了数据还未传完,就会进超时中断。如果没开始传输或者传完不会进超时中断。 |
ABORT中断已经提示传送"违"完成( SPI_PDMA_Done = 0; ADC_PDMA_Done=0;) 所以主程式可判断重传,没问题!!! 但Debug时, SPI_PDMA_Done 及 ADC_PDMA_Done永远等于"1",代表没进入ABORT中断程序!! |