找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

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

[复制链接]
跳转到指定楼层
楼主
keyway 发表于 2024-1-29 21:45:00 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 keyway 于 2024-1-29 21:52 编辑

使用 M031FC1AE 晶片
通道0使用 SPI输出(无输入控制)
通道1使用 ADC输入

按照官方 PDMA_ADC_1882ksps_ContinuousScanMode 范例修改成双通道模式PDMA

每次运行跑5~10秒后,其中1个通到会自动停止运行?
我把 ABTIF 中断判断程式删除后,可正常运行为什么?

是否有完整的双通道运行的范例可参考?

-----------------------------------------------------------------------------------
void PDMA_IRQHandler(void)
   {
    int32_t Intstatus;
    Intstatus = PDMA_GET_INT_STATUS(PDMA);

   if(Intstatus & PDMA_INTSTS_ABTIF_Msk)    /* 检查通道ABTIF是否有错误 */
      {
       if (PDMA_GET_ABORT_STS(PDMA) & PDMA_ABTSTS_ABTIF0_Msk)
          {
          /* 停用 SPI 主控 DMA 功能 Disable SPI master DMA function */
           SPI_DISABLE_TX_PDMA(SPI0);                     
           SPI_PDMA_Done = 0;
           PDMA_CLR_ABORT_FLAG(PDMA, PDMA_ABTSTS_ABTIF0_Msk);       // 清除ABTIF0   
          }
       else if (PDMA_GET_ABORT_STS(PDMA) & PDMA_ABTSTS_ABTIF1_Msk)
               {
                ADC_STOP_CONV(ADC);   
               
                ADC_DISABLE_PDMA(ADC);
                ADC_PDMA_Done=0;                                    
                PDMA_CLR_ABORT_FLAG(PDMA, PDMA_ABTSTS_ABTIF1_Msk);  // 清除ABTIF1
               }
      }

// 判断是否有中断  
    else if (Intstatus & PDMA_INTSTS_TDIF_Msk)  
            {
//-SPI中断----------------------------------------------------------
             if (PDMA_GET_TD_STS(PDMA) & PDMA_TDSTS_TDIF0_Msk)  // 通道"0"
                {
                 PDMA_CLR_TD_FLAGx(PDMA, PDMA_TDSTS_TDIF0_Msk); // 清除TDIF0               
                 SPI_DISABLE_TX_PDMA(SPI0);                    
                 SPI_PDMA_Done = 0;  // SPI传送完成
                }
//-ADC中断------------------------------------------------------------------------------
             else if (PDMA_GET_TD_STS(PDMA) & PDMA_TDSTS_TDIF1_Msk)  // 通道"1"
                     {
                      PDMA_CLR_TD_FLAGx(PDMA, PDMA_TDSTS_TDIF1_Msk); // 清除TDIF1
                      ADC_STOP_CONV(ADC);
                  
                      ADC_DISABLE_PDMA(ADC);
                      ADC_PDMA_Done=0;         // ADC_PDMA读取完成
                     }
            }
      }


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
 楼主| 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错误)
回复 支持 反对

使用道具 举报

板凳
 楼主| keyway 发表于 2024-2-21 00:02:58 | 显示全部楼层
本帖最后由 keyway 于 2024-2-21 00:29 编辑

今天测试,ADC PDMA仍然传送5~6次后停止中断,导致ADC传送永远无法完成?
M031FC1AE 晶片是否能同时开起2个通道传输?
回复 支持 反对

使用道具 举报

地板
 楼主| keyway 发表于 2024-2-22 23:27:53 | 显示全部楼层
本帖最后由 keyway 于 2024-2-22 23:31 编辑


PDMA_IRQHandler () 这样改是否可以?

回复 支持 反对

使用道具 举报

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

本版积分规则

新唐MCU