PDB基本原理
1.Programmable delay block (PDB)的逻辑框图
从上图中可以看出PDB是由计数器+比较器+控制寄存器组成,对输入的triggger进行选择、延时等操作后输出trigger和中断。
2.核心功能实现
PDB主要有以下功能:
- 输入trigger的选择
- trigger和pre-trigger的输出
- 脉冲输出
- 中断
- DMA
2.1.输入trigger的选择
PDB最多有3种类型的trigger: 软触发(software trigger),内部触发(internal trigger), 外部触发(external trigger (via a pin))。入上图所示:可通过“状态和控制寄存器”(PDB_SC[TRIGSEL])来选择使用何种触发源。 所有非软TRIGGER,都是通过 TRGMUX模块来输入的。
2.2.trigger和pre-trigger的输出
PDB模块有一个计数器(PDB counter),当PDB被使能且发生2.1定义的输入事件(trigger的上升沿或软trigger寄存器置1),计数器开始计数。当计数到达PDBMOD中定义的值,计数值清零,a.PDB配置为周期模式则继续计数;b.PDB配置为单次触发模式则停止计数。
计数器的计数通过和不同的数值做比较后输出一下两种触发信号:
2.2.1.pre-trigger channel-trigger
pre-trigger主要用来触发ADC的不同通道进行采样。如何实现的呢?看下图:
以PDBCHn pre-trigger0为例:当计数器计数到达PDBCHnDLY0中定义的值后,经过(BB TOS EN),触发器产生上升沿:Pre-trigger 0。任何一个pre-trigger的触发都会伴随产生一个channel trigger的触发。
- TOS:PDB Channel Pre-Trigger Output Select (CHnC1[TOS[m]]),把它置0则延时直接被忽视掉,trigger信号经过2个外设周期后直接触发pre-trigger.
- BB:back-to-back模式:用ADC转换完成信号(Ack)触发pre-trigger,此时延时也是直接被忽视掉的。也就是可以通过这个寄存器的设置使得ADC的不同通道进行轮询采样。