MSPM0G3507学习——定时器+DMA+ADC

一、用DMA进行ADC数据传输,每采集1k个点后进行转换处理

时钟部分采用默认设置,勾选Enable Repeat Mode (连续采集1k个点)

Power Down Mode 选用 Manual

使能DMA

由于是单通道ADC,则一个通道每测一次传一个,DMA Sample Count 为1

利用中断触发DMA,则不开启ADC的中断,在DMA Config下选用中断

如果使用FIFO模式,则DMA配置改变:

二、定时器+ADC+DMA

实现可控采样率

通过定时器触发ADC采样,并实现1MHz采样率。

周期设置保持默认即可

这里的Trigger Source与“一”处不同

之前是software软件触发,在代码中通过DL_ADC12_startConversion() 语句触发,这里需要定时器定时产生事件Event触发。

这里没用FIFO

添加定时器Timer,采用周期性倒数模式Periodic Down Counting,由于采样率是1MHz,则定时时间设置为1us。

在Event Config 中选择一个通道(此处选择CH1),选择零事件。

结合Periodic Down Counting,则每次倒数到0时,定时器都会发送一次零事件。

在ADC12中进行Event Config

在定时器中是Publisher Channel,这里ADC中是Subscriber Channel。

即定时器每1us就会产生一次零事件,而ADC为事件驱动,则每1us都会实现一次ADC转换。

在ADC Memory Config中改变Trigger Mode,这样就不会因为设置了Repeate Mode而自动给自己Start标志位置位,从而自动触发。会等待外部事件到来。

#include "ti_msp_dl_config.h"
uint16_t gADCSamples[1000];

int main(void)
{
    SYSCFG_DL_init();

    DL_DMA_setSrcAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t) 0x40556280);
    DL_DMA_setDestAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t) &gADCSamples[0]);
    DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);

    NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);
    DL_ADC12_startConversion(ADC12_0_INST);

    while (1) {
    }
}

 void ADC12_0_INST_IRQHandler(void)
{
    switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) 
    {
        case DL_ADC12_IIDX_DMA_DONE:
            //DL_TimerA_stopCounter(TIMER_0_INST);
            //数据处理部分,此处无
            SYSCFG_DL_ADC12_0_init();
            SYSCFG_DL_DMA_init();

            DL_DMA_setSrcAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t) 0x40556280);
            DL_DMA_setDestAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t) &gADCSamples[0]);
            DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);

            NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);
            DL_ADC12_startConversion(ADC12_0_INST);

            //DL_TimerA_stopCounter(TIMER_0_INST);
            break;
        default:
            break;
    }
}

采集成功哈哈

  • 20
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值