本帖最后由 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读取完成
}
}
}
|