[技术问答] M451芯片,如何实现ADC多通道的连续转换?

[复制链接]
397|3
 楼主 | 2019-1-4 16:40 | 显示全部楼层 |阅读模式
| 2019-1-4 18:54 | 显示全部楼层
BSP里面有类似的例子,连续转换。

使用特权

评论回复
| 2019-1-7 08:29 | 显示全部楼层
這一個有
M451BSP/blob/master/SampleCode/StdDriver/EADC_ADINT_Trigger/

使用特权

评论回复
 楼主 | 2019-1-12 10:07 | 显示全部楼层
jasontu 发表于 2019-1-7 08:29
這一個有
M451BSP/blob/master/SampleCode/StdDriver/EADC_ADINT_Trigger/

是如下代码吗?哪里可以看出来是多通道依转换呢?
如果启动呢?启动后第一个转换的是什么通道?

  1.             /* Set the ADC internal sampling time, input mode as single-end and enable the A/D converter */
  2.             EADC_Open(EADC, EADC_CTL_DIFFEN_SINGLE_END);
  3.             EADC_SetInternalSampleTime(EADC, 6);

  4.             /* Configure the sample 4 module for analog input channel 0 and enable ADINT0 trigger source */
  5.             EADC_ConfigSampleModule(EADC, 4, EADC_ADINT0_TRIGGER, 0);
  6.             /* Configure the sample 5 module for analog input channel 1 and enable ADINT0 trigger source */
  7.             EADC_ConfigSampleModule(EADC, 5, EADC_ADINT0_TRIGGER, 1);
  8.             /* Configure the sample 6 module for analog input channel 2 and enable ADINT0 trigger source */
  9.             EADC_ConfigSampleModule(EADC, 6, EADC_ADINT0_TRIGGER, 2);
  10.             /* Configure the sample 7 module for analog input channel 3 and enable ADINT0 trigger source */
  11.             EADC_ConfigSampleModule(EADC, 7, EADC_ADINT0_TRIGGER, 3);

  12.             /* Clear the A/D ADINT0 interrupt flag for safe */
  13.             EADC_CLR_INT_FLAG(EADC, 0x1);

  14.             /* Enable the sample module 7 interrupt */
  15.             EADC_ENABLE_INT(EADC, 0x1);//Enable sample module  A/D ADINT0 interrupt.
  16.             EADC_ENABLE_SAMPLE_MODULE_INT(EADC, 0, (0x1 << 7));//Enable sample module 7 interrupt.
  17.             NVIC_EnableIRQ(ADC00_IRQn);

  18.             /* Reset the ADC indicator and trigger sample module 7 to start A/D conversion */
  19.             g_u32AdcIntFlag = 0;
  20.             g_u32COVNUMFlag = 0;
  21.             EADC_START_CONV(EADC, (0x1 << 7));

  22.             /* Wait EADC interrupt (g_u32AdcIntFlag will be set at IRQ_Handler function) */
  23.             while(g_u32AdcIntFlag == 0);
  24.             /* Reset the EADC interrupt indicator */
  25.             g_u32AdcIntFlag = 0;

  26.             /* Wait EADC interrupt (g_u32AdcIntFlag will be set at IRQ_Handler function) */
  27.             while(g_u32AdcIntFlag == 0);
  28.             /* Reset the EADC interrupt indicator */
  29.             g_u32AdcIntFlag = 0;

  30.             /* Disable the sample module 7 interrupt */
  31.             EADC_DISABLE_SAMPLE_MODULE_INT(EADC, 0, (0x1 << 7));

  32.             /* Get the conversion result of the sample module */
  33.             for(u32SAMPLECount = 0; u32SAMPLECount < 4; u32SAMPLECount++)
  34.                 i32ConversionData[u32SAMPLECount] = EADC_GET_CONV_DATA(EADC, (u32SAMPLECount + 4));

  35.             /* Wait conversion done */
  36.             while(EADC_GET_DATA_VALID_FLAG(EADC, 0xF0) != 0xF0);

  37.             /* Get the conversion result of the sample module */
  38.             for(u32SAMPLECount = 4; u32SAMPLECount < 8; u32SAMPLECount++)
  39.                 i32ConversionData[u32SAMPLECount] = EADC_GET_CONV_DATA(EADC, u32SAMPLECount);

  40.             for(g_u32COVNUMFlag = 0; (g_u32COVNUMFlag) < 8; g_u32COVNUMFlag++)
  41.                 printf("Conversion result of channel %d: 0x%X (%d)\n", (g_u32COVNUMFlag % 4), i32ConversionData[g_u32COVNUMFlag], i32ConversionData[g_u32COVNUMFlag]);
复制代码

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表