找回密码
 立即注册

QQ登录

只需一步,快速开始

PDMA 启动通道0与1发生冲突?

查看数: 724 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-1-29 21:45

正文摘要:

本帖最后由 keyway 于 2024-1-29 21:52 编辑 使用 M031FC1AE 晶片 通道0使用 SPI输出(无输入控制) 通道1使用 ADC输入 按照官方 PDMA_ADC_1882ksps_ContinuousScanMode 范例修改成双通道模式PDMA 每次运行跑5~10 ...

回复

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

回复 chrishu 发表于 2024-2-21 11:35:01
keyway 发表于 2024-2-21 00:02
今天测试,ADC PDMA仍然传送5~6次后停止中断,导致ADC传送永远无法完成?
M031FC1AE 晶片是否能同时开起2个 ...

你要debug看一下,是PDMA还是ADC停了?在哪里停的?
如果如你第一次说的: 把 ABTIF 中断判断程式删除后,可正常运行
那应该是传输过程出错,中断里停止的ADC 和PDMA触发。
可以将能在开发板上复现问题的代码发给我们试一下。
回复 keyway 发表于 2024-2-21 00:02:58
本帖最后由 keyway 于 2024-2-21 00:29 编辑

今天测试,ADC PDMA仍然传送5~6次后停止中断,导致ADC传送永远无法完成?
M031FC1AE 晶片是否能同时开起2个通道传输?
回复 chrishu 发表于 2024-1-31 08:54:45
keyway 发表于 2024-1-30 22:53
~发送PDMA时,CNT已经归零(速度很快)~

规格书...

通道传完后,传输模式会自动回到IDEL状态。也就是说进传完中断时,传输模式已经是IDEL了。
AHB总线错误,应该是PDMA传输出错,那么传输的数据也可能是错误的,这时可以停止传输丢掉数据。这个错误发生的概率太低,所以基本都没添加相关处理代码。
回复 keyway 发表于 2024-1-30 22:53:08
本帖最后由 keyway 于 2024-1-30 22:57 编辑
chrishu 发表于 2024-1-30 16:43
ABTIF中断:发生AHB总线错误。没有进ABORT中断说明没有发生AHB总线错误。
TDIF中断:通道传完中断。
你在 ...

~发送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错误)
回复 chrishu 发表于 2024-1-30 16:43:57
游客 60.248.240.x 发表于 2024-1-30 11:56
ABORT中断已经提示传送"违"完成( SPI_PDMA_Done = 0;  ADC_PDMA_Done=0;)
所以主程式可判断重传,没问题!!! ...

ABTIF中断:发生AHB总线错误。没有进ABORT中断说明没有发生AHB总线错误。
TDIF中断:通道传完中断。
你在AHB错误和传完中断里都设置传完标志=0。在主程序里怎么区分是传完还是发生了错误?
你在主函数里等不到传完标志可能的原因:
一:没有开始传输
二:已传输数据的个数< 设定的个数。
可以debug看一下PDMA的寄存器里CNT的值,就知道是没开始传输还是传输的数据不够。
也可以开启超时中断,如果已经开始传输超时了数据还未传完,就会进超时中断。如果没开始传输或者传完不会进超时中断。
hidden
回复 游客 发表于 2024-1-30 11:56:35

ABORT中断已经提示传送"违"完成( SPI_PDMA_Done = 0;  ADC_PDMA_Done=0;)
所以主程式可判断重传,没问题!!!
但Debug时, SPI_PDMA_Done 及 ADC_PDMA_Done永远等于"1",代表没进入ABORT中断程序!!

回复 chrishu 发表于 2024-1-30 11:33:45
本帖最后由 chrishu 于 2024-1-30 11:39 编辑

SPI_PDMA_LoopTest例程使用的双通道你在PDMA_INTSTS_ABTIF_Msk中断里关闭了外设触发PDMA,那肯定不会再传输了
新唐MCU