打印
[demo程序]

NV32F101x-模数转换试验(FIFO模式软件触发)

[复制链接]
735|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
詹求实|  楼主 | 2020-5-28 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/**********************************************************************
*
* 实验名称:模数转换试验(FIFO模式软件触发)
* 实验平台:NV32开发板
* 板载芯片:NV32F101FL64E
* 实验效果:FIFO深度设定为3级,初始化ADC模块后,当FIFO采集数据满则开始
*           转换,然后通过读取转换结果寄存器读取FIFO中的转换结果。每次
*           读取一个转换结果读取3次
*
************************************************************************/

使用特权

评论回复

相关帖子

沙发
詹求实|  楼主 | 2020-5-28 10:16 | 只看该作者
#include "common.h"
#include "ics.h"
#include "rtc.h"
#include "uart.h"
#include "adc.h"
#include "pmc.h"
#include "sysinit.h"

/**********************************************************************/
uint16_t u16ADC_ConversionBuff[16];
uint16_t u16ADC_ConversionCount = 0;
volatile uint8_t  u8ADC_ConversionFlag = 0;

int main (void);
void ADC0_CallBack( void );
/******************************************************************************/

int main (void)
{
    uint8_t         u8Ch;
    ADC_ConfigType  sADC_Config = {0};

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

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

               
        while(1)
        {
              /*选择通道开始转换*/
              u8ADC_ConversionFlag = 0;
        ADC_SetChannel(ADC0,ADC_CHANNEL_AD14_TEMPSENSOR);
        ADC_SetChannel(ADC0,ADC_CHANNEL_AD29_VREFH);
        ADC_SetChannel(ADC0,ADC_CHANNEL_AD30_VREFL);
        /*等待转化完成 */
        while( !u8ADC_ConversionFlag);

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

            printf("0x%x,",u16ADC_ConversionBuff[u8Ch]);
        }
        printf("\r\n");
        printf("input any character to start a new conversion!\r\n");
        u8Ch = UART_GetChar(TERM_PORT);
        u16ADC_ConversionCount = 0;
        }

}

使用特权

评论回复
板凳
詹求实|  楼主 | 2020-5-28 10:16 | 只看该作者
/***************************************************************************
+FUNCTION----------------------------------------------------------------
*
* [url=home.php?mod=space&uid=247401]@brief[/url]  ADC回调函数中,在回调函数里读取转换结果
*        
* @param  none
*
* [url=home.php?mod=space&uid=266161]@return[/url] none
*

*****************************************************************************/

void ADC0_CallBack( void )
{   
       
    while( !ADC_IsFIFOEmptyFlag(ADC0) ) //结果FIFO中有有效的新数据
    {
        if( u16ADC_ConversionCount < 3 )  //读取转换结果,将结果FIFO中的数据全部读出
        {
            u16ADC_ConversionBuff[u16ADC_ConversionCount++] = ADC_ReadResultReg(ADC0);
        }
        else
        {
            ADC_ReadResultReg(ADC0); //读转换结果寄存器
        }               
    }

    u8ADC_ConversionFlag = 1;
}
/********************************************************************/

使用特权

评论回复
地板
uiint| | 2020-6-3 20:07 | 只看该作者
FIFO模式软件触发?  

使用特权

评论回复
5
hellosdc| | 2020-6-3 20:07 | 只看该作者
模数转换速度快不快呢?  

使用特权

评论回复
6
mituzu| | 2020-6-3 20:07 | 只看该作者
FIFO采集 很不错呢。

使用特权

评论回复
7
suzhanhua| | 2020-6-3 20:07 | 只看该作者
转换的速度这么快吗?   

使用特权

评论回复
8
xietingfeng| | 2020-6-3 20:07 | 只看该作者
为什么不使用DMA呢   

使用特权

评论回复
9
isseed| | 2020-6-3 20:08 | 只看该作者
给力,学习一下。      

使用特权

评论回复
10
wangdezhi| | 2020-6-3 20:08 | 只看该作者
这个也是M3内核 的吗   

使用特权

评论回复
11
biechedan| | 2020-6-3 20:08 | 只看该作者
为什么要使用fifo呢?   

使用特权

评论回复
12
chenci2013| | 2020-6-3 20:08 | 只看该作者
      

使用特权

评论回复
13
gygp| | 2020-6-3 20:08 | 只看该作者
模数转换是自带的吗     

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

135

帖子

0

粉丝