楼主: grace-425826

[已解决] K60,PDB-ADC-DMA问题(已解决)

[复制链接]

该用户从未签到

85

主题

790

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2279
最后登录
1970-1-1
发表于 2013-8-29 15:37:59 | 显示全部楼层

RE:K60,PDB-ADC-DMA问题

这个工程我在Tower板上测试过了,是工作正常的。请问一下,你的程序在Tower板上运行是正常的吗?如果有问题,现象是什么样的?打印结果是怎样的?
回复 支持 反对

使用道具 举报

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
 楼主| 发表于 2013-8-29 16:29:58 | 显示全部楼层

回复:K60,PDB-ADC-DMA问题

我不是在tower板上运行的...现象就是只能触发两次后面就不能触发了,进入PDB中断,中断标志位为pdb sequence error 和PDBIF中断标志位都置位了。我应该找硬件问题么...
回复第 11 楼 于2013-08-29 15:37:59发表:
这个工程我在Tower板上测试过了,是工作正常的。请问一下,你的程序在Tower板上运行是正常的吗?如果有问题,现象是什么样的?打印结果是怎样的?
 
回复 支持 反对

使用道具 举报

该用户从未签到

85

主题

790

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2279
最后登录
1970-1-1
发表于 2013-8-30 09:07:59 | 显示全部楼层

RE:K60,PDB-ADC-DMA问题

听你的描述下来,不太像硬件问题。你手上有tower板吗?如果有的话,你测试一下你的工程,我不知道是不是我们在讨论同一个工程。我的工程是这个:KINETIS512_SC\build\iar\pdb_adc_demo。
另外问一下,你打印信息对吗?
回复 支持 反对

使用道具 举报

该用户从未签到

10

主题

459

帖子

0

中级会员

Rank: 3Rank: 3

积分
303
最后登录
2024-10-24
发表于 2013-8-30 09:31:59 | 显示全部楼层

回复:K60,PDB-ADC-DMA问题

我也自己运行了一下,没发现什么问题!
回复 支持 反对

使用道具 举报

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
 楼主| 发表于 2013-8-30 10:58:00 | 显示全部楼层

回复:K60,PDB-ADC-DMA问题

我用的是KINETIS512_SC\build\cw\pdb_adc_demo,iar刚刚也测试了一下,也是一样的。只能触发两次。
然后我有一块tower -k20D50M的板子,用k20d50m_sc_baremetal\build\iar\pdb_adc_demo测试了下,确实是没有问题的,我对照程序检查下吧。
回复第 13 楼 于2013-08-30 09:07:59发表:
听你的描述下来,不太像硬件问题。你手上有tower板吗?如果有的话,你测试一下你的工程,我不知道是不是我们在讨论同一个工程。我的工程是这个:KINETIS512_SC\build\iar\pdb_adc_demo。
另外问一下,你打印信息对吗?
 
回复 支持 反对

使用道具 举报

该用户从未签到

85

主题

790

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2279
最后登录
1970-1-1
发表于 2013-8-30 16:08:23 | 显示全部楼层

RE:K60,PDB-ADC-DMA问题

好的,你对比一下。
回复 支持 反对

使用道具 举报

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
 楼主| 发表于 2013-9-4 21:19:54 | 显示全部楼层

回复:K60,PDB-ADC-DMA问题(已解决)

今天再看了下自己的程序,也比对了两个官方例程,一个是在TWR-K20上运行的pdb-adc-demo,在TOWER板子上可以正常运行并且调试,一个是k60上的 pdb-adc-demo,在自己的板子上不能正常运行,总是进入pdb sequence error.这两个官方例程除了前者只有ADC0,后者多一个ADC1以外没有其他差别,与我的程序也只是ADC的配置上有些不同,PDB设定预触发时间和周期间隔不一样。
这是前言。结果是我把自己的程序改了重要的一处:PDB预触发时间之前设置为计算的AD转换时间 6.8us,稍微改长一点后,PDB能够正常触发AD在单次转换模式下。
总结:1.PDB的预触发是给ADC启动转换,转换结束后PDB时钟继续计时到达周期值,如果预触发时AD没有转换结束就会产生pdb sequence error,所以这段时间要设置得比转换时间稍长,否则就会出现只能触发一次AD的现象。
2.PDB在调试状态下仍然会继续计数,所以debug暂停程序之后再运行的话结果会有误。我观察的结果是暂停之后再运行PDB定时周期会改变。
仍然存在问题:我自己的程序现在已经能够通过检测了,虽然不能调试“(PDB不能停止),但还是能判断PDB没有进入sequence error,但是官方例程在我的板子上运行仍然出现此错误,不知为何。
另外,对于TWR板子上能够正常调试该例程的原因,我在英文论坛上有搜索到一篇帖子,大概是讲通过硬件还是怎么个方法是可以让PDB调试时停止计数的,我想应该是这个原因吧。
嗯,总结到这吧,希望对其他人有帮助。
回复 支持 反对

使用道具 举报

该用户从未签到

21

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
330
最后登录
1970-1-1
发表于 2013-9-5 09:46:25 | 显示全部楼层

回复:K60,PDB-ADC-DMA问题(已解决)

回复第 17 楼 于2013-09-04 21:19:54发表:
今天再看了下自己的程序,也比对了两个官方例程,一个是在TWR-K20上运行的pdb-adc-demo,在TOWER板子上可以正常运行并且调试,一个是k60上的 pdb-adc-demo,在自己的板子上不能正常运行,总是进入pdb sequence error.这两个官方例程除了前者只有ADC0,后者多一个ADC1以外没有其他差别,与我的程序也只是ADC的配置上有些不同,PDB设定预触发时间和周期间隔不一样。
这是前言。结果是我把自己的程序改了重要的一处:PDB预触发时间之前设置为计算的AD转换时间 6.8us,稍微改长一点后,PDB能够正常触发AD在单次转换模式下。
总结:1.PDB的预触发是给ADC启动转换,转换结束后PDB时钟继续计时到达周期值,如果预触发时AD没有转换结束就会产生pdb sequence error,所以这段时间要设置得比转换时间稍长,否则就会出现只能触发一次AD的现象。
2.PDB在调试状态下仍然会继续计数,所以debug暂停程序之后再运行的话结果会有误。我观察的结果是暂停之后再运行PDB定时周期会改变。
仍然存在问题:我自己的程序现在已经能够通过检测了,虽然不能调试“(PDB不能停止),但还是能判断PDB没有进入sequence error,但是官方例程在我的板子上运行仍然出现此错误,不知为何。
另外,对于TWR板子上能够正常调试该例程的原因,我在英文论坛上有搜索到一篇帖子,大概是讲通过硬件还是怎么个方法是可以让PDB调试时停止计数的,我想应该是这个原因吧。
嗯,总结到这吧,希望对其他人有帮助。
 

请问lz    PDB触发和预触发的区别是什么啊
回复 支持 反对

使用道具 举报

该用户从未签到

21

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
330
最后登录
1970-1-1
发表于 2013-9-5 12:02:28 | 显示全部楼层

回复:K60,PDB-ADC-DMA问题(已解决)

回复第 16 楼 于2013-08-30 16:08:23发表:
好的,你对比一下。 

请问 PDB触发和预触发的区别是什么啊
回复 支持 反对

使用道具 举报

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
 楼主| 发表于 2013-9-6 11:13:01 | 显示全部楼层

回复:K60,PDB-ADC-DMA问题(已解决)

你好,我的理解是预触发是为触发做准备的,文档中是这么说的“ The pre-triggers are used to precondition the ADC block prior to the actual trigger.” 而且预触发和触发就相差一个时钟。另外在这里也对PDB的例程说些我的理解吧,我觉得这一块确实很混乱。
 
 //下面一句的作用是使能预触发输出到ADC0,这是由CH0C1中的0决定的,这个数字代表是PDB通道编号,关于PDB的通道在手册第三章chip configuration3.8.1.2PDB Module Interconnections小节有说明,K60只有两个PDB通道给ADC(见表Table 3-45. PDB output //triggers)
TOS(3)和EN(3)中的3都是指预触发0和预触发1(即3=11(b))每个PDB通道的预触发数在K60中是2个,(m=2),联系上ADC理解就是ADC有A,B两组寄存器,需要两个预触发。
        PDB0_CH0C1 = PDB_C1_TOS(3)|PDB_C1_EN(3);  
 
        PDB0_CH1C1 = PDB_C1_TOS(3)|PDB_C1_EN(3);   //使能预触发输出到ADC1
       
         PDB0_CH0DLY0 = 0;//这是ADC0预触发0的触发时间点
         PDB0_CH0DLY1 = 1000; //ADC0预触发1的触发时间点,与0的间隔一定要保证大于前一组的AD转换时间,否则会产生错误
        PDB0_CH1DLY0 = 0;//ADC1预触发0的触发时间点
        PDB0_CH1DLY1 = 1000;    // ADC01预触发1的触发时间点
       
        PDB0_MOD = 2083;  //PDB计数器最大计数值,等于每次触发时间间隔,即周期,即可确定AD采样率
 
 
        PDB0_IDLY = 2083; //进入PDB中断计数值


请问lz    PDB触发和预触发的区别是什么啊
 
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-28 07:37 , Processed in 0.101694 second(s), 29 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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