查看: 13409|回复: 11

[分享] 请教关于K60 PDB的使用

[复制链接]

该用户从未签到

2

主题

8

帖子

0

新手上路

Rank: 1

积分
15
最后登录
1970-1-1
发表于 2012-7-4 14:41:57 | 显示全部楼层 |阅读模式
1. K60的PDB定时器中的预触发功能是什么含义?
2.需要用PDB来触发ADC1,每125us进行一次AD转换,PDB应该如何配置?
3.PDB0_CH1DLY0 和PDB0_CH1DLY1 应该如何赋值? 
万分感谢高手能给于解答!
 
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-7-5 14:31:30 | 显示全部楼层

    RE:请教关于K60 PDB的使用

    1、每个人的理解是不一样的,能不能把你说的这个寄存器写一下
    2、先配置PDB的时钟频率,然后在时钟频率的基础上算时间
    3、这个根据你每个通道延时的时间来配置,我认为LY0和LY1配置置一个就可以了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    8

    帖子

    0

    新手上路

    Rank: 1

    积分
    15
    最后登录
    1970-1-1
     楼主| 发表于 2012-7-5 17:14:01 | 显示全部楼层

    回复:请教关于K60 PDB的使用

    首先感谢答复!
    我的用法是需要ADC等间隔连续采样,间隔为 125us,也就是采样频率为8KHz,想用PDB来硬件触发ADC。
    但是关于PDB的一些概念我还没有完全搞清楚:
    预触发是什么意思?通道是什么意思?通道延时是什么意思?
    我是这样理解的:MOD中设置的为总循环计数值,当软件触发PDB之后,总计数器就开始计数,到达0的时候可以产生PDB中断,并重新开始计数,但触发ADC并不是在这里。计数期间,当总计数值到达“通道延时值”的时候,就可以使该通道触发ADC的转换?如果不设置通道触发,意味着PDB即使运行了,也不会触发任何硬件?
    我这样理解不知道对不对?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    10

    帖子

    0

    新手上路

    Rank: 1

    积分
    19
    最后登录
    1970-1-1
    发表于 2012-7-23 12:25:44 | 显示全部楼层

    RE:请教关于K60 PDB的使用

    就我理解的,你看看,
      如果PDB做ADC选择通道延时以及转换时间延时的话,具体作用是这样,当软件触发后(假设模式是软件触发),那么此时计数器开始计数,当到达延时0时,这时开启adc模块和通道“搭桥”的处理(这里是由于片内一般就一个adc,而外界通道可以多个,这里8个,那么当用那个通道为模拟量输入时候就连起来~“搭桥”)。到延时1结束,这个时候开始,adc开始工作转换(adc转换一个数据是要时间的),那么一旦计数器到了中断延时的时间,那么就可以在中断函数中进行相应的adc处理了,如读数。当然这里的配置需要和adc相结合,不然,在延时1后,adc可能不会做“转换”的工作的。。。
        不好意思,我也才开始此款芯片,这只是我个人理解。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    33
    最后登录
    1970-1-1
    发表于 2012-7-29 11:48:49 | 显示全部楼层

    回复:请教关于K60 PDB的使用

    回复第 4 楼 于2012-07-23 12:25:44发表:
    就我理解的,你看看,
    如果PDB做ADC选择通道延时以及转换时间延时的话,具体作用是这样,当软件触发后(假设模式是软件触发),那么此时计数器开始计数,当到达延时0时,这时开启adc模块和通道“搭桥”的处理(这里是由于片内一般就一个adc,而外界通道可以多个,这里8个,那么当用那个通道为模拟量输入时候就连起来~“搭桥”)。到延时1结束,这个时候开始,adc开始工作转换(adc转换一个数据是要时间的),那么一旦计数器到了中断延时的时间,那么就可以在中断函数中进行相应的adc处理了,如读数。当然这里的配置需要和adc相结合,不然,在延时1后,adc可能不会做“转换”的工作的。。。
    不好意思,我也才开始此款芯片,这只是我个人理解。。。 

    SIM_SCGC6 |= SIM_SCGC6_PDB_MASK ;  // 使能时钟
    SIM_SOPT7 &= ~(SIM_SOPT7_ADC1ALTTRGEN_MASK  | // selects PDB not ALT trigger
                    SIM_SOPT7_ADC1PRETRGSEL_MASK |
                    SIM_SOPT7_ADC0ALTTRGEN_MASK  | // selects PDB not ALT trigger
                    SIM_SOPT7_ADC0ALTTRGEN_MASK) ;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     SIM_SOPT7 = SIM_SOPT7_ADC0TRGSEL(0);       // applies only in case of ALT trigger, in which case
                                                 // PDB external pin input trigger for ADC
     SIM_SOPT7 = SIM_SOPT7_ADC1TRGSEL(0);       // same for both ADCs
    // enable PDB, pdb counter clock = busclock / 20 , continous triggers, sw trigger , and use prescaler too
     PDB0_SC =  PDB_SC_CONT_MASK       // Contintuous, rather than one-shot, mode
             | PDB_SC_PDBEN_MASK      // PDB enabled
             | PDB_SC_PDBIE_MASK      // PDB Interrupt Enable
             | PDB_SC_PRESCALER(0x5)  // Slow down the period of the PDB for testing
             | PDB_SC_TRGSEL(0xf)     // Trigger source is Software Trigger to be invoked in this file
             | PDB_SC_MULT(2);        // Multiplication factor 20 for the prescale divider for the counter clock
                                      // the software trigger, PDB_SC_SWTRIG_MASK is not triggered at this time.
     PDB0_IDLY = 0x0000;   // need to trigger interrupt every counter reset which happens when modulus reached
     PDB0_MOD = 0xffff;    // largest period possible with the slections above, so slow you can see each conversion.
    // channel 0 pretrigger 0 and 1 enabled and delayed
     PDB0_CH0C1 = PDB_C1_EN(0x01)
               | PDB_C1_TOS(0x01)
               | PDB_C1_EN(0x02)
               | PDB_C1_TOS(0x02) ;
     PDB0_CH0DLY0 = ADC0_DLYA ;
     PDB0_CH0DLY1 = ADC0_DLYB ;
     
    / channel 1 pretrigger 0 and 1 enabled and delayed
     PDB0_CH1C1 = PDB_C1_EN(0x01)
               | PDB_C1_TOS(0x01)
               | PDB_C1_EN(0x02)
               | PDB_C1_TOS(0x02) ;
     PDB0_CH1DLY0 = ADC1_DLYA ;
     PDB0_CH1DLY1 = ADC1_DLYB ;
     PDB0_SC =  PDB_SC_CONT_MASK        // Contintuous, rather than one-shot, mode
             | PDB_SC_PDBEN_MASK       // PDB enabled
             | PDB_SC_PDBIE_MASK       // PDB Interrupt Enable
             | PDB_SC_PRESCALER(0x5)   // Slow down the period of the PDB for testing
             | PDB_SC_TRGSEL(0xf)      // Trigger source is Software Trigger to be invoked in this file
             | PDB_SC_MULT(2)          // Multiplication factor 20 for the prescale divider for the counter clock
             | PDB_SC_LDOK_MASK;       // Need to ok the loading or it will not load certain regsiters!
                                       // the software trigger, PDB_SC_SWTRIG_MASK is not triggered at this time.
     
    我对这段代码还理解的不太好,欢迎指导
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    0
    最后登录
    1970-1-1
    发表于 2012-8-1 14:52:41 | 显示全部楼层

    回复:请教关于K60 PDB的使用

    您好,请问您知道PDB可以产生一个定时的中断吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    10

    帖子

    0

    新手上路

    Rank: 1

    积分
    19
    最后登录
    1970-1-1
    发表于 2012-8-1 16:30:42 | 显示全部楼层

    RE:请教关于K60 PDB的使用

    SIM_SCGC6 |= SIM_SCGC6_PDB_MASK ;  // 使能时钟
    //两个ADC模块,配置他们的触发方式(软硬触发?)
    SIM_SOPT7 &= ~(SIM_SOPT7_ADC1ALTTRGEN_MASK  |    // 由于ADC1可以硬件触发,也可以软件触发,这里选择PDB(软件)触发
                    SIM_SOPT7_ADC1PRETRGSEL_MASK |   // 选择预触发器A
                    SIM_SOPT7_ADC0ALTTRGEN_MASK  | // selects PDB not ALT trigger
                    SIM_SOPT7_ADC0ALTTRGEN_MASK) ;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    SIM_SOPT7 = SIM_SOPT7_ADC0TRGSEL(0);       // 选择在PDB模式下,ADC的触发的输入命令源,这里是PDB的外部管脚;103或者111
                                                 // PDB external pin input trigger for ADC
    SIM_SOPT7 = SIM_SOPT7_ADC1TRGSEL(0);       // same for both ADCs
    // 配置频率,使能pdb,以及选择pdb的中断触发源,
    PDB0_SC =  PDB_SC_CONT_MASK       //配置成是连续触发还是单发的
             | PDB_SC_PDBEN_MASK      // PDB enabled
             | PDB_SC_PDBIE_MASK      // PDB Interrupt Enable
             | PDB_SC_PRESCALER(0x5)  // 配置分频
             | PDB_SC_TRGSEL(0xf)     // 中断源选择,这里是软件中断,就是配置触发中断的方式
             | PDB_SC_MULT(2);        // Multiplication factor 20 for the prescale divider for the counter clock
                                      // the software trigger, PDB_SC_SWTRIG_MASK is not triggered at this time.
    PDB0_IDLY = 0x0000;   // 软件中断发生时刻,其实也是读取转换值时刻
    PDB0_MOD = 0xffff;    // 总周期
    // channel 0 pretrigger 0 and 1 enabled and delayed
    PDB0_CH0C1 = PDB_C1_EN(0x01)   //使能通道0预触发模式
               | PDB_C1_TOS(0x01)   //选择某一PDB通道为ADC的预触发输出
               | PDB_C1_EN(0x02)
               | PDB_C1_TOS(0x02) ;
    PDB0_CH0DLY0 = ADC0_DLYA ;   //这里配置0时刻开始,就会去做adc的通道之类的链接
    PDB0_CH0DLY1 = ADC0_DLYB ;   //到了1时刻就开启ADC了,完成了一次数据转换了,在中断时候提出数据

    / channel 1 pretrigger 0 and 1 enabled and delayed
    PDB0_CH1C1 = PDB_C1_EN(0x01)
               | PDB_C1_TOS(0x01)
               | PDB_C1_EN(0x02)
               | PDB_C1_TOS(0x02) ;
    PDB0_CH1DLY0 = ADC1_DLYA ;
    PDB0_CH1DLY1 = ADC1_DLYB ;
    PDB0_SC =  PDB_SC_CONT_MASK        // Contintuous, rather than one-shot, mode
             | PDB_SC_PDBEN_MASK       // PDB enabled
             | PDB_SC_PDBIE_MASK       // PDB Interrupt Enable
             | PDB_SC_PRESCALER(0x5)   // Slow down the period of the PDB for testing
             | PDB_SC_TRGSEL(0xf)      // Trigger source is Software Trigger to be invoked in this file
             | PDB_SC_MULT(2)          // Multiplication factor 20 for the prescale divider for the counter clock
             | PDB_SC_LDOK_MASK;       // Need to ok the loading or it will not load certain regsiters!
                                       // the software trigger, PDB_SC_SWTRIG_MASK is not triggered at this time.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    10

    帖子

    0

    新手上路

    Rank: 1

    积分
    19
    最后登录
    1970-1-1
    发表于 2012-8-1 16:33:57 | 显示全部楼层

    RE:请教关于K60 PDB的使用

    原理:就我个人理解,其实这个PDB在和ADC一起时,一旦触发模式满足,则需要先在延时时间0开始到延时时间1停止,这段时间去将通道搭建到ADC通道.而当到达延时时间1后就开始启动了adc了,到中断延时时间后,这个时候可以读数;
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    0
    最后登录
    1970-1-1
    发表于 2013-4-19 23:07:17 | 显示全部楼层

    回复:请教关于K60 PDB的使用

    想问下为什么在头文件中只有PDB0_MOD、PDB0_CNT等,而没有PDB1的??还有PDB在mcu中的硬件构造是怎么样的?通道是指什么??14个硬件触发又是指什么?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    帖子

    0

    注册会员

    Rank: 2

    积分
    96
    最后登录
    2015-1-22
    发表于 2015-1-18 20:50:25 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-27 23:30 , Processed in 0.114062 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表