查看: 4490|回复: 12

[已解决] KL参考指南TPM实验2的疑问?(已解决)

[复制链接]

该用户从未签到

27

主题

142

帖子

0

新手上路

Rank: 1

积分
329
最后登录
1970-1-1
发表于 2013-9-28 21:57:38 | 显示全部楼层 |阅读模式
 Kinetis L Peripheral Module Quick Reference, Rev. 0, 09/2012参考指南。P131有一节实验:TPM functionality in low power stop mode
对这个实验,我有几点疑惑,想跟大伙请教讨论下:
1.低功耗模式中, 是不是都要指定使用一种时钟模式呢,这两个有关联吗?例如VLPR模式就必须指定在BLPI或BLPE模式下使用
2.这个实验生成正弦波、方波、锯齿波的原理是什么?PWM应该不是这种波形的才是啊?
3,这个实验我做的时候,我把BUFFER变成6,虽然可以生成6个占空比的PWM波(占空比均50%),但发现波形很大一部分不是PWM,不知道除去PWM的其他波形是怎么回事?(实验示波器抓拍附件)
希望和大家一起讨论下原因
 
我知道答案 目前已有11人回答
IMG_20130928_221040.jpg
IMG_20130928_221053.jpg
IMG_20130928_221106.jpg
IMG_20130928_221117.jpg
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2013-9-29 16:00:06 | 显示全部楼层

RE:KL参考指南TPM实验2的疑问?

先回答你的第一个问题,低功耗中指定时钟模式的原因是因为为了节约功耗,某些时钟模块就会被关掉。比如在VLPR模式下,KL25的MCGFLLCLK,MCGPLLCLK就是不可以用的,不使能FLL,PLL,所以就是用内部时钟或者外部时钟。这时候就需要选择时钟模式为BLPI或者BLPE。具体的时钟情况,你可以查看Reference ManualP117页,table 5-1. clock summary。
下面的问题我马上再回答你
回复 支持 反对

使用道具 举报

该用户从未签到

27

主题

142

帖子

0

新手上路

Rank: 1

积分
329
最后登录
1970-1-1
 楼主| 发表于 2013-9-29 16:59:57 | 显示全部楼层

回复:KL参考指南TPM实验2的疑问?

回复第 2 楼 于2013-09-29 16:00:06发表:
大哥,又碰面了,今天我又研究了下那个实验,可能我昨天问的问题太让人难回答了,呵呵。
我今天按照指南把实验内容改了下。现在我只是用TPM溢出来触发DMA传输,把一个数组里面的值送给TPM0_C2V 来改变占空比。
这个理论上是可以实现的对吧?
那么我设置:DMA触发源TPM0溢出中断,源地址是8个元素的数组。DMA_DSR_BCR_BCR(16),16byte的BUFFER
                        DCR寄存器设置:
                              DMA_DCR0 =   DMA_DCR_EINT_MASK
                                                  | DMA_DCR_ERQ_MASK
                                                  | DMA_DCR_CS_MASK
                                                 |  DMA_DCR_SINC_MASK
                                                 | DMA_DCR_EADREQ_MASK
                                                 | DMA_DCR_SSIZE(2)
                                                 | DMA_DCR_DSIZE(2)
                                                | DMA_DCR_SMOD(1);
另外允许了DMAMUX_CHCFG_ENBL
如果我这么设置的话,每次进入中断该做哪些事情,中断是因为一个word传输完产生中断还是全部BUFFER的数据传输完毕呢?
 
我中断就执行了两句        DMA_DSR_BCR0 |= DMA_DSR_BCR_DONE_MASK;//清除标志
                                        DMA_DSR_BCR0 |= DMA_DSR_BCR_BCR(16);
这样做达不到预期的那种效果。
 
谢谢您了
 
回复 支持 反对

使用道具 举报

该用户从未签到

27

主题

142

帖子

0

新手上路

Rank: 1

积分
329
最后登录
1970-1-1
 楼主| 发表于 2013-9-30 08:59:56 | 显示全部楼层

RE:KL参考指南TPM实验2的疑问?

自己顶好了,过完节就沉下去了
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2013-9-30 09:29:44 | 显示全部楼层

RE:KL参考指南TPM实验2的疑问?

不会让你的贴沉下去,一定会帮你解决的。我现在一个一个回答你的问题:
1楼的第二个问题:这个实验生成正弦波、方波、锯齿波的原理是什么?
这个实验其实你会发现,这个原理就是大周期是一样的,比如根据你所说的用户指南P135,这个数组里面一共64个值,这个64个小脉冲作为一组,组成一个波形的一个周期,通过改变每个小脉冲的占空比,来组成具体的波形。其实是一个面积等效原理,你看这个数组中,脉宽是根据正弦,锯齿,方波来变化的。然后你在文档的最后,你看到通过RC滤波,输出的就是具体的波形。如果你想了解更多这方面知识,你可以去看看脉宽调制技术,这点在电力电子中用的非常广泛。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

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

RE:KL参考指南TPM实验2的疑问?

1楼第3个问题:你把buffer变成6,是代码中的比如正弦波的SRAMdata中const uint16 au16PwmBuffSin[64] 其中64变为6?这64个其实是组成一个波形的,你仔细观察这里的数值是按照正弦波变化的,同理,Trg是按照锯齿波变化的,Sqr是按照正弦波变化的。你如果去掉其他的,你留下的6个波形只是一整个波形中的一小块。所以你看不出什么来。
回复 支持 反对

使用道具 举报

该用户从未签到

27

主题

142

帖子

0

新手上路

Rank: 1

积分
329
最后登录
1970-1-1
 楼主| 发表于 2013-9-30 10:01:39 | 显示全部楼层

回复:KL参考指南TPM实验2的疑问?

回复第 6 楼 于2013-09-30 09:35:25发表:
1楼第3个问题:你把buffer变成6,是代码中的比如正弦波的SRAMdata中const uint16 au16PwmBuffSin[64] 其中64变为6?这64个其实是组成一个波形的,你仔细观察这里的数值是按照正弦波变化的,同理,Trg是按照锯齿波变化的,Sqr是按照正弦波变化的。你如果去掉其他的,你留下的6个波形只是一整个波形中的一小块。所以你看不出什么来。
 
BCR这个寄存器是DMA已经传输完成的byte是吗?在DMA传输完成中断里面一定要重新写一次是吗?奇葩的是我的BCR 寄存器每次传输完成之后是0x01000000,DMA_DCR_SMOD(1)我设置为16byte的缓存,是不是这个在源地址的数据传输完毕之后又重新从起始地址开始写,这个过程是需要占时间的吗?我在示波器上看到很长时间的空档…
 
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2013-9-30 10:58:20 | 显示全部楼层

RE:KL参考指南TPM实验2的疑问?

你好,BCR应该是还剩多少字节没有传送吧,BCR:This field contains the number of bytes yet to be transferred for a given block.
你0x01000000,正好是DONE,也就是传输完成位为1,那么这个时候,还剩的值就是0啊!
回复 支持 反对

使用道具 举报

该用户从未签到

27

主题

142

帖子

0

新手上路

Rank: 1

积分
329
最后登录
1970-1-1
 楼主| 发表于 2013-9-30 13:44:31 | 显示全部楼层

回复:KL参考指南TPM实验2的疑问?

回复第 8 楼 于2013-09-30 10:58:20发表:
你好,BCR应该是还剩多少字节没有传送吧,BCR:This field contains the number of bytes yet to be transferred for a given block.
你0x01000000,正好是DONE,也就是传输完成位为1,那么这个时候,还剩的值就是0啊!
 
 
还是之前的那个手册133页,涉及到DMA_DSR_BCR0 = DMA_DSR_BCR_BCR(64000);
请问下这个64000是如何计算的,64*2不是128byte吗,这个值是怎么计算来的呢?DMA传输完成中断是由于word传输完毕来中断的还是全部传输完毕来中断的。因为DMA是由于TPM溢出触发的。每次触发都触发一次DMA请求。
 
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2013-9-30 15:17:03 | 显示全部楼层

RE:KL参考指南TPM实验2的疑问?

你好,问题问的很好。首先我要和你说文档中有个错误,在133页,This value represents 1Hz PWM
frequency in center-aligned PWM mode and ~4MHz clock from fast IRC.
这句话中,1HZ是错误的,其实是1khz,也就是一个PWM的周期其实是1ms。
下面来说你的问题,一个整的正弦,或者锯齿,方波,包含了64个PWM。而每个PWM的占空比是2个byte,所以,DMA的长度设的是128个字节,由DMA_DCRn[SMOD]设置,装PWM占空比的SRAM的起始地址作为DMA的起始地址,然后设置每次request地址偏移2个字节,注意,request不是只是地址的偏移,不产生DMA中断,因为你的BCR还没有降到0.DMA中断只有BCR降到0,DONE置1产生。下面再来说说为什么设置BCR为64000,我觉得是这样的,你要产生一个正弦波,总不会只产生一个周期对不对,肯定多产生几个周期,这个就由你自己去控制,它不是由DMA的长度来控制的。所以,当一个DMA长度跑完,而BCR没有为0,这时候不会DMA中断,而是DMA的地址自动转移到起始地址,再继续循环的跑,直到你BCR的字节跑完为止。希望我的回答能够帮到你。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-20 08:00 , Processed in 0.109723 second(s), 31 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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