dsp28335 adc采样代码
时间: 2023-07-09 20:45:37 浏览: 164
SourceCode12_adc_dma_OK_adc_dma_dsp28335_
5星 · 资源好评率100%
下面是一个简单的DSP28335 ADC采样代码示例:
```c
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
// 定义 ADC 结构体指针
volatile struct ADC_REGS *AdcRegs = (struct ADC_REGS *) &AdcResult;
void InitAdc(void)
{
// 初始化 ADC
AdcRegs->ADCTRL1.bit.RESET = 1; // 重置 ADC
AdcRegs->ADCTRL1.bit.SUSMOD = 2; // 禁用休眠模式
AdcRegs->ADCTRL1.bit.ACQ_PS = 0x7; // 采样窗口为 128 个 ADC 时钟周期
AdcRegs->ADCTRL1.bit.CPS = 0; // 不使能连续采样模式
AdcRegs->ADCTRL1.bit.SEQ_CASC = 1; // 启用级联模式
AdcRegs->ADCTRL1.bit.SEQ_OVRD = 1; // 启用重载模式
AdcRegs->ADCTRL1.bit.CONT_RUN = 0; // 禁用连续模式
AdcRegs->ADCTRL1.bit.CLKDIV2EN = 0; // 不使能 ADC 时钟分频
AdcRegs->ADCTRL1.bit.CLKDIV = 0; // ADC 时钟为 CPU 时钟的 1/1
AdcRegs->ADCTRL1.bit.ADCPWDNZ = 1; // 使能 ADC
// 配置 ADC 输入通道
AdcRegs->ADCTRL3.bit.SMODE_SEL = 0; // 单端输入模式
AdcRegs->ADCTRL3.bit.ADCBGRFDN = 0x3F; // 设置 ADC 参考电压下降时间
// 配置 ADC 采样序列
AdcRegs->ADCCHSELSEQ1.bit.CONV00 = 0x0; // 选择 ADC A0 通道
AdcRegs->ADCCHSELSEQ1.bit.CONV01 = 0x1; // 选择 ADC A1 通道
AdcRegs->ADCCHSELSEQ1.bit.CONV02 = 0x2; // 选择 ADC A2 通道
AdcRegs->ADCCHSELSEQ1.bit.CONV03 = 0x3; // 选择 ADC A3 通道
// 启用 ADC 采样序列
AdcRegs->ADCTRL2.bit.RST_SEQ1 = 1; // 重置 ADC 采样序列
AdcRegs->ADCTRL2.bit.SOC_SEQ1 = 1; // 启动 ADC 采样序列 1
}
void AdcSample(void)
{
// 等待 ADC 采样结束
while (AdcRegs->ADCTRL1.bit.SEQ_BSY);
// 读取 ADC A0 通道采样值
Uint16 adcValueA0 = AdcRegs->ADCRESULT0;
// 读取 ADC A1 通道采样值
Uint16 adcValueA1 = AdcRegs->ADCRESULT1;
// 读取 ADC A2 通道采样值
Uint16 adcValueA2 = AdcRegs->ADCRESULT2;
// 读取 ADC A3 通道采样值
Uint16 adcValueA3 = AdcRegs->ADCRESULT3;
}
void main(void)
{
// 初始化系统时钟
InitSysCtrl();
// 初始化 ADC
InitAdc();
while (1)
{
// 采样 ADC
AdcSample();
// 在此处添加处理采样值的代码
}
}
```
以上代码包括 ADC 的初始化和采样过程,其中 `InitAdc()` 函数用于初始化 ADC, `AdcSample()` 函数用于采样 ADC。在 `AdcSample()` 函数中,我们可以通过读取 `AdcRegs->ADCRESULTx` 寄存器来获取 ADC 采样值,其中 `x` 为 ADC 输入通道号。在实际应用中,我们可以在 `AdcSample()` 函数中添加处理采样值的代码。
阅读全文