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进行处理,非常感谢!