完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
芯片:cyt4bf
我使用dma的方式采集adc数据,运行以下程序没有反应。我在调试模式下,查看srcAddr 的数据,发现数据已经采集到了,而且一直在变化。有没有人能看下有没有什么问题,这段程序是根据官方手册上写的,只改了TRIG_OUT_1TO1_1_PASS_CH_DONE_TO_PDMA031这个触发器。我觉得是这个触发器的问题,我该如何发现问题。 I use DMA to collect adc data, but there is no response when I run the following program. I checked the data of srcAddr in the debug mode and found that the data has been collected and it has been changing. Can anyone see if there is any problem? This program is based on the official manual, only the trigger TRIG_OUT_1TO1_1_PASS_CH_DONE_TO_PDMA031 is changed.I think it is the problem of this trigger, how can I find the problem. #include "cy_project.h" #include "cy_device_headers.h" #define ADC_MACRO PASS0_SAR0 #define ADC_GROUP_NUMBER_OF_CHANNELS (32ul) /* ADC logical channel to be used */ #define ADC_GROUP_FIRST_CHANNEL (0ul) #define ADC_GROUP_LAST_CHANNEL (ADC_GROUP_FIRST_CHANNEL + ADC_GROUP_NUMBER_OF_CHANNELS - 1ul) #define ADC_CH_INTR_BASE pass_0_interrupts_sar_0_IRQn #define BUFFER_SIZE_IN_WORD (32*50ul) //adc0 32channel, collect 50 datas per channel in 50ms. #define BUFFER_SIZE_IN_BYTE (BUFFER_SIZE_IN_WORD * 4ul) #define DW_CHANNEL 27ul #define DW_CH_INTR cpuss_interrupts_dw0_27_IRQn #define ADC_TO_DMA_TRIG TRIG_OUT_1TO1_1_PASS_CH_DONE_TO_PDMA031 static uint32_t adc_DestBuffer[BUFFER_SIZE_IN_BYTE] = {0ul}; static cy_stc_pdma_descr_t stcDescr; static const cy_stc_pdma_chnl_config_t chnlConfig = { .PDMA_Descriptor = stcDescr, .preemptable = 0ul, .priority = 0ul, .enable = 1ul, }; static const cy_stc_pdma_descr_config_t stcDmaDescrConfig = { .deact = 0ul, .intrType = CY_PDMA_INTR_DESCR_CMPLT, .trigoutType = CY_PDMA_TRIGOUT_DESCR_CMPLT, .chStateAtCmplt = CY_PDMA_CH_ENABLED, .triginType = CY_PDMA_TRIGIN_XLOOP, .dataSize = CY_PDMA_WORD, .srcTxfrSize = 0ul, /* as specified in DATA_SIZE */ .destTxfrSize = 0ul, /* as specified in DATA_SIZE */ .descrType = CY_PDMA_2D_TRANSFER, .srcAddr = (void *) ADC_MACRO->CH[ADC_GROUP_FIRST_CHANNEL].unRESULT.u32Register, .destAddr = (void *)adc_DestBuffer, .srcXincr = 16ul, /* address +40h */ .destXincr = 50ul, /* 50 datas of per channel */ .xCount = ADC_GROUP_NUMBER_OF_CHANNELS, .srcYincr = 0ul, /* Not increments */ .destYincr = 1ul, /* Destination address +4h */ .yCount = 50ul, /* Store results for 50 times */ .descrNext = stcDescr }; static const cy_stc_sysint_irq_t stc_sysint_irq_cfg = { .sysIntsrc=DW_CH_INTR, .intIdx = CPUIntIdx2_IRQn, .isEnabled = true, }; void DW0_Ch_IntHandler(void) { uint32_t masked; masked = Cy_PDMA_Chnl_GetInterruptStatusMasked(DW0, DW_CHANNEL); if ((masked CY_PDMA_INTRCAUSE_COMPLETION) != 0ul) { /* Clear Complete DMA interrupt flag */ Cy_PDMA_Chnl_ClearInterrupt(DW0, DW_CHANNEL); /* Read the port status */ } else { CY_ASSERT(false); } } void DW0_Ch_IntHandler(void); void adcPDMAInit(void) { /* Initialize Enable DW */ Cy_PDMA_Disable(DW0); Cy_PDMA_Chnl_DeInit(DW0, DW_CHANNEL); Cy_PDMA_Descr_Init( stcDescr, stcDmaDescrConfig); Cy_PDMA_Chnl_Init(DW0, DW_CHANNEL, chnlConfig); Cy_PDMA_Chnl_Enable(DW0, DW_CHANNEL); Cy_PDMA_Chnl_SetInterruptMask(DW0, DW_CHANNEL); Cy_PDMA_Enable(DW0); /* Trigger MUX */ Cy_TrigMux_Connect1To1(ADC_TO_DMA_TRIG, CY_TR_MUX_TR_INV_DISABLE, TRIGGER_TYPE_EDGE, 0ul); /* Interrupt Initialization */ Cy_SysInt_InitIRQ( stc_sysint_irq_cfg); Cy_SysInt_SetSystemIrqVector(stc_sysint_irq_cfg.sysIntSrc, DW0_Ch_IntHandler); NVIC_SetPriority(stc_sysint_irq_cfg.intIdx, 0ul); NVIC_EnableIRQ(stc_sysint_irq_cfg.intIdx); /* Issue SW trigger */ Cy_Adc_Channel_SoftwareTrigger( ADC_MACRO->CH[ADC_GROUP_FIRST_CHANNEL]); //has been called in period function. } |
|
相关推荐
1个回答
|
|
根据您提供的信息,问题可能出在触发器的配置上。您可以尝试以下方法来发现问题所在:
1. 检查触发器的配置:确保TRIG_OUT_1TO1_1_PASS_CH_DONE_TO_PDMA031触发器已正确配置。您可以参考官方手册或其他资源,确保触发器的设置是正确的。 2. 检查DMA通道的配置:确保DMA通道已正确配置,并与触发器配合使用。您可以检查DMA通道的初始化代码,确保它与您的采集配置相匹配。 3. 检查ADC配置:确保ADC已正确配置。您可以检查ADC的初始化代码,确保它与您的需求相符。 4. 检查DMA缓冲区:您可以检查DMA缓冲区的设置,确保它与您的采集配置相匹配。确认缓冲区的地址和大小设置正确。 5. 检查中断处理:如果您使用中断来处理DMA传输完成的事件,确保中断的设置正确。您可以检查中断处理的代码,确认它与您的需求相符。 6. 确认采集频率:如果您在短时间内采集大量数据,可能会导致程序没有响应。您可以尝试减少采集频率,或者在采集过程中增加延时,看看是否有改善。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12025 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 07:09 , Processed in 0.492142 second(s), Total 70, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号