理论
单通道单次转换
- 影响采样速率的是 转换时钟 (80MHz 振荡器),ADC CLOCK SOURCE 维持默认配置
- Conversion mode: 单通道 ADC, 双通道等等
DL_ADC12_startConversion() // 默认是 0
DL_ADC12_stopConversion()
DL_ADC12_enableConversions() // 配置 sysconfig 后默认是 1
DL_ADC12_disableConversions()
- 首先调用
DL_ADC12_startConversion()
, 一次转换后再进行转换的话要再次调用DL_ADC12_enableConversions()
, 再调用DL_ADC12_startConversion()
使能 ADC 中断 DL_ADC12_startConversion(ADC12_0_INST)
单通道连续转换
使用 ADC 内部定时器
- Conversion Mode: Single
- 打开 Enable repeat mode,为使用 DMA
这时 enable 位始终是 1 - 采样模式:auto 和 manual, 一般使用 auto (看 Discription) 用定时器 0 触发采样
- Trigger Source: 选 event
- FIFO Mode: 组合两个 16 位 Memory 成 32 位,能降低调用 DMA 中断频率,提升效率;同时在 DMA 进行修改:Enable DMA Triggers 可以改成 使用 Memory10, 因为是两个合并的;DMA Sample Count 改成 6;Transfer Size 改成原来的一半;Source Length 和 Destination Length 改成 Word。DMA 起始地址改成
DL_ADC12_getFIFOAddress(ADC12_0_INST)
(ADC12_0_实例) - Power down mode: Manual,一直上电
- 采样时间 62.5 ns
DMA 配置
- Address mode 选择 fixed to block
- 选择半字节 Half Word
- Transfer Size: 1000 个之后中断
- Transfer Mode: Repeat Single,传 1000 次之后回到开头?
- 起点终点不能动
使用 定时器触发
ADC 配置
- Conversion Mode: Single
- Enable Repeat Mode
- Triuggler Source: Event 触发
Advanced Configureation - Power Down Mode: Manual
- Interrupt Configuration: DMA done
DMA Configuration
开定时器 - Timer Clock Source: BUSCLK
- Timer Mode: Periodic Down Counting
- Event Configuration: Event 1 Publisher Channel ID; Zero Event
- 修改 ADC12 的 Event Configuration:Event Subscriber Channel ID
- 在 ADC 的 Sampling Mode Condiguration / ADC Conversion Memory Configurations / Optional Configuration / Trigger Mode 改成 Valid Trigger will step to …
用 adc_max_freq_dma 例程 进行编写
- 设置 DMA 起始寄存器的地址 和 目标寄存器的地址
- 使能 DMA 通道
- 使能 ADC 中断
- 编写中断回调函数:停止定时器,打开定时器
- 不用标志位
之后只要更改定时器的 Desired Timer Period,定时器原来频率 1MHz
如何实现 4M 采样率
- Enable Repeat Mode
- 软件触发
- DMA 传输
多通道单次转换
多通道连续转换
必须用 FIFO
注
- __WFE() 是 wait for event,让处理器进入 低功耗等待状态 ,直到发生某个事件(event)为止。一旦发生中断或设置了 event flag,MCU 就会从等待中恢复。
- __BKPT() 软件断点