K60pdb模块

来源:互联网 发布:2016淘宝打假被关店 编辑:程序博客网 时间:2024/05/16 13:56
Programmable Delay Block (PDB)模块
PDB可视为一个计数器模块,它的特殊之处在于它接收外部的触发信号,并且计数时会和多个数值进行比较,并在每次匹配的时间点输出相关的触发信号,从而触发ADC等模块或运行相关的中断服务程序。
一个PDB通道只有一个trigger信号,却有多个pre-trigger信号,其实两者之间的延迟只有一个peripheralclock,pre-trigger的作用可以理解为选中对应的ADC模块配置,ADC模块有多个SC1n的寄存器,目前的版本支持SC1A和SC1B,pre-trigger 0 可以理解为选中SC1A对应的ADC,pre-trigger 1可以理解为选中SC1B对应的ADC,选中配置后再由trigger信号触发对应的ADC采样。
————————————————————————————————————————————————————————————
使用分频因子和倍频因子大于1 时会限制 计数/延时的准确性。因此,要为应用程序选择尽可能低的分频和倍频的值。
触发输入事件定义为:对于每个通道,延时m 决定了输入触发开始到预触发输出信号改变的时间。定义如下:
1.输入事件到预触发m=(晶振频率*倍频因子*延时m)+2 个外设时钟周期。
2.增加一个额外的外设时钟周期来决定通道触发输出改变的时间。
——————————————————————————————————————————————————————————
Trigger A/B可以看做pre-trigger和trigger的组合逻辑。这里要注意的是pre-trigger的周期设置要大于ADC的转换时间,否则不但无法触发ADC采样,反而会产生一个PDBsequence error的中断。
利用PDB的特性,可以在极短的时间内触发两次ADC采样,即ping-pong模式。这里PDB的计数器会和三个数进行比较,当计数器累加到triggerA的设定时间时,会触发ADCA的转换,当计数器累加到triggerB的设定时间时,会触发ADCB的转换,最后计数到PDB的MOD值时,产生中断,并在中断服务程序里清楚ADC的COCO标志。
————————————————————————————————————————————————————————————
IDLY与MOD寄存器值的作用如下:
When the PDB counter reaches the value set in IDLY register, the SC[PDBIF] flag is set.A PDB interrupt can be generated if SC[PDBIE] is set and SC[DMAEN] is cleared. If SC[DMAEN] is set, PDB requests a DMA transfer when SC[PDBIF] is set.
The modulus value in MOD register, is used to reset the counter back to zero at the end of the count. If SC[CONT] bit is set, the counter will then resume a new count.Otherwise, the counter operation will cease until the next trigger input event occurs.
当PDB 计数器到达IDLY 寄存器的值时,SC[PDBIF]标志会被置位。若SC[PDBIE]被置位且SC[DMAEN]被清除时,PDB 会产生中断。若SC[DMAEN]
被置位,当SC[PDBIF]被置位时,则PDB 需要
一个DMA 传输。当DMA 使能,PDB 中断不会产生。
MOD 寄存器中的值,用于在计数结束后复位计数器到0。若SC[CONT]被置位时,计数器会重新开始计数。另外,直到下次输入触发事件发生计数会停止
另外:当PDB 计数器到达MOD 寄存器的值时,DAC 间隔计数器也会复位,因此当PDB 计数器归零时,DAC 间隔计数也会从新开始。
0 0