打印
[Kinetis]

KL25的DMA+ADC怎么确定AD转换的通道(已解决)

[复制链接]
3463|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hsguan|  楼主 | 2014-4-30 09:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
FSL_TICS_Jeremy| | 2014-4-30 13:55 | 只看该作者
你好,楼主!
针对你的问题,给你一个文档先参考一下。我想对你会有所帮助的。
AN4590-Using DMA to Emulate ADC Flexible Scan Mode on Kinetis K Series.pdf (201.08 KB)

使用特权

评论回复
板凳
hsguan|  楼主 | 2014-4-30 17:12 | 只看该作者
FSL_TICS_Jeremy 发表于 2014-4-30 13:55
你好,楼主!
针对你的问题,给你一个文档先参考一下。我想对你会有所帮助的。

您好~ 我第一次用DMA不是很懂,有几个问题
1.PDB Trigger 是啥,是不是RTC、lptmr抑或PIT结束时候产生的中断
2.定时器的中断发生的时候怎样不进入中断函数直接硬件触发AD转换,需要做什么操作(不会都是先触发DMA写控制字然后启动转换吧)
3.如果我选择AD的结果寄存器作为操作源,Slot Number选ADC,是不是AD转换完成就会自动触发DMA读取结果寄存器

使用特权

评论回复
地板
hsguan|  楼主 | 2014-5-3 17:00 | 只看该作者
FSL_TICS_Jeremy 发表于 2014-4-30 13:55
你好,楼主!
针对你的问题,给你一个文档先参考一下。我想对你会有所帮助的。


不好意思哈~越做问题越多。我用两路DMA一路写控制字一路读AD实现了用DMA+AD连续转换,但是我现在希望能够两次转换之间有精确的间隔应该怎么做呢。
我看手册上可以用PIT触发,但是1.我没有在手册上找到具体应该怎么做。2.我希望在VLPS下运行,不能用PIT。所以麻烦问一下怎么具体用LPTPM模块或者LPTMR触发DMA,或者怎么延时硬件触发ADC。
我使用的是KL25,之前DMA+ADC我还参考了KL05的一篇例程。

使用特权

评论回复
5
FSL_TICS_Jeremy| | 2014-5-4 10:35 | 只看该作者
hsguan 发表于 2014-4-30 17:12
您好~ 我第一次用DMA不是很懂,有几个问题
1.PDB Trigger 是啥,是不是RTC、lptmr抑或PIT结束时候产生的 ...

谢谢你的回复。
1.针对第一个问题,你没有必要了解PDB,因为K系列Kinetis没有PDB模块。
2. 定时器作为ADC硬件触发源,是以中断标志位作为触发标志的,而进不进中断没有影响的。
3.如果设置ADC转换完成触发DMA工作,如果源地址为ADC结果寄存器地址,这就会触发DMA读取ADC结果寄存器。

使用特权

评论回复
6
FSL_TICS_Jeremy| | 2014-5-4 10:39 | 只看该作者
hsguan 发表于 2014-5-3 17:00
不好意思哈~越做问题越多。我用两路DMA一路写控制字一路读AD实现了用DMA+AD连续转换,但是我现在希望能够 ...

我感觉你现在可能有点混乱,建议先看看参考手册厘清一下ADC+DMA需要使用的模块。
你首先可以看看参考手册的第三章:Chip configuration中的 3.2.1 Module to Module Interconnects和3.4.8.1 DMA MUX Request Sources

使用特权

评论回复
7
hsguan|  楼主 | 2014-5-6 10:24 | 只看该作者
FSL_TICS_Jeremy 发表于 2014-5-4 10:39
我感觉你现在可能有点混乱,建议先看看参考手册厘清一下ADC+DMA需要使用的模块。
你首先可以看看参考手册 ...

不好意思,由于TPM即便使用异步时钟功耗还是太高了(发现接近90uA,调好了以后发现Datasheet上也是这么写的),所以我想试试用lptmr硬件触发AD的方法,除了ADC_SC2_ADTRG和SIM_SOPT7里面触发的选项以外,还有什么和硬件触发有关。
是不是我应该先写ADC_SC2_ADTRG使能硬件触发,然后向ADC_SC1里面写通道号就暂时不会触发转换,直到硬件触发上升沿了ADC才会开始转换已经写入的通道吧。另外硬件触发应该不需要使能中断吧。
另外有什么办法使一个硬件触发沿触发几个通道的AD转换,连续的也可以。如果不能的话有没有办法不用中断的情况下重新装载DMA转换的计数值。

使用特权

评论回复
8
FSL_TICS_Jeremy| | 2014-5-6 11:40 | 只看该作者
本帖最后由 FSL_TICS_Jeremy 于 2014-5-6 11:42 编辑
hsguan 发表于 2014-5-6 10:24
不好意思,由于TPM即便使用异步时钟功耗还是太高了(发现接近90uA,调好了以后发现Datasheet上也是这么写 ...

没关系。
1. 除了ADC_SC2_ADTRG和SIM_SOPT7寄存器设置外,剩下应该就是对应硬件触发源工作的设置啊。
2.硬件触发设置寄存器设置先后顺序倒不是很重要的,但最好把触发源使能发在后面吧,不然的话,可能ADC寄存器刚刚设置完成,就触发ADC转换啊。关于你在问题提到的使能中断,它设不设置不会影响ADC工作的,因为硬件触发只是起一个开关工作,它的工作与ADC的工作是独立的
3.一个硬件触发几个通道的ADC转换好像不行,要顺序的触发设置的几个通道,最好采用在2楼的提供的应用手册所提供的方法。
至于你提出的在中断的情况下重新装载DMA转换的计数值,我不是很清楚这个,望解释一下。

使用特权

评论回复
9
hsguan|  楼主 | 2014-5-13 18:01 | 只看该作者
本帖最后由 hsguan 于 2014-5-13 20:03 编辑
FSL_TICS_Jeremy 发表于 2014-5-6 11:40
没关系。
1. 除了ADC_SC2_ADTRG和SIM_SOPT7寄存器设置外,剩下应该就是对应硬件触发源工作的设置啊。
2.硬 ...

还是之前低功耗的那个问题,我现在实在是是在是调不出来了。
1.官方提供的low_power_demo中的VLPS的模块是有问题的,有很多时候虽然提示已经进入VLPS,但是功耗是不对的。
2.我计划使用lptmr触发TPM作为DMA的一个通道触发转换,并在DMA完成一系列工作以后关闭TPM和AD降低功耗,但是现在我不知道怎么关闭TPM
3.能不能帮忙测一个low_power_demo中从LLS定时唤醒的功耗的图像,我这边每次唤醒到RUN模式再次进入休眠都有100个us的时间功耗高于LLS,我觉得就手册和Datasheet上的数据来说是不正常的,但是又不知道我哪里错了

使用特权

评论回复
10
FSL_TICS_Jeremy| | 2014-5-14 09:54 | 只看该作者
你好,楼主!
1.飞思卡尔中文论坛小组已经分享过Low_power_demo例程的文档,你可以参考一下。
2. 可以关闭LPTPM计数,来禁止LPTPM
https://bbs.21ic.com/icview-619865-1-1.html
https://bbs.21ic.com/icview-619867-1-1.html
https://bbs.21ic.com/icview-619868-1-1.html

使用特权

评论回复
11
魏承贤| | 2015-4-25 17:17 | 只看该作者
FSL_TICS_Jeremy 发表于 2014-4-30 13:55
你好,楼主!
针对你的问题,给你一个文档先参考一下。我想对你会有所帮助的。

这篇文档代码是不是有问题?可以提供完整代码吗?

使用特权

评论回复
12
lkl0305| | 2015-8-29 21:54 | 只看该作者
学习一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

48

帖子

0

粉丝