首页 > 其他分享 >DSP28335的ADC模块

DSP28335的ADC模块

时间:2024-06-21 20:28:35浏览次数:24  
标签:采样 ADC 模块 bit 排序 AdcRegs SEQ1 DSP28335

ADC模块

一、ADC时钟分频

 

// 使能ADC外设时钟

EALLOW;

SysCtrlRegs.PCLKCR0.bit.ADCENCLK=1;

EDIS;



// 高速外设时钟HSPCLK=SYSCLKOUT/(2*HISPCP)=25MHz

EALLOW;

SysCtrlRegs.HISPCP.bit.HSPCLK=3;

EDIS;



// FCLK = HSPCLK/(2*ADCCLKPS)=12.5MHz

AdcRegs.ADCTRL3.bit.ADCCLKPS=1;



// ADC工作时钟ADCCLK。

// CPS=0:ADCCLK=FCLK;CPS=1:ADCCLK=FCLK/2

AdcRegs.ADCTRL1.bit.CPS=0;



// ADC采样时间宽度SH Width = (ACQ_PS+1)*(1/ADCLK)

AdcRegs.ADCTRL1.bit.ACQ_PS=0xf;

二、ADC模块的工作方式

F28335的ADC一共有16个引脚,分成了2组:一组为ADCINA0~ADCINA7,使用采样保持器S/H-A,对应排序器SEQ1;另一组为ADCINB0~ADCINB1,使用采样保持器S/H-B,对应排序器SEQ2。

2.1 排序器工作方式

2.1.1 双排序器

排序器SEQ1使用通道选择控制寄存器ADCCHSELSEQ1和ADCCHSELSEQ2,可选择的通道为ADCINA0~ADCINA7;排序器SEQ2使用通道选择控制寄存器ADCCHSELSEQ3和ADCCHSELSEQ4,可选择的通道为ADCINB0~ADCINB7。

2.1.2 级联排序器

排序器SEQ使用通道选择控制寄存器ADCCHSELSEQ1~ADCCHSELSEQ4,可选择的通道为ADC所有的16个通道。

2.2 ADC的采样方式

2.2.1 顺序采样

通道选择控制寄存器中CONVxx的4位都用来定义输入引脚。最高位=0说明采样的是A组;最高位=1说明采样的是B组。低3位用来定义引脚。

2.2.2 同步采样

同步采样模式下,是成对通道进行采样,所有CONVxx的最高位被舍弃,只有低3位的数据有效。

2.3 ADC四种工作方式的ADCCHSELSEQn位情况

2.3.1 双排序器模式下顺序采样

2.3.2 双排序器模式下同步采样

2.3.3 级联模式下顺序采样

2.3.4 级联模式下同步采样

2.3.5 注意

(1)通道选择控制寄存器使用上的区别

双排序器模式下,A组通道只能选择ADCCHSELSEQ1和ADCCHSELSEQ2;B组通道只能选择ADCCHSELSEQ3和ADCCHSELSEQ4。

级联模式下,不管A组通道还是B组通道,都能选择ADCCHSELSEQ1~ADCCHSELSEQ4中的任意一个通道选择控制寄存器。

(2)还有最大转换通道寄存器的设置不同。

(3)究其本质,因为双排序器模式下使用的是两个8状态的排序器SEQ1和SEQ2,而级联模式下使用的是16状态的排序器SEQ。

三、ADC模块寄存器AdcRegs

3.1 ADC控制寄存器1(ADCTRL1)

Bit

Name

Description

11-8

ACQ_PS

采样时间设置

SH Width = (ACQ_PS+1)*(1/ADCLK)

7

CPS

分频

0:ADCCLK=FCLK

1:ADCCLK=FCLK/2

6

CONT_RUN

排序器运行方式

0:启停模式

1:连续运行

5

SEQ_OVRD

排序器连续运行时,指针复位方式

0:转换完MAX_CONV个通道后,排序器指针复位到初始状态。

1:最后一个排序状态后,排序器指针复位到初始状态。

4

SEQ_CASC

级联排序器工作方式

0:双排序器

1:级联排序器

3.2 ADC控制寄存器2(ADCTRL2)

Bit

Name

Description

14

RST_SEQ1

1:复位排序器SEQ1状态为CONV00

13

SOC_SEQ1

1:启动SEQ1

3.3 ADC控制寄存器3(ADCTRL3)

Bit

Name

Description

4~1

ADCCLKPS

分频

FCLK = HSPCLK/(2*ADCCLKPS)

0

SMODE_SEL

采样方式选择

0:顺序采样

1:同步采样

3.4 ADC输入通道选择序列控制寄存器ADCCHSELSEQn(n=1~4)

3.5 最大转换通道寄存器 ADCMAXCONV

AdcRegs.ADCMAXCONV.bit.MAX_CONV1=0;

//最大转换通道数=MAXCONVn+1

//SEQ1使用MAX_CONV1

//SEQ2使用MAX_CONV2

//级联模式SEQ使用MAX_CONV1

3.6 结果寄存器ADCRESULTn(n=0~15)

3.7 状态和标志寄存器ADCST

Bit

Name

Description

5

INT_SEQ2_CLR

中断清除位

1:清除SEQ2中断标志位INT_SEQ2

4

INT_SEQ1_CLR

中断清除位

1:清除SEQ1中断标志位INT_SEQ1

1

INT_SEQ2

SEQ2中断标志位

0:没有SEQ2中断事件

1:产生了SEQ2中断事件

0

INT_SEQ1

SEQ1中断标志位

0:没有SEQ1中断事件

1:产生了SEQ1中断事件

四、代码示例

void ADC_Init(void)

{

    //(1)使能ADC外设时钟

    EALLOW;

    SysCtrlRegs.PCLKCR0.bit.ADCENCLK=1;

    EDIS;



    //(2)ADC初始化函数

    InitAdc();



    //(3)ADC工作方式设置,包括工作时钟、采样方式、排序器设置、转换通道设置等

    EALLOW;

    SysCtrlRegs.HISPCP.bit.HSPCLK=3; // 高速外设时钟 HSPCLK=SYSCLKOUT/(2*HISPCP)=25MHz

    EDIS;

    AdcRegs.ADCTRL3.bit.ADCCLKPS=1; // FCLK = HSPCLK/(2*ADCCLKPS)=12.5MHz

    AdcRegs.ADCTRL1.bit.CPS=0; // ADC工作时钟ADCCLK。CPS=0:ADCCLK=FCLK; CPS=1:ADCCLK=FCLK/2



    AdcRegs.ADCTRL1.bit.ACQ_PS=0xf; // ADC采样时间宽度 SH Width = (ACQ_PS+1)*(1/ADCLK)

    AdcRegs.ADCTRL3.bit.SMODE_SEL=0; // 采样方式选择,0:顺序采样;1:同步采样



    AdcRegs.ADCTRL1.bit.SEQ_CASC=1; // 排序器工作方式,0:双排序器;1:级联排序器

    AdcRegs.ADCTRL1.bit.CONT_RUN=1; // 排序器运行方式,0:启停模式,1:连续运行



    AdcRegs.ADCMAXCONV.bit.MAX_CONV1= 0; // 最大转换通道数=MAXCONV+1

    AdcRegs.ADCCHSELSEQ1.bit.CONV00=0; // ADCINA0的通道为CONV00



    //(4)选择ADC触发方式,开启转换

    AdcRegs.ADCTRL2.bit.SOC_SEQ1=1; // 启动SEQ1

}



    //(5)读取ADC转换值

Uint16 Read_ADCValue(void)

{

    while(AdcRegs.ADCST.bit.INT_SEQ1==0); // 查询转换是否结束

    AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; // 清除中断标志位

    return AdcRegs.ADCRESULT0 >> 4; // 返回转换结果,右移4位来右对齐



}

标签:采样,ADC,模块,bit,排序,AdcRegs,SEQ1,DSP28335
From: https://blog.csdn.net/2301_78976182/article/details/139869275

相关文章

  • nodejs从基础到实战学习笔记-模块化、包
    二、模块化2.1什么是模块化模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。2.1.1把代码进行模块化拆分的好处提高了代码的复用性提高了代码的可维护性可以实现按需加载•如果程序设计的规......
  • TMS320F28335的ADC模块
    1 ADC简介英文全称Analog-to-DigitalConverter,模数转换器2 时钟配置外围时钟HSPCLK,通过HISCP来设置SysCtrlRegs.HISCP.all=3;设置为0时,不分频其他都为sysclk/2xHSPCLK=sysclk/(3*2)=150/6=25MHz此时还需要在进行一次分频通过设置ADCTRL3的ADCCLKP......
  • 数据分析---matplotlib模块的使用
    1.摘要在数据可视化、统计绘图和图表生成领域,Python被广泛使用,其中Matplotlib是一个极其重要的基础三方库。本博客旨在介绍Python及其三方库Matplotlib的详细信息,包括Matplotlib的安装步骤、示例代码及使用注意事项。2.引言2.1什么是Matplotlib?Matplotlib是一......
  • Oceanbase数据库500租户告警--模块LobReader使用异常分析
    文档编写这块确是不太好,感觉这篇文章要是写成公众号阅读量得哇哇的,也懒得弄,仅仅记录下信息,并分享下问题的处理思路上午十一点半左右收到告警信息,500租户使用率异常,告警信息如下"【云境平台告警通知】:资源类型:OceanBase集群;资源名称:xxxx;发生时间:2024-06-2111:36:14;告警内容......
  • n模块不支持windows!!!!!!!
    需要升级 node 版本。本着不想卸载node再重新安装的原则,因为node的环境配置以及各种相关配置有些繁琐,所以就想着使用命令的方式进行升级。在网上找了一些升级node的命令,最常见的是安装node的n模块,n模块 是用来管理node版本的。开始下载:npminstall-gn在cmd窗......
  • DC/AC电源模块:提高太阳能发电系统的效率和稳定性
    BOSHIDADC/AC电源模块:提高太阳能发电系统的效率和稳定性DC/AC电源模块是太阳能发电系统中的一个重要组成部分,其作用是将太阳能转化为交流电以供家庭或工业使用。它可以提高太阳能发电系统的效率和稳定性,使得太阳能发电系统更加可靠和持久。 一,DC/AC电源模块可以提高太阳能发......
  • 使用内置模块email发送邮件的方法
    importsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeaderfromemail.utilsimportformataddrfromutils.common_loggerimportloggerclassEmailSender:def__init__(self,smtp_server='smtp的server地址'):self.......
  • 序列化和反序列化pickle和json 模块
    importpicklehello='helloworld'data=pickle.dumps(hello)#pickle.dumps把任意对象序列化成一个bytes(字节数)print(data)data1=pickle.loads(data)#pickle.loads将字节数反序列化print(data1)importjsondata={'hello':123,'nihao':'word&......
  • 【Python日志模块全面指南】:记录每一行代码的呼吸,掌握应用程序的脉搏
    文章目录......
  • hashlib加密模块
    hashlib加密模块importhashlibmd5=hashlib.md5("你好".encode("utf-8"))#实例化把类的功能赋值给变量print(md5.hexdigest())md5.update('世界'.encode("utf-8"))print(md5.hexdigest(),len(md5.hexdigest()))sha256算法h=hashlib.sha256(......