[demo程序] ADC的FIFO操作方法

[复制链接]
 楼主| 小明的同学 发表于 2020-3-24 21:20 | 显示全部楼层 |阅读模式
  1. /**********************************************************************
  2. *
  3. * 实验名称:模数转换试验(FIFO模式软件触发)
  4. * 实验平台:NV32开发板
  5. * 板载芯片:NV32F100FL64E
  6. * 实验效果:FIFO深度设定为3级,初始化ADC模块后,当FIFO采集数据满则开始
  7. *           转换,然后通过读取转换结果寄存器读取FIFO中的转换结果。每次
  8. *           读取一个转换结果读取3次
  9. *
  10. ************************************************************************/

  11. #include "common.h"
  12. #include "ics.h"
  13. #include "rtc.h"
  14. #include "uart.h"
  15. #include "adc.h"
  16. #include "pmc.h"
  17. #include "sysinit.h"

  18. /**********************************************************************/
  19. uint16_t u16ADC_ConversionBuff[16];
  20. uint16_t u16ADC_ConversionCount = 0;
  21. volatile uint8_t  u8ADC_ConversionFlag = 0;

  22. int main (void);
  23. void ADC_CallBack( void );
  24. /******************************************************************************/

  25. int main (void)
  26. {
  27.     uint8_t         u8Ch;
  28.     ADC_ConfigType  sADC_Config = {0};

  29.     /*系统初始化*/
  30.           sysinit();
  31.           printf("\nRunning the ADC_FIFO_demo project.\r\n");

  32.     UART_WaitTxComplete(TERM_PORT);   
  33.    
  34.     /*初始化ADC模块*/
  35.     sADC_Config.u8ClockDiv = ADC_ADIV_DIVIDE_8;       /*!< ADC时钟源分频系数为8*/
  36.     sADC_Config.u8ClockSource = CLOCK_SOURCE_ADACK;   /*!< ADC时钟源选择异步时钟*/
  37.     sADC_Config.u8Mode = ADC_MODE_12BIT;              /*!< 12位转换*/
  38.     sADC_Config.sSetting.bIntEn = 1;                  /*!< 使能中断*/
  39.     sADC_Config.u8FiFoLevel = ADC_FIFO_LEVEL3;        /*!< 3级FIFO */
  40.     ADC_SetCallBack(ADC_CallBack);
  41.     ADC_Init( ADC, &sADC_Config);           /*!< 初始化ADC*/

  42.                
  43.         while(1)
  44.         {
  45.               /*选择通道开始转换*/
  46.               u8ADC_ConversionFlag = 0;
  47.         ADC_SetChannel(ADC,ADC_CHANNEL_AD22_TEMPSENSOR);
  48.         ADC_SetChannel(ADC,ADC_CHANNEL_AD29_VREFH);
  49.         ADC_SetChannel(ADC,ADC_CHANNEL_AD30_VREFL);
  50.         /*等待转化完成 */
  51.         while( !u8ADC_ConversionFlag);

  52.         printf("ADC conversion result as below:\r\n");
  53.         for( u8Ch =0 ;u8Ch< u16ADC_ConversionCount; u8Ch ++)
  54.         {

  55.             printf("0x%x,",u16ADC_ConversionBuff[u8Ch]);
  56.         }
  57.         printf("\r\n");
  58.         printf("input any character to start a new conversion!\r\n");
  59.        // u8Ch = UART_GetChar(TERM_PORT);
  60.         u16ADC_ConversionCount = 0;
  61.         }

  62. }


  63. /***************************************************************************
  64. +FUNCTION----------------------------------------------------------------
  65. *
  66. * [url=home.php?mod=space&uid=247401]@brief[/url]  ADC回调函数中,在回调函数里读取转换结果
  67. *        
  68. * @param  none
  69. *
  70. * [url=home.php?mod=space&uid=266161]@return[/url] none
  71. *

  72. *****************************************************************************/

  73. void ADC_CallBack( void )
  74. {   
  75.        
  76.     while( !ADC_IsFIFOEmptyFlag(ADC) ) //结果FIFO中有有效的新数据
  77.     {
  78.         if( u16ADC_ConversionCount < 3 )  //读取转换结果,将结果FIFO中的数据全部读出
  79.         {
  80.             u16ADC_ConversionBuff[u16ADC_ConversionCount++] = ADC_ReadResultReg(ADC);
  81.         }
  82.         else
  83.         {
  84.             ADC_ReadResultReg(ADC); //读转换结果寄存器
  85.         }               
  86.     }

  87.     u8ADC_ConversionFlag = 1;
  88. }
  89. /********************************************************************/


xixi2017 发表于 2020-3-26 16:08 | 显示全部楼层
ARM内核?
詹求实 发表于 2020-3-26 21:47 | 显示全部楼层

M0的内核,32位的芯片。
xixi2017 发表于 2020-3-26 23:09 | 显示全部楼层
多谢楼上指教
10299823 发表于 2020-4-5 21:22 | 显示全部楼层
如何把adc0和adc1 值放入不同的fifo中
lihuami 发表于 2020-4-5 21:22 | 显示全部楼层
     
xiaoyaozt 发表于 2020-4-5 21:22 | 显示全部楼层
FIFO多大的呢  
uptown 发表于 2020-4-5 21:22 | 显示全部楼层
常用的12位ADC有那些?
cehuafan 发表于 2020-4-5 21:23 | 显示全部楼层
ADC的采样频率一般为多少  
usysm 发表于 2020-4-5 21:23 | 显示全部楼层
ADC有多少通道      
jkl21 发表于 2020-4-5 21:23 | 显示全部楼层
ADC重建的原理是什么  
wwppd 发表于 2020-4-5 21:23 | 显示全部楼层
谢谢楼主的代码   
maqianqu 发表于 2020-4-5 21:23 | 显示全部楼层
SAR ADC是种什么样的ADC呢
dspmana 发表于 2020-4-5 21:24 | 显示全部楼层
FIFO模式软件      
cehuafan 发表于 2020-4-5 21:24 | 显示全部楼层
      
uptown 发表于 2020-4-5 21:24 | 显示全部楼层
自带的ADC吗                  
usysm 发表于 2020-4-5 21:24 | 显示全部楼层
ADC的单端输入与差分输入的区别?  
xiaoyaozt 发表于 2020-4-5 21:24 | 显示全部楼层
可以存储多少      
jkl21 发表于 2020-4-5 21:24 | 显示全部楼层
什么是ADC的中断方式和查询方式  
lihuami 发表于 2020-4-5 21:24 | 显示全部楼层
谢谢分享的。   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

158

主题

1637

帖子

2

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