[Kinetis] KE02的库中FTM_EPWM_demo模块FTM2改为FTM0或FTM1时出错

[复制链接]
 楼主| fhguo1990 发表于 2015-4-24 20:00 | 显示全部楼层 |阅读模式
KE02的库中FTM_EPWM_demo模块中,把FTM2改为FTM0或FTM1会出错!给我的感觉好像是时钟没有联接上似的,一但到读MODE寄存器那步,就发生硬件错误,直接跳到vectors.c中的void default_isr(void); 而且我对比了一下,FTM2的时钟开启后MODE中的写保护位就会置位,但FTM0与FTM1就不会。是否还有哪里有什么寄存器我没有设置到?在数据手册中我也没找到别的什么寄存器了!

另外,我肯定不是中断向量没有连接的问题,我把中断向量连接上了,而且还没有运行到开中断的时候。

补充:我在FTM2初始化前,即FTM2的时钟使能之前,加了一个读FTM2的MODE寄存器的语句,结果执行完这条语句之后现像与FTM0、FTM1的情况一样,所以我确定是初始化函数FTM_PWMInit中的SIM->SCGC |= SIM_SCGC_FTM0_MASK;语句没有完全打开FTM0的时钟。
后会无期1 发表于 2015-4-24 20:00 | 显示全部楼层
KE02的FTM2和FTM0,1不一样,FTM0,1其实就是一个TPM模块,功能没有FTM2全。
 楼主| fhguo1990 发表于 2015-4-24 20:01 | 显示全部楼层
我用的是KEIL,测试板用的是FRDM-KE02Z
 楼主| fhguo1990 发表于 2015-4-24 20:01 | 显示全部楼层
我现在还在测试中,我把FTM0的SC中的时钟选择写成02,结果是CNT寄存器会动起来,但MODE寄存器中的WPDIS位依然为0,按数据手册上所说,该位复位后应该是1才对,但目前是0,还是在读写MODE寄存器时会发生硬件中断!
我是MT 发表于 2015-4-24 20:02 | 显示全部楼层
KE02的FTM0,FTM1和FTM2不一样,它是一个TPM模块,而不是完全意义的FTM模块。
所以为什么你读MODE 寄存器就会出问题,是因为,FTM0根本就没有MODE寄存器,故你一读就会出错,下面我贴出KE02FTM模块寄存器的情况:


所以,不要操作MODE了,就当TPM用。
我是MT 发表于 2015-4-24 20:02 | 显示全部楼层
其实这点你在reference manual的第三章。3.9.1.1 FTM overview中的Table 3-32. FTM modules features
就可以看到整体的情况,以及每个模块具有哪些寄存器。
 楼主| fhguo1990 发表于 2015-4-24 20:03 | 显示全部楼层
我是MT 发表于 2015-4-24 20:02
其实这点你在reference manual的第三章。3.9.1.1 FTM overview中的Table 3-32. FTM modules features
就可 ...

我试过了,在Demo中将FTM2改为FTM0或FTM1时,初始化不能调用FTM_SetFTMEnhanced(FTM0);函数!真是太感谢您了!
我是MT 发表于 2015-4-24 20:04 | 显示全部楼层
fhguo1990 发表于 2015-4-24 20:03
我试过了,在Demo中将FTM2改为FTM0或FTM1时,初始化不能调用FTM_SetFTMEnhanced(FTM0);函数!真是太感谢 ...

,这个主要是由于FTM0,1有别于FTM2的原因,FTM2是加强版的模块。
所以以后用0,1注意一下就行。
mintspring 发表于 2015-4-25 17:25 | 显示全部楼层
如果库不对,那就是头文件或底层驱动,工程配置的问题。
598330983 发表于 2015-4-25 21:10 | 显示全部楼层
SIM->SCGC |= SIM_SCGC_FTM0_MASK
FSL_TICS_ZJJ 发表于 2015-4-27 14:20 | 显示全部楼层
楼主你好!
FTM0其实说白了就是TPM,它的寄存器是有限的,不像FTM1,2那样,有其他的多功能。
所以你如果把FTM2改为FTM0,就会有些寄存器FTM0没有,宠儿报错。
关于这点,你可以查看下参考手册的第三章关于FTM的部分,以及FTM章节。
FSL_TICS_ZJJ 发表于 2015-5-13 15:38 | 显示全部楼层
非常感谢你关于Kinetis的技术问题。如果你没有其他问题,我们将此帖默认为已解决.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

254

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部