OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3777|回复: 2

双adc同时规则和注入怎么同时使用dma传输?

[复制链接]

4

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2016-1-25
在线时间
16 小时
发表于 2016-2-5 14:18:31 | 显示全部楼层 |阅读模式
1金钱
我是这样的,系统有10个采样,6个用规则采样,4个用注入采样。就是在电机pwm有效期间采样相电流。使用了双adc模式。现在的问题:规则转换已经使用了dma通道1,而注入式没法使用了?只能用注入式完毕中断吗?求指点。。。。

配置:

[mw_shl_code=c,false]/* ------------ ADC1~ADC2 reguler channel configuration ----------------- */
    ADC_InitStructure.ADC_Mode = ADC_Mode_RegInjecSimult; /* »ìoÏí¬2½1æÔò+í¬2½×¢èëÄ£ê½ */
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; /* DISABLE */
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = NUM_OF_REG_CHANNEL;
    ADC_Init(ADC1, &ADC_InitStructure);
    ADC_Init(ADC2, &ADC_InitStructure);
    ADC_EXT_TRIG_ENABLE(ADC2); /* adc21æÔòí¨μàía2¿′¥·¢ */

    /* Regular ChanneléèÖÃ2é¼ˉË3Dòoíê±¼ä.éèÖÃ3éË«adcoó,dmaóÃ32bit′«êä,μí16bitêÇadc1í¨μà,¸ß16bitêÇadc2í¨μà */
    ADC_RegularChannelConfig(ADC1, CH5_RESERVED,          1, ADC_SampleTime_13Cycles5);//0
    ADC_RegularChannelConfig(ADC1, CH6_VREF_1_65,   2, ADC_SampleTime_13Cycles5);// 2
    ADC_RegularChannelConfig(ADC1, CH12_BAT_IN,         3, ADC_SampleTime_13Cycles5);// 4
    ADC_RegularChannelConfig(ADC1, CH13_15VAD,           4, ADC_SampleTime_13Cycles5);//6
    ADC_RegularChannelConfig(ADC1, CH14_RIGHT_BUS_CURRENT,        5, ADC_SampleTime_13Cycles5);//8
        ADC_RegularChannelConfig(ADC1, CH15_LEFT_BUS_CURRENT,        6, ADC_SampleTime_13Cycles5);//10

    /* Regular Channel */
        ADC_RegularChannelConfig(ADC2, CH15_LEFT_BUS_CURRENT,1, ADC_SampleTime_13Cycles5);// 1
        ADC_RegularChannelConfig(ADC2, CH5_RESERVED,          2, ADC_SampleTime_13Cycles5);// 3
    ADC_RegularChannelConfig(ADC2, CH6_VREF_1_65,   3, ADC_SampleTime_13Cycles5);//5
    ADC_RegularChannelConfig(ADC2, CH12_BAT_IN,         4, ADC_SampleTime_13Cycles5);//7
    ADC_RegularChannelConfig(ADC2, CH13_15VAD,           5, ADC_SampleTime_13Cycles5);//9
        ADC_RegularChannelConfig(ADC2, CH14_RIGHT_BUS_CURRENT,6, ADC_SampleTime_13Cycles5);//11

        /* Ôù′ÎÅäÖÃadc1oíadc2μÄ×¢èë×a»»1æÔò.èç1û×a»»ìõ¼tÎaTIM8CC4,Ôòμ±cc42úéúê±,adc1
         * ½«′¥·¢,¶øadc2»á±»×÷ÎaslaveÆô¶ˉ×a»».ÕaàïμÄí¨μà¿éòÔóÃà′2aá¿Ïàμçá÷.
         */
    /* Injected Channel×¢èëí¨μà×î¶à4¸ö,2ο¼jsqr¼Ä′æÆ÷ */
    ADC_InjectedSequencerLengthConfig(ADC1, NUM_OF_INJ_CHANNEL);

    ADC_InjectedChannelConfig(ADC1, CH3_RESERVED, 1, ADC_SampleTime_13Cycles5);
    ADC_InjectedChannelConfig(ADC1, CH4_RESERVED, 2, ADC_SampleTime_13Cycles5);
        ADC_InjectedChannelConfig(ADC1, CH10_RESERVED, 3, ADC_SampleTime_13Cycles5);
    ADC_InjectedChannelConfig(ADC1, CH11_RESERVED, 4, ADC_SampleTime_13Cycles5);

    ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4);
    ADC_ExternalTrigInjectedConvCmd(ADC1, ENABLE);

        /* ---------------------- ADC2 configuration ------------------------------- */
    /* Injected Channel */
    ADC_InjectedSequencerLengthConfig(ADC2, NUM_OF_INJ_CHANNEL);

    ADC_InjectedChannelConfig(ADC2, CH11_RESERVED, 1, ADC_SampleTime_13Cycles5);
    ADC_InjectedChannelConfig(ADC2, CH10_RESERVED, 2, ADC_SampleTime_13Cycles5);
        ADC_InjectedChannelConfig(ADC2, CH4_RESERVED, 3, ADC_SampleTime_13Cycles5);
    ADC_InjectedChannelConfig(ADC2, CH3_RESERVED, 4, ADC_SampleTime_13Cycles5);

    ADC_ExternalTrigInjectedConvConfig(ADC2, ADC_ExternalTrigInjecConv_None);  //GDD¾Æ¬Dè¼óÕa¾ä»°£¬STÄü¼æèY

    ADC_ExternalTrigInjectedConvCmd(ADC2, ENABLE);

        /* ------------------------------------------------------------------------- */

    /**
     * ADC1
     */
    /* Enable ADC1 DMA */
    ADC_DMA_ENABLE(ADC1);
    /* Enable ADC1 */
    ADC_ENABLE(ADC1);
    /* Enable ADC1 reset calibaration register */
    ADC_RST_CAL(ADC1);
    /* Check the end of ADC1 reset calibration register */
    while(ADC_GET_RST_CAL_STATUS(ADC1));
    /* Start ADC1 calibaration */
    ADC_START_CAL(ADC1);
    /* Check the end of ADC1 calibration */
    while(ADC_GET_CAL_STATUS(ADC1));

    /* Enable ADC2 */
    ADC_ENABLE(ADC2);
    ADC_RST_CAL(ADC2);
    while(ADC_GET_RST_CAL_STATUS(ADC2));
    ADC_START_CAL(ADC2);
    while(ADC_GET_CAL_STATUS(ADC2));

        /**
         * DMA1 channel1 deinitialize
         */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
    DMA_DISABLE(DMA1_Channel1);
    DMA1_Channel1->CCR = 0;
    DMA1_Channel1->CNDTR = 0;
    DMA1_Channel1->CMAR = 0;
    DMA1_Channel1->CPAR = 0;
    CLR_IT_FLAG(DMA1, Channel1);

    /**
     * DMA1 channel1 configuration
     */
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADC1->DR);
    DMA_InitStructure.DMA_MemoryBaseAddr     = (uint32_t)&g_adc12_value[0];
    DMA_InitStructure.DMA_DIR                = DMA_DIR_PeripheralSRC;
    DMA_InitStructure.DMA_BufferSize         = NUM_OF_REG_CHANNEL; /* Ö¸ê¾DMAê1óöàéù¸öêy¾Y,2»Äü3¬1yêy×é′óD¡.μ¥λêÇDMA_MemoryDataSize */
    DMA_InitStructure.DMA_PeripheralInc      = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc          = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; /* ÕaêÇADC2ê1óÃDMAμÄòaÇó.low 16bit=adc1,high 16bit=adc2 */
    DMA_InitStructure.DMA_MemoryDataSize     = DMA_MemoryDataSize_Word;
    DMA_InitStructure.DMA_Mode               = DMA_Mode_Normal; /* normal=Ö»′«Ëíò»′Î */
    DMA_InitStructure.DMA_Priority           = DMA_Priority_VeryHigh;
    DMA_InitStructure.DMA_M2M                = DMA_M2M_Disable;
    DMA_Init(DMA1_Channel1, &DMA_InitStructure);[/mw_shl_code]


最佳答案

查看完整内容[请看2#楼]

可以结贴了,高手在博客 http://www.tuicool.com/articles/ZniQFr
诚交各路大侠
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2016-1-25
在线时间
16 小时
 楼主| 发表于 2016-2-5 14:18:32 | 显示全部楼层
诚交各路大侠
回复

使用道具 举报

4

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2016-1-25
在线时间
16 小时
 楼主| 发表于 2016-2-18 15:18:37 | 显示全部楼层
结贴:注入式的还是要用中断才行地
诚交各路大侠
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 03:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表