可编程延迟模块PDB,PDB可提供从内部或外部触发或可编程间隔信号到ADC硬件触发输入的可控制延迟。 PDB可以选择提供脉冲输出,用作CMP块中的采样窗口。 S32K系列的PDB资源如下表:
PDB功能框图
在下图中,以下字母表示的意义:
? N:PDB通道的总数
? n:PDB通道号,范围从0到N-1 ? M:每个PDB通道的总可用预触发 ? m:预触发编号,范围从0到M-1 ? Y:脉冲输出的总数
? y:脉冲数,有效值为0到Y-1
由以上功能框图所知,PDB的本质是一个延时模块,除了PDB_SC控制状态寄存器设置主要的模式外,其他就是对计数值的填写和比较。
首先从左到右看第一部分,通过通道控制寄存器PDB_CHnC1选择通道和相关模式之后,可以选择三种方式触发本身PDB的计数:
? PDB_CHnDLYm和PDB counter比较触发计数 ? TRIGSEL触发源(比如TRGMUX)触发计数
? 开启Back to Back模式,当上一个PDB计数完毕后,由上一个PDB通道的Ackm触
发计数
第二部分用来设置PDB的计时时间,PDB本质是一个延时模块,故这是PDB的主要部分。通过PDB_SC[MULT]和PDB_SC[PRESCALER]来对输入时钟进一步预分频;PDB_MOD寄
存器指定计数器的计数值上限;开始计数,PDB_CNT根据时间不断计数,当与设定的计数值PDB_MOD相同时,一个周期的计数完成,PDB_CNT重新开始计数。
通过PDB_SC[TRGSEL]设置触发源,PDB_SC[CONT]设置是否连续计数之后,可以控制计数器在计数一个周期后的重新计数或者暂停计数。
第三部分用来选择PDB的触发源,包括TRGMUX或者软件触发。在PDB_SC[TRGSEL]中设置。
第四部分为PDB的脉冲输出功能配置。PDB可以生成可配置宽度的脉冲输出:
? 当PDB计数值达到PDB_POnDLY[DLY1]设置的值时,脉冲输出高电平 ? 当PDB计数值达到PDB_POnDLY[DLY2]设置的值时,脉冲输出低电平
脉冲输出功能在PDB_POEN[POEN]位中开启。将DLY2的值设置大于或小于DLY1的值产生的脉冲结果相反:
第五部分是PDB的中断配置,在PDB_SC[PDBIE]中打开中断。当使能中断之后,PDB的计数值达到PDB_IDLY中设置的值后,产生中断。
实例:PDB触发ADC 功能概述
? 平台:S32K144
使用PDB0触发ADC0_SE8,开启Back to Back模式,ADC0_SE8转换完毕之后触发ADC0_SE0转换。 编程顺序
1. 初始化PDB0的时钟
2. 选择PDB0的时钟预分频器和触发方式
3. 选择PDB0通道,是否开启Back to Back模式
? 通道0触发通道1,通道1开启Back to Back,通道0不用 4. 填写PDB0的通道计数值,中断延时计数值或者脉冲输出计数值 5. 使能PDB
6. 更新计数值,使能软件触发(如果是硬件触发不需要)
? 每次一个流程之后,需要重新软件触发使能才开启下一次计数
代码
void PDB_Init(void) {
PCC->PCCn[PCC_PDB0_INDEX] = PCC_PCCn_CGC_MASK;
PDB0->SC = PDB_SC_MULT(1) | /* 分频器选择10 */ PDB_SC_TRGSEL(0xF) | /* 选择软件触发 */ PDB_SC_PRESCALER(7); /* 时钟128*10分频 */
PDB0->CH[0].C1 = PDB_C1_EN(3) | /* 开启PDB通道0和通道1 */
PDB_C1_TOS(3) | /* 双通道开启 ADC触发 */
PDB_C1_BB(2);
/* 开启back to back功能,这里是通道0触发通道1,通道1开启back to back */
PDB0->MOD = 0xFFFF; /* 初始化PDB计数器 */ PDB0->IDLY = 0; /* 初始化中断延时 */ PDB0->MOD = 15000; /* 计数值 */
PDB0->CH[0].DLY[0] = 15000; PDB0->CH[0].DLY[1] = 15000;
PDB0->SC |= PDB_SC_PDBEN_MASK; /* PDB使能 */ PDB0->SC |= PDB_SC_LDOK_MASK; /* 更新计数值 */ PDB0->SC |= PDB_SC_SWTRIG_MASK; /* 使能软件触发 */ }
感谢“只写不看小叶子”,原创作品出处:
https://blog.csdn.net/zz56z56/article/details/101870946?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-1-101870946.nonecase
S32K系列之PDB框图详解及PDB触发ADC



