1、简介
开发板S32K144+S32DS+JLINK,裸机版的程序编写
首先,PDB肯定是一个定时器,但是它这个定时器傍上了大腿,所以就显得它尤其的重要,因为PDB->ADC是官方默认和建议的搭配,PDB触发器与ADC和TRGMUX互连:
PDB是可编程延迟模块,PDB可提供从内部或外部触发或可编程间隔信 到ADC硬件触发输入的可控制延迟。
PDB可以选择提供脉冲输出,用作CMP块中的采样窗口
PDB是由计数器+比较器+控制寄存器组成,对输入的triggger进行选择、延时等操作后输出trigger和中断。
因为PDB本质是一个延时模块,不可避免的对计数值进行比较,其中触发PDB计数的方式有三种:
- PDB_CHnDLYm和PDB counter比较触发计数
- TRIGSEL触发源(比较TRGMUX)触发计数
- 开启Back to Back模式,上一个PDB计数完成后,由上一个PDB通道的Ackm触发计数
PDB的触发源:内部触发、软件触发、外部触发
其中Back to Back模式是:使ADC转换完成后触发下一个PDB通道预触发和触发输出。
- PDB0 CH0 back-to-back chain
- PDB1 CH1 back-to-back chain
- PDB back-to-back chain forming PDB0-PDB1 ring
pre-trigger:主要用来触发ADC的不同通道进行采样,以PDBCHn pre-trigger0为例:当计数器计数到达定义的值后,经过(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的不同通道进行轮询采样
当pre-trigger被触发后,会激活相应的锁,只有与它相关联的 ADCnSC1[COCO]的上升沿可以解除pre-trigger的触发锁。ADC转换完成后ADCnSC1[COCO]会自动置1,读取相应的ADC转换结果后它会自动置0 。当然也可以通过disable PDB pre-trigger或者disable PDB 来解除pre-trigger的触发锁。每个pre-trigger都有各自的锁,每个通道的的任何一个pre-trigger锁都会激活channel trigger上锁。如果在锁未解除的情况下产生新的trigger,会触发PDB序列错误中断( PDB Channel Sequence Error Flag :CHnS[ERR[m]])。因此在设置trigger delay时要注意ADC的转换周期,不可delay<ADC转换周期。
2、原理图
无
3、寄存器
3.1、PDB_SC:Status and Control register
0 |
LDOK |
1:更新MOD,IDLY,CHnDLYm和PoyDLY寄存器的值 |
1 |
CONT |
连续模式使能
|
2-3 |
MULT |
为分频器选择倍增因子,选择计数器的分频器的乘法器。 00乘系数是1。 01乘数是10。 10的乘数是20。 11的乘数是40 |
5 |
PDBIE |
PDB中断使能 |
6 |
PDBIF |
PDB中断标志
|
7 |
PDBEN |
PDB启用 0 PDB禁用。计数器关闭。 1 PDB启用 |
8-11 |
TRGSEL |
触发输入源选择选择,。触发输入源可以是内部的,也可以是外部的,或软件触发器 0000-1110:触发源0—14 1111:选择软件触发 |
12-14 |
PRESCALER |
预定标器分频器选择 000计数使用外围时钟除以MULT(乘数)。 001计数使用外围时钟除以2 × MULT(乘法系数)。 010计数使用外围时钟除以4 × MULT(乘法系数) 011计数使用外围时钟除以8 × MULT(乘法系数) 100计数使用外围时钟除以16 × MULT(乘法系数) 101计数使用外围时钟除以32 × MULT(乘法系数) 110计数使用外围时钟除以64 × MULT(乘法系数) 111计数使用外围时钟除以128 × MULT(乘法系数) |
15 |
DMAEN |
DMA使能 |
16 |
SWTRIG |
软件触发,启用PDB,选择软件触发器作为触发器输入源,向SWTRIG写入1,重置并重新启动计数器 |
17 |
PDBEIE |
PDB序列错误中断使能 使能PDB序列错误中断。当PDBEIE设置时,PDB的任何通道序列错误标志产生一个PDB序列错误中断。 0 PDB序列错误中断禁用。 1 PDB序列错误中断使能 |
18-19 |
LDMOD |
加载模式选择 |
3.2、 Modulus register (PDB_MOD)
计数器的重载值
3.3、Counter register (PDB_CNT)
0-15 |
CNT |
PDB计数器 包含计数器的当前值 |
3.4、Interrupt Delay register (PDB_IDLY)
0-15 |
IDLY |
指定调度PDB中断的延迟值 |
3.5、Channel n Control register 1 (PDB_CHnC1)
1每个PDB通道有一个控制寄存器CHnC1。这个寄存器中的位控制,每个PDB通道操作的功能
|
EN |
PDB通道的Pre-Trigger使能 |
8-15 |
TOS |
PDB通道Pre-Trigger输出选择,这些位选择PDB ADC Pre-Trigger输出 |
16-23 |
BB |
PDB通道Pre-Trigger Back-to-Back操作启用 |
3.6、Channel n Status register (PDB_CHnS)
|
ERR |
PDB通道序列错误标志 |
16-23 |
CF |
PDB通道标志 |
3.7、Channel n Delay 0-7 register (PDB_CHnDLY0-7)
0-15 |
DLY |
PDB通道的延迟值 |
3.8、Pulse-Out n Enable register (PDB_POEN)
0-7 |
POEN |
PDB Pulse-Out启用 使能脉冲输出。在这个MCU中只实现了较低的8位。 0 PDB脉冲输出禁用 1 PDB脉冲输出启用 |
3.9、Pulse-Out n Delay register (PDB_POnDLY)
0-15 |
DLY2 |
PDB脉冲输出延迟2 |
16-31 |
DLY1 |
PDB脉冲输出延迟1 |
4、代码编程
此处只是展示PDB定时器的功能,在后面ADC章节后,会在那使用PDB+ADC例程,也会使用LPIT+ADC
4.1、pdb.h
4.2、pdb.c
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!