打印
[demo程序]

NV32F101x--模数转换试验(FIFO模式软件触,采用DMA搬运数据)

[复制链接]
1033|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
詹求实|  楼主 | 2020-5-28 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
************************************************************************/
#include "common.h"
#include "ics.h"
#include "rtc.h"
#include "uart.h"
#include "adc.h"
#include "dma.h"
#include "pmc.h"
#include "sysinit.h"

/**********************************************************************/
uint16_t u16ADC_ConversionBuff[16];
int main (void);
void DMA_Group0_Task(void);
/******************************************************************************/

int main (void)
{
    //uint8_t         u8Ch = 0;
    ADC_ConfigType  sADC_Config = {0};
    DMAMUX_ConfigType DMAMUX_Config;
          DMA_ConfigType  DMA_Config={0};
               
    /*系统初始化*/
          sysinit();
          printf("\nRunning the ADC_DMA_demo project.\r\n");

    UART_WaitTxComplete(TERM_PORT);
    LED0_Init();        
   
                /*DMA初始化*/
    DMA_Config.sSetting.bEnableDebug=1;            /*在调试模式下,DMA会停新通道启动*/
          DMA_int(DMA,&DMA_Config);  
       
                /*设置DMAMUX,选择DMA通道,DMA传输触发模式及信号请求源*/
          DMAMUX_Config.sSetting.bChannelEnable=1;        /*使能DMA通道*/
          DMAMUX_Config.sSetting.bChannelTriggerEn=0;     /*通过设定的DMA触发源触发DMA传输*/
          DMAMUX_Config.u8ChannelSource=ADC0_DMAREQ;   /*ADC转换完成信号请求DMA通道传输*/
          DMAMUX_ChannelConfig(DMAMUX,&DMAMUX_Config,DMA_CHANNEL0);
       
                /*配置DMA通道TCD*/
          DMA_Config.sSetting.bEnRequest=1;               /*使能通道硬件请求信号*/
                DMA_Config.sSetting.bEnErrIn=1;                 /*使能DMA通道错误中断*/
               
                DMA_Config.u32Saddr=(uint32_t)(&ADC0->R);       /*源地址*/
                DMA_Config.u8Ssize=DMA_DATA_TRANSFER_SIZE2;     /*每次r/w序列从源地址中读取2个字节*/
                DMA_Config.s16Soff=0;                           /*每次从源地址读取一次数据后,源地址加0*/
                DMA_Config.u8Smod=DMA_ModuloDisable;            /*禁用源地址模数功能*/
          DMA_Config.s32Slast=0;                           /*主循环结束后源地址偏移量*/
             
    DMA_Config.u32Daddr=(uint32_t)u16ADC_ConversionBuff;   /*目标地址*/                               
                DMA_Config.u8Dsize=DMA_DATA_TRANSFER_SIZE2;       /*每次向目标地址写入2个字节*/
                DMA_Config.s16Doff=2;                           /*每次向目标地址写入一次数据后目标地址加2*/
          DMA_Config.u8Dmod= DMA_ModuloDisable;           /*目标地址禁用模数功能*/
                DMA_Config.s32Dlastga=-16;                        /*主循环结束目标地址-16*/
               
          DMA_Config.u32Nbytes=16;                        /*每次次循环传输16个字节,注:次循环传输字节数,受次循环映射影响*/
                DMA_Config.u16Biter=1;                          /*主循环迭代次数为1,注:主循环迭代次数,受次循环结束后通道链功能影响*/
                DMA_Config.u8Bwc=0;                             /*DMA引擎不停转*/
                DMA_Config.sSetting.bDisableRequest=0;          /*主循环结束后不禁用通道硬件请求信号*/
               
                DMATCD_ChannelConfig(DMA,&DMA_Config,DMA_CHANNEL0);
                DMA_INTConfig(DMA,DMA_INT_Major,DMA_EnInt,DMA_CHANNEL0); /*中断设置*/
    DMA_SetCallback(DMA,DMA_IntGroup1,DMA_Group0_Task);  /*注册回调函数*/
               
               
    /*初始化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.bDmaEn = 1;                  /*!< ADC转换完成触发DMA搬运数据*/
    sADC_Config.sSetting.bIntEn = 1;                  /*!< 使能中断*/
    sADC_Config.u8FiFoLevel = ADC_FIFO_LEVEL8;        /*!< 8级FIFO */
    ADC_Init( ADC0, &sADC_Config);           /*!< 初始化ADC*/

               
        while(1)
        {
              /*选择通道开始转换*/
        ADC_SetChannel(ADC0,ADC_CHANNEL_AD14_TEMPSENSOR);
        ADC_SetChannel(ADC0,ADC_CHANNEL_AD29_VREFH);
        ADC_SetChannel(ADC0,ADC_CHANNEL_AD30_VREFL);
        ADC_SetChannel(ADC0,ADC_CHANNEL_AD14_TEMPSENSOR);
        ADC_SetChannel(ADC0,ADC_CHANNEL_AD29_VREFH);
        ADC_SetChannel(ADC0,ADC_CHANNEL_AD30_VREFL);
        ADC_SetChannel(ADC0,ADC_CHANNEL_AD29_VREFH);
        ADC_SetChannel(ADC0,ADC_CHANNEL_AD30_VREFL);

        printf("input any character to start a new conversion!\r\n");
        UART_GetChar(TERM_PORT);
        }

}


使用特权

评论回复

相关帖子

沙发
詹求实|  楼主 | 2020-5-28 10:08 | 只看该作者
/***************************************************************************
+FUNCTION----------------------------------------------------------------
*
* [url=home.php?mod=space&uid=247401]@brief[/url]  DMA中断回调函数
*        
* @param  none
*
* [url=home.php?mod=space&uid=266161]@return[/url] none
*

*****************************************************************************/
/********************************************************************/
void DMA_Group0_Task(void)
{
          uint8_t resultnum;
          LED0_Toggle();
          printf("ADC conversion result as below:\r\n");
          
                for( resultnum =0 ;resultnum< 8; resultnum ++)
                {
                        printf("0x%x,",u16ADC_ConversionBuff[resultnum]);
    }       
}

使用特权

评论回复
板凳
qcliu| | 2020-6-1 17:25 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
地板
tfqi| | 2020-6-1 17:25 | 只看该作者
代码很详细啊

使用特权

评论回复
5
wiba| | 2020-6-1 17:26 | 只看该作者
为什么叫fifo模式呢

使用特权

评论回复
6
zljiu| | 2020-6-1 17:26 | 只看该作者
感谢分享哈

使用特权

评论回复
7
coshi| | 2020-6-1 17:26 | 只看该作者
楼主辛苦了

使用特权

评论回复
8
gygp| | 2020-6-3 15:23 | 只看该作者
AD转换的DMA方式和非DMA方式有什么不同以及优缺点

使用特权

评论回复
9
chenci2013| | 2020-6-3 15:23 | 只看该作者
FIFO模式还是用了吗  

使用特权

评论回复
10
biechedan| | 2020-6-3 15:23 | 只看该作者
多通道 DMA 问题   

使用特权

评论回复
11
wangdezhi| | 2020-6-3 15:24 | 只看该作者
         

使用特权

评论回复
12
isseed| | 2020-6-3 15:24 | 只看该作者
DMA方式ADC转换   

使用特权

评论回复
13
xietingfeng| | 2020-6-3 15:24 | 只看该作者
扫描模式、连续转换模式  

使用特权

评论回复
14
suzhanhua| | 2020-6-3 15:25 | 只看该作者
最大的采样率可以到多少呢   

使用特权

评论回复
15
mituzu| | 2020-6-3 15:25 | 只看该作者
DMA其实只是做搬运工作的  

使用特权

评论回复
16
hellosdc| | 2020-6-3 15:25 | 只看该作者
         

使用特权

评论回复
17
uiint| | 2020-6-3 15:25 | 只看该作者
多通道采集可以不采用dma吗

使用特权

评论回复
18
wangdezhi| | 2020-6-3 15:26 | 只看该作者
谢谢楼主分享的资料了。   

使用特权

评论回复
19
biechedan| | 2020-6-3 15:26 | 只看该作者
传输完成标志得不到吗   

使用特权

评论回复
20
isseed| | 2020-6-3 15:26 | 只看该作者
这个的效率很高的。      

使用特权

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

本版积分规则

13

主题

135

帖子

0

粉丝