本帖最后由 springvirus 于 2013-10-23 16:26 编辑
书上的定时器模块这部分,讲的少了点,简单介绍后接着就是代码,感觉有些仓促。 对照书,看参考手册,认识上有了大致轮廓,也有了疑问。
先说下PDB特征点
1. 最多到15个触发输入源和1个软件触发源
2. 最多到8个PDB通道供给ADC硬件触发
2-1. 一个PDB通道对应一个ADC
2-2. 对于ADC转换触发来说,每个PDB通道有最多8个预触发输出和一个触发输出
2-3. 触发输出可以独自使能或禁止
2-4. 对于每个预触发输出有一个16位的延时寄存器
2-5. 可以选择将延时寄存器旁路掉
2-6. 一次性和连续,2种工作方式
2-7. 选择背靠背模式操作,使得ADC转换完成可以触发下一个PDB通道
2-8. 一个可编程的延时中断
2-9. 一个顺序错误中断
2-10. 对于预触发,有一个通道标志位和一个顺序错误标志位
2-11. 支持DMA
3. 最多到8个DAC间隔触发
3-1. 对于每个DAC,有一个间隔触发输出
3-2. 对于每个触发输出有一个16位的延时间隔寄存器
3-3. 可以选择将延时寄存器旁路掉
3-4. 可以选择外部触发
4. 最多到8路的脉冲输出
4-1. 脉冲输出可以独自使能或禁止
4-2. 可编程脉冲宽度
总结了几个关键点: input source event, ch0 pre-trigger, ch0 trigger, ADC conversion
从参考手册得到的这4个重要时间节点的信息
PDB0_CH0DLY0: 当计数器到达此值,预触发变有效
PDB0_CH1DLY1: 当计数器到达此值,同样是预触发变有效
PDB0_IDLY: 若PDB中断使能,当计数器到达此值,会产生PDB中断
PDB0_MOD: 当计数器到达此值,计数器会清零,若在连续模式,则会重新开始从0计数
开始计数后,计数器会和以下4个寄存器的值进行比对,那么在这4个节点时刻,PDB中到底发生了什么, 对后续的进程产生了哪些影响,ADC何时开始采样,何时完成转换,用时多长?
从Figure 38-54,Figure 38-56和文字叙述可以看出, 从有触发输入事件开始,启动计数器, 若PDB0_CH0DLY0和PDB0_CH0DLY1都没有被旁路的话,那么当计数器值等于 PDB0_CH0DLY0时,CH0的预触发0变有效,此时CH0触发变有效,当计数器值等于 PDB0_CH0DLY1时,CH0的预触发1变有效,此时CH0触发同样变有效,即CH0中的任何一个预触发有效,都会使得触发有效,从而触发ADC进行转换。
若一次ADC转换在过程进行中时,此时再来一次PDB通道的触发(假设相关控制位已设置成允许sequence error),那么此时就会产生sequence error。
当计数器到达PDB0_IDLY时,可以认为是ADC转换完成。 当计数器到达PDB0_MOD时,计数器值清零,若在连续模式,则会重新开始从0计数,否则会停止计数 直到下一个触发输入事件发生。
【注意,SC[LDMOD]和SC[LDOK]的设置,尤为关键】
写代码时,整个过程最关键的这4个关于时间的寄存器,根据什么要素,计算合适的时间值? |