ADC模块框图ADC Module Block Diagram
说明:
- 左上角为ADC的核心模块,实现AD转换功能。
- 左下角为参考电压选择模块
- 右上角为模数封装逻辑。
其中:
- 核心部分为采样保持电路(S/H Circuit)和AD转换器。
- 有16路启动转换(SOC)
- 4路后处理模块(PPB)
- 4路中断模块
信号模式
28002x只支持单端信号模式。
转换结果与参考电压之间的关系为:
启动转换(start-of-conversions,SOC)
说明:
- 最多有16路SOC用于启动转换;
- 每一路SOC需要配置3个信号:采样通道、采样持续时间、触发源;
- 多路SOC同时满足条件时,交给SOC仲裁和控制模块;
触发源可以是:
- 软件触发:ADCSOCFRC1.SOC0
- ADC中断触发:ADCINT1和ADCINT2
- 其他触发源(CPU定时器和PWM事件):具体如下。
触发源:
ADC转换优先级
Round Robin优先级
当同时设置多个 SOC 标志时,两种优先级形式中的一种决定了它们转换的顺序。 默认优先级方法是循环法。 在这个方案中,没有一个 SOC 具有比另一个更高的固有优先级。 优先级取决于循环指针(RRPOINTER)。 ADCSOCPRIORITYCTL 寄存器中反映的RRPOINTER 指向最后转换的SOC。 最高优先级的 SOC 被赋予下一个大于 RRPOINTER 值的值,在 SOC15 之后返回到 SOC0。 复位时该值为 16,因为 0 表示已发生转换。 当 RRPOINTER 等于 16 时,最高优先级被赋予 SOC0。 当 ADCCTL1.RESET 位置位或写入 SOCPRICTL 寄存器时,RRPOINTER 由器件复位复位。
A | 复位后,SOC0 为最高优先级 SOC ; SOC7 收到触发信号; SOC7 配置的通道立即转换。 |
B | RRPOINTER 更改为指向 SOC 7; SOC8 现在是最高优先级的 SOC。 |
C | SOC2 & SOC12 同时收到触发信号 ; SOC12 是循环轮上的第一个; SOC12 配置的通道在转换的同时 SOC2 保持待定。 |
D | RRPOINTER 更改为指向 SOC 12; SOC2 配置的通道现已转换。 |
E | RRPOINTER 更改为指向 SOC 2; SOC3 现在是最高优先级 SOC 。 |
高优先级SOC
ADCSOCPRIORITYCTL 寄存器中的 SOCPRIORITY 字段可用于将高优先级从单个 SOC 分配给所有 SOC。 当配置为高优先级时,SOC 将在任何当前转换完成后中断循环轮并作为下一个转换插入。 转换完成后,循环轮将在中断的地方继续运行。 如果同时触发两个高优先级 SOC,则编号较低的 SOC 将优先。
高优先级模式首先分配给 SOC0,然后按数字递增的顺序分配。 SOCPRIORITY 字段中写入的值定义了第一个不是高优先级的 SOC。 换句话说,如果将值 4 写入 SOCPRIORITY,则 SOC0、SOC1、SOC2 和 SOC3 被定义为高优先级,其中 SOC0 最高。
其中:
- RRPOINTER指示了当前轮盘处理的SOC编号。(0x10为初始状态,表示还未开始SOC转换,下一个最高优先级为SOC0)。
- SOCPRIORITY表示第一个不是高优先级的SOC。比如,值为4则表示SOC0~SOC3为高优先级,SOC4~SOC15是RR优先级。
- 当高优先级的SOC满足条件时,会中断当前的RR优先级的SOC,处理高优先级的SOC,处理完成后再返回之前的RR优先级。
- 如果同时有多个高优先级的SOC,则编号最小的优先处理。
下图 给出了使用高优先级 SOC 的示例。
A | 复位后,SOC4 在循环轮上为第 1 位; SOC7 收到触发信号; SOC7 配置的通道立即转换。 |
B | RRPOINTER 更改为指向 SOC 7; SOC8 现在在循环轮上排名第一。 |
C | SOC2 & SOC12 同时收到触发信号 ; SOC2 中断循环轮, SOC 2 配置的通道被转换,而 SOC 12 保持挂起。 |
D | RRPOINTER 一直指向 7; SOC12 配置的通道现已转换。 |
E | RRPOINTER 更改为指向 SOC 12; SOC13 现在在循环轮上排名第一。 |
突发模式(Burst Mode)
突发模式允许单个触发器一次遍历一个或多个循环 SOC。 设置 ADCBURSTCTL 寄存器中的位 BURSTEN 将 ADC 包装器配置为突发模式。 这会导致 TRIGSEL 字段被忽略,但仅适用于为循环操作(非高优先级)配置的 SOC。
所有循环 SOC 均基于 ADCBURSTCTL 寄存器中的 BURSTTRIG 字段而不是 TRIGSEL 字段触发。 收到突发触发后,ADC 包装器不会设置所有要转换的循环 SOC,而只会设置 (ADCBURSTCTL.BURSTSIZE + 1) SOC。 要设置的第一个 SOC 将是基于循环指针的具有最高优先级的 SOC,并且将设置后续 SOC,直到设置了 BURSTSIZE SOC。
其中:
- BURSTEN:是否使能BURST转换
- BURSTSIZE:当BUUST触发时,一次连续转换N+1个SOC。第一个SOC是从RRPOINTER开始。
- BURSTTRIGSEL:BURST转换的触发源,包括CPU定时器、PWM等。
示例:
A | 复位后,循环轮上的SOC4为1; 收到 BURSTRIG 触发; SOC4 & SOC5 设置和配置通道立即转换。 |
B | RRPOINTER 更改为指向 SOC5; SOC6 现在在循环轮上为 1。 |
C | BURSTTRIG & SOC1 触发 rcvd。 同时; 设置SOC1、SOC6、SOC7; SOC1 中断循环轮和 SOC1 配置的通道被转换,而 SOC6 和 SOC7 保持挂起。 |
D | RRPOINTER 一直指向 5; SOC6/SOC7 配置的通道现已转换。 |
E | RRPOINTER 更改为指向 SOC7; SOC8 现在在循环轮上为 1,等待 BURSTTRIG。 |
ADC转换结束产生中断
说明:
每一个ADC模块有4个可配置的中断。可以选择从16个SOC的EOC标志来触发。
参考文档:
https://www.ti.com.cn/cn/lit/pdf/spruin7
TMS320F28002x Microcontrollers Technical Reference Manual (Rev. A) (英文內容)
Chapter 15
Analog-to-Digital Converter (ADC)